<strike id="rrvnz"></strike>

    <noframes id="rrvnz">
    <noframes id="rrvnz"><span id="rrvnz"><pre id="rrvnz"></pre></span><address id="rrvnz"></address>
    <address id="rrvnz"><nobr id="rrvnz"></nobr></address><noframes id="rrvnz">
      <em id="rrvnz"></em>

        首 頁IT知識庫翔宇問吧收藏內容
        當前位置:翔宇亭IT樂園IT知識庫電腦基礎安全防護

        Apache SkyWalking SQL注入漏洞復現分析

        減小字體 增大字體 作者:本站  來源:本站整理  發布時間:2020-07-03 21:47:34

        本文轉自:百度安全>安全社區,原文鏈接地址:https://anquan.baidu.com/article/1097

        1、前言

        Apache SkyWalking 是一款開源的應用性能監控系統,包括指標監控,分布式追蹤,分布式系統性能診斷等。近日,百度云安全團隊監測到國內某廠商發布了Apache SkyWalking SQL注入漏洞的風險通告,漏洞編號為CVE-2020-9483。當SkyWalking使用H2、MySQL或者TiDB作為存儲方案時,攻擊者可通過默認未授權的GraphQL接口構造惡意請求,從而獲取敏感數據。本文主要由github上的漏洞補丁分析而來,若有不正確的地方還請及時指正。

        2、調試環境搭建

        漏洞影響6.0.0-6.6.0、7.0.0版本,根據github上項目文檔,直接利用IDEA調試需要先進行編譯。本文為了簡單使用遠程調試的方式,在官網下載編譯好的6.5.0版本

        編輯oapServ ice.sh加入如下調試命令并運行。

        1.png

        下載6.5.0源碼

        (https://www.apache.org/dyn/closer.cgi/skywalking/6.5.0/apache-skywalking -apm-6.5.0-src.tgz)

        導入IDEA,添加Remote Configuration,并設置module classpath為oap-server。至此,遠程調試環境搭建完成。

        2.png

        3、漏洞分析

        由于openwall上對該漏洞描述很簡單,我們還是到github上尋找最近的issue。

        經過尋找我們發現了下面的pull request

        (https://github.com/apache/skywalking/pull/4639/commits /2b6aae3b733f9dbeae1d6eff4f1975c723e1e7d1),

        作者為wu-sheng和openwall上漏洞作者相印證,基本確定該處文件修改為漏洞成因。

        修改涉及getLinearIntValues、getMultipleLinearIntValues、getThermodynamic等多個方法但修復手法類似,本文以getLinearIntValues為例進行分析。

        3.png

        可以看到ids參數由原先的直接拼接sql改為利用”?”進行占位預編譯,這是典型的SQL注入修復方法。我們向上搜索getLinearIntValues方法在哪里調用,

        找到了org/apache/skywalking/oap/server/core/query/MetricQueryService.java的getLinearIntValues方法。

        繼續向上追蹤getLinearIntValues,在org/apache/skywalking/oap/query/graphql/resolver /MetricQuery.java有了發現,并且MetricQuery類實現了GraphQLQueryResolver接口.

        5.png

        查詢文檔可知,支持GraphQL的查詢服務要實現GraphQLQueryResolver接口,該接口僅僅是一個聲明接口,沒有任何方法。同時,在schema配置文件metric.graphqls中,我們發現getLinearIntValues方法的查詢配置。

        6.png

        對GraphQL語法不熟悉的師傅可以通過如下例子進行熟悉:

        7.png

        HeroNameAndFriends是操作名稱,可用可不用,方便回溯查詢記錄。

        $episode聲明一個變量,它的類型是Episode,默認值為JEDI。$withFriends同理。變量在后面通過JSON傳遞值。

        firsthero是別名。為了避免沖突,可以取別名。

        hero后面的(episode: $episode)表示參數,可以限定查詢的條件,參數的值可以為常量。

        ...on Droid和...on Human在整個查詢中,我們查詢的主題是hero(主角),而根據Query定義,hero返回的值由getHero函數和傳入參數episode決定,該函數返回一個對象,對象的type可能是Human或者Droid。這部分語法就是根據查詢返回對象的不同類型而輸出不同的結果。

        通過上述知識我們可以構造如下請求,通過Union注入獲取當前用戶。

        8.png

        通過Debug發現ids參數引入惡意語句直接拼接到SQL語句中。同樣的,漏洞不僅僅只是存在getLinearIntValues方法,有多個方法可被利用,并且由于GraphQL接口默認是未授權的,漏洞危害較大建議用戶及時修復。

        9.png

        4、安全產品解決方案

        百度安全智能一體化產品已支持CVE-2020-9483檢測和攔截,有需要的用戶可以訪問anquan.baidu.com聯系我們。

        參考鏈接:

        https://github.com/apache/skywalking/commit/4ce2e9e87398efcee4b646af1143f4dc2ae10dc7

        https://www.openwall.com/lists/oss-security/2020/06/15/1

        知識評論評論內容只代表網友觀點,與本站立場無關!

           評論摘要(共 0 條,得分 0 分,平均 0 分) 查看完整評論
        愿您的精彩評論引起共鳴,帶來思考和價值。
        用戶名: 查看更多評論
        分 值:100分 90分 80分 70分 60分 40分 20分
        內 容:
        驗證碼:
        關于本站 | 網站幫助 | 廣告合作 | 網站聲明 | 友情連接 | 網站地圖
        本站部分內容來自互聯網,如有侵權,請來信告之,謝謝!
        Copyright © 2007-2020 biye5u.com. All Rights Reserved.
        特黄特色三级在线观看 - 视频 - 在线观看 - 影视资讯 -心晴网