溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析

發(fā)布時(shí)間:2021-11-11 18:23:43 來(lái)源:億速云 閱讀:102 作者:柒染 欄目:安全技術(shù)

這篇文章給大家介紹Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

一、漏洞背景

2月20日Drupal官方披露了一個(gè)Drupal的遠(yuǎn)程命令執(zhí)行漏洞:

https://www.drupal.org/sa-core-2019-003

漏洞的觸發(fā)條件為開(kāi)啟了RESTful Web Services,且允許POST/PATCH請(qǐng)求。

根據(jù)Drupal的配置,此漏洞可能不需要任何權(quán)限即可觸發(fā),但普適性不高。一旦該漏洞被利用,攻擊者則可以直接在Web服務(wù)器上執(zhí)行任意PHP代碼,造成服務(wù)器被入侵、用戶信息泄露等后果。

騰訊云不受該漏洞影響,此漏洞爆發(fā)后,騰訊云安全團(tuán)隊(duì)第一時(shí)間進(jìn)行跟蹤分析,且對(duì)云上客戶進(jìn)行預(yù)警通知。

二、漏洞定位

漏洞通告指出了Drupal 8在開(kāi)啟了RESTful Web Services模塊,同時(shí)允許了PATCH/POST方法請(qǐng)求后,可以造成代碼執(zhí)行漏洞。

根據(jù)commit log( https://github.com/drupal/core/commit/24b3fae89eab2b3951f17f80a02e19d9a24750f5 )可以定位到漏洞的觸發(fā)原因在于反序列化的操作:

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析

可以推測(cè)應(yīng)該是在進(jìn)行REST API操作的過(guò)程中,options參數(shù)的內(nèi)容帶入到unserialize函數(shù)導(dǎo)致的。通過(guò)diff可以發(fā)現(xiàn)LinkItem.php和MapItem.php都受到影響,這里從LinkItem來(lái)向上挖掘漏洞點(diǎn)。

查看core\modules\link\src\Plugin\Field\FieldType\LinkItem.php  :

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析 梳理了其整個(gè)調(diào)用鏈,從REST請(qǐng)求開(kāi)始,先通過(guò)用戶傳入的JSON的_links.type獲取了其對(duì)應(yīng)的Entity,再獲取Entity內(nèi)的Fields列表,遍歷這個(gè)列表得到key,從用戶傳入的JSON內(nèi)取出key,拼接成為field_item:key的形式(過(guò)程略),最終在getDefinition內(nèi)查找了definitions數(shù)組內(nèi)的字段定義,得到一個(gè)對(duì)應(yīng)的Field的實(shí)例對(duì)象,過(guò)程大體如下:            
           

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析 接著FieldNormalizer的denormalize方法調(diào)用了Field的setValue方法。    
         

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析      

也就是說(shuō),我們?nèi)绻梢詫?field_item控制為L(zhǎng)inkItem或者M(jìn)apItem,即可觸發(fā)反序列化。

三、觸發(fā)點(diǎn)構(gòu)造

我們?cè)贒rupal后臺(tái)配置好RESTful Web Service插件,選擇一個(gè)可以進(jìn)行POST的操作。

為了盡可能模擬網(wǎng)站管理員的配置,我們這里允許對(duì)于/user/register的POST操作。

于情于理,用戶注冊(cè)處必然可以作為匿名用戶來(lái)進(jìn)行操作。開(kāi)啟/user/register:

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析 設(shè)置允許匿名用戶利用POST來(lái)訪問(wèn)/user/register:
       

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析 上文中提到,我們需要一個(gè)Entity內(nèi)存在LinkItem Field。通過(guò)對(duì)Entity的查找,定位到MenuLinkContent和Shortcut使用了LinkItem,利用Shortcut來(lái)進(jìn)行進(jìn)一步的測(cè)試。    
         

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析      

Shortcut的_links.type為:http://127.0.0.1/rest/type/shortcut/default。

向/user/register發(fā)送POST請(qǐng)求,同時(shí)在PHPStorm內(nèi)將斷點(diǎn)下在core\modules\hal\src\Normalizer\FieldItemNormalizer.php的denormalize函數(shù):

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析 可以發(fā)現(xiàn),在調(diào)用setValue方法的現(xiàn)場(chǎng),$field_item為L(zhǎng)inkItem。跟入setValue方法(圖 2),根據(jù)邏輯,如果$values為一個(gè)數(shù)組。且$values['options']存在,那么就執(zhí)行反序列化操作。我們修改payload為即可觸發(fā)反序列化。            
           

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析  

驗(yàn)證視頻:

攻擊者利用此反序列化可以在服務(wù)器上執(zhí)行任意代碼,利用此漏洞在服務(wù)器上彈出計(jì)算器的視頻如下:

Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析

四、安全建議

修復(fù)方案如下:

1.Drupal 8.6.x版本升級(jí)到8.6.10版本;

2.Drupal 8.5.x或更早期版本版本升級(jí)到8.5.11版本;

3.Drupal 7暫無(wú)更新。

緩解措施如下:

1.禁用RESTful Web Services模塊;

2.配置服務(wù)器不允許POST/PATCH請(qǐng)求。

關(guān)于Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI