• 我的位置:
  • 首页
  • -
  • 漏洞预警
  • -
  • 其他
  • -
  • Apache SkyWalking远程代码执行漏洞
    • CNNVD编号:未知
    • 危害等级: 高危 
    • CVE编号:未知
    • 漏洞类型: 远程代码执行
    • 威胁类型:远程
    • 厂       商:未知
    • 漏洞来源:深信服
    • 发布时间:2021-03-11
    • 更新时间:2021-03-11

    漏洞简介

    1、组件介绍

    SkyWalking是一个APM(应用程序性能监视器)系统,专门为微服务、云原生和基于容器(Docker,Kubernetes,Mesos)的体系结构而设计。

    2、漏洞描述

    近日,深信服安全团队监测到一则Apache SkyWalking组件存在远程代码执行漏洞的信息,漏洞编号:无,漏洞危害:高危。该漏洞是由于对metricName参数过滤不严导致SQL注入,结合H2数据库特性可以进一步造成远程代码执行。攻击者可利用该漏洞在未授权的情况下,构造恶意数据执行远程代码执行攻击,最终获取服务器权限。

    漏洞公示

    准备工具

    maven下载地址:

    https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zip

    SkyWalking8.3.0下载地址:

    https://codeload.github.com/apache/skywalking/zip/v8.3.0


    搭建调试环境

    将下载的SkyWalking解压之后导入idea。修改maven源为国内源。打开idea控制台,执行:

    .\mvnw compile -Dmaven.test.skip=true

    可能遇到的问题:

    1.在解压node-8.17.0-win-x64.zip的时候报错。解决:从https://nodejs.org/dist/v8.17.0/node-v8.17.0-win-x64.zip下载之后重命名为node-8.17.0-win-x64.zip放到对应的路径即可。

    2.在执行npm install的步骤失败。解决:将apm-webapp/pom.xml文件中的install --registry改为国内源

    在oap-server\server-starter\src\main\java\org\apache\skywalking\oap\server\starter\OAPServerStartUp.java中启动OAPServer,然后在skywalking-ui 目录运行 npm run serve 启动前端服务,访问主机的8080端口,整个环境启动完成。


    分析

    首先定位到漏洞产生的位置

    oap-server\server-starter\src\main\java\org\apache\skywalking\oap\server\starter\OAPServerStartUp.java

    在64行中直接将metricName参数拼接到sql语句中,104行中执行了sql语句,整个过程没有做任何过滤。


    104行中的buildCountStatement函数中会在语句前后加上部分内容形成完整的sql语句。

    知道了漏洞产生的地方之后,接下来向上找数据流向。

    LogQuery::queryLogs()->LogQueryService::queryLogs()->H2LogQueryDAO::queryLogs()

    在oap-server\server-query-plugin\query-graphql-plugin\src\main\java\org\apache\skywalking\oap\query\graphql\resolver\LogQuery.java 55行找到metricName参数的赋值


    SQL注入

    前面提到直接将metricName参数拼接,为了形成完整的sql语句所以在metricName传递的参数为恶意的sql语句。

    最后拼接为

    select count(1) total from (select 1 from {恶意sql语句} where 1=1)

    执行结果:


    RCE

    思路:利用file_write函数将编译好的class文件写到服务器上,然后利用link_schema函数加载该class文件。

    1、构造class文件。把要执行的代码放到类的static 块中。

    2、写到服务器。用file_write函数将恶意类写入到服务器上。


    3、加载恶意类。利用link_schema函数加载上传的恶意类。


    4、idea在调试的时候会修改classpath,所以在调试的时候可以在上传恶意类之后将路径添加到idea的classpath中,重启调试环境之后再用link_schema函数加载即可,最后可以用file_read函数读取执行结果。

    参考网站

    暂无

    受影响实体

    SkyWalking是遵循Apache 2.0 License协议的分布式系统的应用程序性能监视工具,可能受漏洞影响的资产分布于世界各地,全球大约有四千多台服务器运行该服务,中国大陆省份中主要分布于广东、浙江、北京等省市。


    目前受影响的Apache SkyWalking版本:

    Apache SkyWalking < v8.4.0

    补丁

    1、如何检测组件系统版本

    方法一、如果下载源码编译的可以在项目根目录下的pom.xml文件中可以查看版本号:


    方法二、如果是编译好的文件在oap-libs目录下查看以skywalking开头的文件对应的版本:

    2、官方修复建议

    当前官方已发布最新版本,建议受影响的用户及时更新升级到最新版本。链接如下:

    https://skywalking.apache.org/downloads/

    3、深信服解决方案

    深信服下一代防火墙】可轻松防御此漏洞, 建议部署深信服下一代防火墙的用户更新至最新的安全防护规则,可轻松抵御此高危风险。

    深信服云盾】已第一时间从云端自动更新防护规则,云盾用户无需操作,即可轻松、快速防御此高危风险。

    深信服安全感知平台】可检测利用该漏洞的攻击,实时告警,并可联动【深信服下一代防火墙等产品】实现对攻击者ip的封堵。

    深信服安全运营服务】深信服云端安全专家提供7*24小时持续的安全运营服务。在漏洞爆发之初,云端安全专家即对客户的网络环境进行漏洞扫描,保障第一时间检查客户的主机是否存在此漏洞。对存在漏洞的用户,检查并更新了客户防护设备的策略,确保客户防护设备可以防御此漏洞风险。

    深信服安全云眼】在漏洞爆发之初,已完成检测更新,对所有用户网站探测,保障用户安全。不清楚自身业务是否存在漏洞的用户,可注册信服云眼账号,获取30天免费安全体验。

    注册地址:http://saas.sangfor.com.cn

    深信服云镜】在漏洞爆发第一时间即完成检测能力的发布,部署云端版云镜的用户只需选择紧急漏洞检测,即可轻松、快速检测此高危风险。部署离线版云镜的用户需要下载离线更新包来获取该漏洞的检测能力。