CVE-2018-7600 Drupal核心遠程代碼執行漏洞分析

0x01 漏洞介紹

Drupal是一個開源內容管理系統(CMS),全球超過100萬個網站(包括政府,電子零售,企業組織,金融機構等)使用。兩週前,Drupal安全團隊披露了一個很是關鍵的漏洞,編號CVE-2018-7600 Drupal對錶單請求內容未作嚴格過濾,所以,這使得攻擊者可能將惡意注入表單內容,此漏洞容許未經身份驗證的攻擊者在默認或常見的Drupal安裝上執行遠程代碼執行。php

0x02 漏洞分析

Drupal渲染數組的狀況有頁面加載和Ajax表單發出的請求,在這裏Ajax API調用是攻擊者最佳的選擇。那麼做爲用戶註冊表單的一部分,圖片字段使用Ajax API將圖片上傳到服務器,而且生成縮略圖html

 

 

查閱了相關文檔資料如今,咱們所要作的就是注入一個惡意渲染數組,該數組使用Drupal的渲染回調方法在系統上執行代碼。有幾個屬性咱們能夠注入:git

 

#access_callback 標籤雖然callback回調函數可控,但須要回調處理的字符串不可控,致使沒法利用。如下場景以post_render和lazy_builder爲例github

2.一、漏洞場景1:引入#post_render

#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

2.二、漏洞場景2:引入#lazy_builder

#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等等。

0x04 緩解措施

官方在最新版本8.5.1中增長了下圖方法

對請求的GET、POST、COOKIE 進行過濾處理

但願廣大用戶儘快升級到最新版本Drupal 8.5.1 , 下載地址:https://www.drupal.org/project/drupal/releases/8.5.1

 

0x05 Reference

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

相關文章
相關標籤/搜索