CVE-2018-7600漏洞分析
來自專欄 行長疊報
前言
3月底,Drupal核心安全團隊發布了安全諮詢SA-CORE-2018-002,該安全諮詢討論了一個非常嚴重的漏洞CVE-2018-7600,該漏洞存在於眾多Drupal版本中,本文將對該漏洞進行詳細分析。
這個漏洞影響著超過一百萬個Drupal用戶和網站,它可以啟用遠程代碼執行,並且可以在Drupal 7 Form API上進行不完整的輸入驗證。
攻擊者可以使用此漏洞強制運行Drupal的伺服器,並執行可能危害Drupal安裝的惡意代碼。根據具體配置的不同,這也很可能會危及到主機。
由於沒有任何措施可以緩解對該漏洞的訪問,所以這個漏洞顯得尤為嚴重,這代表著匿名用戶使用此漏洞遠程執行代碼而無需身份驗證。
脆弱性根源分析
「可渲染數組(Renderable Arrays)」是在Drupal 7中正式引入的。這些結構由關聯數組實現,並將鍵值對作為函數參數或表單數據傳遞,以便更好的呈現標記和UI元素。
標記元素屬性具有以「#」字元為前綴的鍵。以下是在普通PHP函數中使用的渲染數組的示例。
圖1.渲染數組鍵值對的Drupal核心示例
在對Drupal安全補丁的快速檢查中發現了一個名為RequestSanitizer的分類。值得注意的是stripDangerousValues方法,該方法在另一個稱為sanitize的方法中調用。
前面的函數從數組參數的索引零處去掉了一個控制字元「#」。以下是補丁函數的一個片段。
圖2. Drupal補丁從參數化輸入中剝離「#」
基於Drupal安全團隊的補丁內容以及Drupal Form API的分析,42位研究人員推斷某些Form API函數能夠執行任意代碼,並且需要對通過前導「#」字元傳遞參數的輸入進行清理,以嘗試和防止代碼執行攻擊。
為了利用此漏洞,攻擊代碼必須將惡意代碼傳遞給Form API可執行函數之一的頁面載入,或者傳遞給AJAX請求的呈現階段。
我們確定可以用於遠程代碼執行的四種可利用的Form API函數是:
- [#post_render]
- [#pre_render]
- [#access_callback]
- [#lazy_builder]
利用方法分析
Drupal專家與安全研究人員協作的報告指出,默認配置在新用戶註冊頁面中有一些欄位,在Drupal補丁之前未正確清理。/ user / register中的默認頁面可以被迫發送特定的AJAX請求,該請求可以針對各種表單欄位,包括受漏洞影響的表單欄位,從而執行攻擊者的代碼。
概念證明(POC)代碼在2018年4月12日發布。初始POC使用#post_render函數針對郵件數組執行PHP函數exec,後者執行底層操作系統函數Web伺服器用戶的上下文。
以下是在本地地址10.3.228.197處捕獲到易受攻擊的Drupal實例的流量。它使用的PHP命令是exec,有效載荷是一個簡單的wget命令,用於外部IP地址172.217.6.36。
圖3. Drupal伺服器利用並指向http://www.google.com
在POST內容類型:application / x-www-form-urlencoded和multipart / form-data傳遞時,可以利用已知的POC進行開發。
圖4. x-www-form-urlencoded表單數據有效載荷
研究人員發現的第二個POC以時區格式欄位為目標。伺服器響應一個HTTP 500服務不可用的響應。
圖5.利用時區和#lazy_builder函數進行利用
圖6.通過multipart / form-data的時區#lazy_builder
由於8.x和7.x版本上的/ user / register頁面的默認配置,第一個公開可用的POC出現在脆弱的Drupal 8.x實例上才有效。
其他默認配置URI包括/ user / password頁面,可以成功地利用7.x版本。這個特定的漏洞利用目標是_triggering_element_name表單,並要求發送兩個請求。
圖7.通過兩個HTTP請求開發Drupal 7.x
在進行這樣的分析時,攻擊者試圖對惡意有效載荷調用wget,curl和其他第二階段機制,以啟動對Drupal站點的收購。就像任何遠程代碼執行漏洞一樣,已經發現了包含反向shell,後門,殭屍網路,甚至加密礦工的武器化有效載荷。
潛在的威脅
幾乎所有公開可用的POC樣本都通過將[#post_render] []的渲染數組鍵與PHP函數exec的值一起傳遞給Drupal的易受攻擊實例,緊接著是第二個鍵值對[#markup],其值為操作系統函數由exec調用。
但是,其他成功的漏洞利用了上面列出的四個表單API函數([#post_render],[#pre_render],[#access_callback]和[#lazy_builder])。
我們在Palo Alto Networks覆蓋利用這些API函數的流量,以及可能被利用的其他「危險」PHP函數。應該篩選的PHP函數包括:
- Exec
- ` (backtick)
- $ (dollar)
- system
- popen
- pcntl_exec
- eval
- preg_replace
- create_function
- include
- require
- passthru
- shell_exec
- proc_open
- assert
- include_once
- require_once
- $_GET
- $_POST
- $_SERVER
- $_FILES
- $_REQUEST
- $_SESSION
- $_ENV
- $_COOKIE
除exec外,惡意軟體樣本還包括系統、passthru和eval。可以肯定的是,更多攻擊者將會製作利用這些功能的請求。
結論和緩解
CVE-2018-7600處於瘋狂傳播狀態,未來很可能會繼續被利用。具體措施請參照Drupal小組的說明:
https://http://groups.drupal.org/security/faq-2018-002
Palo Alto Networks客戶可以通過以下產品和服務免受此漏洞的侵害:
- 威脅防護簽名40627,用於識別包含漏洞利用代碼的HTTP請求
- PAN-DB阻止攻擊者的C&C伺服器IP和域
- WildFire和Antivirus標識並阻止開發負載
更多精彩
技術福利 | CVE-2018-1038漏洞利用警報!堤防攻擊者利用「iTunes Wi-Fi Sync」遠程劫持你的iPhone/iPadJoomla注入漏洞(CVE-2018-6605)復現分析7大黑客常用挖礦技能你家的Siri是智障嗎?光明正大泄露信息!*IDEA值得分享 | 轉載註明出處
http://weixin.qq.com/r/00jcxCrEInddrW6n9x3B (二維碼自動識別)
推薦閱讀:
※為什麼越深入的學習法律,越覺得法律的漏洞越多?
※如何看待陰陽師業火原bug事件?
※不小心敲了 rm -rf / 後反應是怎樣的?
※最難調試修復的 bug 是怎樣的?