當前位置:
首頁 > 最新 > Drupal CVE-2018-7600 分析及 PoC 構造

Drupal CVE-2018-7600 分析及 PoC 構造

漏洞分析

Drupal 在 3 月 28 日爆出一個遠程代碼執行漏洞,CVE 編號 CVE-2018-7600,通過對比官方的補丁,可以得知是請求中存在 # 開頭的參數。Drupal Render API 對於 # 有特殊處理,比如如下的數組:比如 代表了在 Render 時元素的前綴, 代表了後綴。

通過查閱 Drupal 的代碼和文檔,可以知道,對於 ,、、 等變數,Drupal 通過 的方式進行調用。

在 Drupal 中,對於 的處理如下:

所以如果我們能將這些變數注入到 數組中,即可造成代碼執行的問題。

但是由於 Drupal 代碼複雜,調用鏈很長,所以導致了所謂「開局一個 #,剩下全靠猜」的尷尬局面,即使知道了漏洞觸發點,但是找不到入口點一樣尷尬。直到昨日,CheckPoint 發布了一篇分析博客,我才注意到原來 Drupal 8.5 提供了 Ajax 上傳頭像的點,並且明顯存在一個 數組的操縱。在已經知道觸發點的情況下,構造剩下的 PoC 就非常容易了。


CheckPoint 提供的截圖顯示,是在 Drupal 8.5.0 註冊處,漏洞文件為:,代碼如下:

代碼第五行,取出 賦值給 ,然後進入 進行處理:

函數的主要功能就是將 作為 key path,然後逐層取出後返回。舉個例子,對於數組:及 :,最後得到的結果為 。

查看一下在正常上傳中,傳入的 :

似乎 是我們傳入的變數,嘗試注入數組:

發現成功注入:那麼通過 函數,可以傳入 為 ,最後可以令 為我們注入的數組:在 Render API 處理 時候造成代碼執行:

雖然實現了代碼執行,但是 調用的參數是一個數組,所以導致我們不能任意的執行代碼。不過 Render API 存在很多可以查看的地方,通過翻閱 函數,注意到 :

是一個 array,其中元素 0 為函數名,元素 1 是一個數組,是參數列表。接著利用 進行調用。不過注意到上方這段代碼:意思為傳入的 數組中不能存在除了 之外的 key,常規傳入的數組為:

比要求的數組多了 和 。不過 Render API 有 children element 的說法:

當數組中的參數不以 # 開頭時,會當作 children element 進行子渲染,所以我們傳入 ,在進行子渲染的過程中,就會得到一個乾淨的數組,最終導致命令執行。


本文分析的是 Drupal 8.5.0,對於 8.4.x,在註冊時默認沒有上傳頭像處,但是也可以直接進行攻擊,對於 Drupal 7,暫時未找到可控點。


https://research.checkpoint.com/uncovering-drupalgeddon-2/


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 雲鼎實驗室 的精彩文章:

TAG:雲鼎實驗室 |