Skywalking远程代码执行漏洞预警
01
时间轴
2021-01-23
蚂蚁安全非攻实验室 @fatansyC4t 向Apache官方报告了Apache Skywalking远程代码执行漏洞
2021-02-04
Apache Skywalking官方发布了补丁,修复了该漏洞。
2021-02-07
阿里云安全发布漏洞风险提示。
02
漏洞分析
Skywalking历史上存在两次sql注入漏洞,CVE-2020-9483、CVE-2020-13921。经过源码分析,发现两次sql注入漏洞修复并不完善,仍存在一处sql注入漏洞。(该请求无页面入口,需要根据graphql配置文件手动进行请求构造,或许这就是官方遗漏该注入点的原因)
Skywalking默认配置下使用的数据库为h2,且使用sa权限启动。
通过查询官方文档得知,h2数据库存在写文件函数FILE_WRITE(需要admin权限执行),文件内容及文件名均可控。
另一个LINK_SCHEMA函数可以指定并发起一次jdbc或者jndi请求,但由于目标环境中无tomcat和springboot依赖,所以在高版本jdk中也无法进行通用的jndi利用,需要在本地依赖中寻找reference链。
进一步分析LINK_SCHEMA底层源码,发现代码中存在一处类加载过程,而这个类就是sql函数的第二个参数,用户可控。(这个参数用于指定本次使用的jdbc驱动类或者jndi context类)
于是我们可以先利用任意文件写入函数在classpath中写一个恶意类,然后再使用LINK_SCHEMA函数来加载这个恶意类,实现远程代码执行。
03
漏洞证明
04
修复建议
1、升级Apache Skywalking 到最新的 v8.4.0 版本。
2、将默认h2数据库替换为其它支持的数据库。
05
安全产品
安全产品 | 解决方案 |
云盾WAF | 已可防护该类漏洞,并提供7天免费漏洞应急服务,为 您争取漏洞修复时间,应急开通地址:https://c.tb.cn/I3.XzCtR |
阿里云云安全中心 | 应急漏洞模块已支持对该漏洞一键检测 |
阿里云云防火墙 | 已可以防御此攻击 |