• 我的位置:
  • 首頁
  • -
  • 漏洞預警
  • -
  • 其他
  • -
  • Apache SkyWalking遠程代碼執(zhí)行漏洞
    • CNNVD編號:未知
    • 危害等級: 高危 
    • CVE編號:未知
    • 漏洞類型: 遠程代碼執(zhí)行
    • 威脅類型:遠程
    • 廠       商:未知
    • 漏洞來源:深信服
    • 發(fā)布時間:2021-03-11
    • 更新時間:2021-03-11

    漏洞簡介

    1、組件介紹

    SkyWalking是一個APM(應用程序性能監(jiān)視器)系統(tǒng),專門為微服務、云原生和基于容器(Docker,Kubernetes,Mesos)的體系結(jié)構(gòu)而設計。

    2、漏洞描述

    近日,深信服安全團隊監(jiān)測到一則Apache SkyWalking組件存在遠程代碼執(zhí)行漏洞的信息,漏洞編號:無,漏洞危害:高危。該漏洞是由于對metricName參數(shù)過濾不嚴導致SQL注入,結(jié)合H2數(shù)據(jù)庫特性可以進一步造成遠程代碼執(zhí)行。攻擊者可利用該漏洞在未授權(quán)的情況下,構(gòu)造惡意數(shù)據(jù)執(zhí)行遠程代碼執(zhí)行攻擊,最終獲取服務器權(quán)限。

    漏洞公示

    準備工具

    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


    搭建調(diào)試環(huán)境

    將下載的SkyWalking解壓之后導入idea。修改maven源為國內(nèi)源。打開idea控制臺,執(zhí)行:

    .\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.在執(zhí)行npm install的步驟失敗。解決:將apm-webapp/pom.xml文件中的install --registry改為國內(nèi)源

    在oap-server\server-starter\src\main\java\org\apache\skywalking\oap\server\starter\OAPServerStartUp.java中啟動OAPServer,然后在skywalking-ui 目錄運行 npm run serve 啟動前端服務,訪問主機的8080端口,整個環(huán)境啟動完成。


    分析

    首先定位到漏洞產(chǎn)生的位置

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

    在64行中直接將metricName參數(shù)拼接到sql語句中,104行中執(zhí)行了sql語句,整個過程沒有做任何過濾。


    104行中的buildCountStatement函數(shù)中會在語句前后加上部分內(nèi)容形成完整的sql語句。

    知道了漏洞產(chǎn)生的地方之后,接下來向上找數(shù)據(jù)流向。

    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參數(shù)的賦值


    SQL注入

    前面提到直接將metricName參數(shù)拼接,為了形成完整的sql語句所以在metricName傳遞的參數(shù)為惡意的sql語句。

    最后拼接為

    select count(1) total from (select 1 from {惡意sql語句} where 1=1)

    執(zhí)行結(jié)果:


    RCE

    思路:利用file_write函數(shù)將編譯好的class文件寫到服務器上,然后利用link_schema函數(shù)加載該class文件。

    1、構(gòu)造class文件。把要執(zhí)行的代碼放到類的static 塊中。

    2、寫到服務器。用file_write函數(shù)將惡意類寫入到服務器上。


    3、加載惡意類。利用link_schema函數(shù)加載上傳的惡意類。


    4、idea在調(diào)試的時候會修改classpath,所以在調(diào)試的時候可以在上傳惡意類之后將路徑添加到idea的classpath中,重啟調(diào)試環(huán)境之后再用link_schema函數(shù)加載即可,最后可以用file_read函數(shù)讀取執(zhí)行結(jié)果。

    參考網(wǎng)站

    暫無

    受影響實體

    SkyWalking是遵循Apache 2.0 License協(xié)議的分布式系統(tǒng)的應用程序性能監(jiān)視工具,可能受漏洞影響的資產(chǎn)分布于世界各地,全球大約有四千多臺服務器運行該服務,中國大陸省份中主要分布于廣東、浙江、北京等省市。


    目前受影響的Apache SkyWalking版本:

    Apache SkyWalking < v8.4.0

    補丁

    1、如何檢測組件系統(tǒng)版本

    方法一、如果下載源碼編譯的可以在項目根目錄下的pom.xml文件中可以查看版本號:


    方法二、如果是編譯好的文件在oap-libs目錄下查看以skywalking開頭的文件對應的版本:

    2、官方修復建議

    當前官方已發(fā)布最新版本,建議受影響的用戶及時更新升級到最新版本。鏈接如下:

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

    3、深信服解決方案

    深信服下一代防火墻】可輕松防御此漏洞, 建議部署深信服下一代防火墻的用戶更新至最新的安全防護規(guī)則,可輕松抵御此高危風險。

    深信服云盾】已第一時間從云端自動更新防護規(guī)則,云盾用戶無需操作,即可輕松、快速防御此高危風險。

    深信服安全感知平臺】可檢測利用該漏洞的攻擊,實時告警,并可聯(lián)動【深信服下一代防火墻等產(chǎn)品】實現(xiàn)對攻擊者ip的封堵。

    深信服安全運營服務】深信服云端安全專家提供7*24小時持續(xù)的安全運營服務。在漏洞爆發(fā)之初,云端安全專家即對客戶的網(wǎng)絡環(huán)境進行漏洞掃描,保障第一時間檢查客戶的主機是否存在此漏洞。對存在漏洞的用戶,檢查并更新了客戶防護設備的策略,確??蛻舴雷o設備可以防御此漏洞風險。

    深信服安全云眼】在漏洞爆發(fā)之初,已完成檢測更新,對所有用戶網(wǎng)站探測,保障用戶安全。不清楚自身業(yè)務是否存在漏洞的用戶,可注冊信服云眼賬號,獲取30天免費安全體驗。

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

    深信服云鏡】在漏洞爆發(fā)第一時間即完成檢測能力的發(fā)布,部署云端版云鏡的用戶只需選擇緊急漏洞檢測,即可輕松、快速檢測此高危風險。部署離線版云鏡的用戶需要下載離線更新包來獲取該漏洞的檢測能力。