Drupal是一個開源內容管理系統(CMS),全球超過100萬個網站(包括政府,電子零售,企業組織,金融機構等)使用。兩週前,Drupal安全團隊披露了一個很是關鍵的漏洞,編號CVE-2018-7600 Drupal對錶單請求內容未作嚴格過濾,所以,這使得攻擊者可能將惡意注入表單內容,此漏洞容許未經身份驗證的攻擊者在默認或常見的Drupal安裝上執行遠程代碼執行。php
Drupal渲染數組的狀況有頁面加載和Ajax表單發出的請求,在這裏Ajax API調用是攻擊者最佳的選擇。那麼做爲用戶註冊表單的一部分,圖片字段使用Ajax API將圖片上傳到服務器,而且生成縮略圖html
查閱了相關文檔資料如今,咱們所要作的就是注入一個惡意渲染數組,該數組使用Drupal的渲染回調方法在系統上執行代碼。有幾個屬性咱們能夠注入:git
#access_callback 標籤雖然callback回調函數可控,但須要回調處理的字符串不可控,致使沒法利用。如下場景以post_render和lazy_builder爲例github
#post_render數組
這個API標籤能夠被全部的元素和表單使用,它是在drupal_render()方法中調用,能夠渲染當前元素和子元素,也可對內容進行修改。安全
例子中$ element經過調用admin_form_html_cleanup函數處理返回處理後的結果。再來看能夠觸發攻擊載荷的代碼,在渲染的過程當中調用了call_user_func進行回調處理,但$callable 回調函數經過表單僞造,$elements的子元素一樣也是經過表單可控服務器
攻擊者利用攻擊載荷 mail[#post_render][]=passthru&mail[#type]=markup&mail[#markup]=whoami ,這裏的#markup是當前元素#type的子元素,經過數組的方式傳入值,執行過程如圖app
魔術方法__toString獲得$this->string 等於whoami ,帶入到call_user_func中交給passthru函數執行,致使漏洞觸發函數
PHP內置函數pasthru執行後會回顯結果post
#lazy_builder 可選,數組值,必須有且只有兩個元素,一個是回調函數名,一個回調的參數,參數只能是NULL或者標量類型
$callable變量取#lazy_builder元素標籤數組下標0的值做爲回調函數名,取數組下標1的值當回調方法的參數, 下面攻擊載荷調用PowerShell 遠程下載文件到本地保存爲php網頁後門,代碼以下圖
咱們傳入的lazy_builder[0]和lazy_builder[1]的值在渲染的時候用call_user_func_array完成整個攻擊過程
整個漏洞的產生過程都是由於call_user_func或者call_user_func_array等回調函數致使的任意代碼執行,API元素標籤中可能還會觸發漏洞的標籤有#theme 、#create_placeholder、#theme_wrappers等等。
官方在最新版本8.5.1中增長了下圖方法
對請求的GET、POST、COOKIE 進行過濾處理
但願廣大用戶儘快升級到最新版本Drupal 8.5.1 , 下載地址:https://www.drupal.org/project/drupal/releases/8.5.1
https://research.checkpoint.com/uncovering-drupalgeddon-2/
https://github.com/g0rx/CVE-2018-7600-Drupal-RCE/blob/master/exploit.py
轉載自:https://www.cnblogs.com/Ivan1ee/p/10187131.html