CVE-2018-7600漏洞分析

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伺服器利用並指向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://groups.drupal.org/secur

Palo Alto Networks客戶可以通過以下產品和服務免受此漏洞的侵害:

  • 威脅防護簽名40627,用於識別包含漏洞利用代碼的HTTP請求
  • PAN-DB阻止攻擊者的C&C伺服器IP和域
  • WildFire和Antivirus標識並阻止開發負載

更多精彩

技術福利 | CVE-2018-1038漏洞利用?

mp.weixin.qq.com圖標警報!堤防攻擊者利用「iTunes Wi-Fi Sync」遠程劫持你的iPhone/iPad?

mp.weixin.qq.com圖標Joomla注入漏洞(CVE-2018-6605)復現分析?

mp.weixin.qq.com圖標7大黑客常用挖礦技能?

mp.weixin.qq.com圖標你家的Siri是智障嗎?光明正大泄露信息!?

mp.weixin.qq.com圖標

*IDEA值得分享 | 轉載註明出處

weixin.qq.com/r/00jcxCr (二維碼自動識別)


推薦閱讀:

為什麼越深入的學習法律,越覺得法律的漏洞越多?
如何看待陰陽師業火原bug事件?
不小心敲了 rm -rf / 後反應是怎樣的?
最難調試修復的 bug 是怎樣的?

TAG:科技 | 漏洞挖掘 | Bug |