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 |
| 阿里云云安全中心 | 應急漏洞模塊已支持對該漏洞一鍵檢測 |
| 阿里云云防火墻 | 已可以防御此攻擊 |
原創:阿里云先知
原創鏈接:https://mp.weixin.qq.com/s/hB-r523_4cM0jZM...