這篇文章給大家介紹Drupal SA-CORE遠(yuǎn)程命令的執(zhí)行分析,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
網(wǎng)站的建設(shè)成都創(chuàng)新互聯(lián)專(zhuān)注網(wǎng)站定制,經(jīng)驗(yàn)豐富,不做模板,主營(yíng)網(wǎng)站定制開(kāi)發(fā).小程序定制開(kāi)發(fā),H5頁(yè)面制作!給你煥然一新的設(shè)計(jì)體驗(yàn)!已為陽(yáng)光房等企業(yè)提供專(zhuān)業(yè)服務(wù)。
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ù)器被入侵、用戶(hù)信息泄露等后果。
騰訊云不受該漏洞影響,此漏洞爆發(fā)后,騰訊云安全團(tuán)隊(duì)第一時(shí)間進(jìn)行跟蹤分析,且對(duì)云上客戶(hù)進(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ā)原因在于反序列化的操作:
可以推測(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 :
梳理了其整個(gè)調(diào)用鏈,從REST請(qǐng)求開(kāi)始,先通過(guò)用戶(hù)傳入的JSON的_links.type獲取了其對(duì)應(yīng)的Entity,再獲取Entity內(nèi)的Fields列表,遍歷這個(gè)列表得到key,從用戶(hù)傳入的JSON內(nèi)取出key,拼接成為field_item:key的形式(過(guò)程略),最終在getDefinition內(nèi)查找了definitions數(shù)組內(nèi)的字段定義,得到一個(gè)對(duì)應(yīng)的Field的實(shí)例對(duì)象,過(guò)程大體如下:
接著FieldNormalizer的denormalize方法調(diào)用了Field的setValue方法。
也就是說(shuō),我們?nèi)绻梢詫?field_item控制為L(zhǎng)inkItem或者M(jìn)apItem,即可觸發(fā)反序列化。
我們?cè)贒rupal后臺(tái)配置好RESTful Web Service插件,選擇一個(gè)可以進(jìn)行POST的操作。
為了盡可能模擬網(wǎng)站管理員的配置,我們這里允許對(duì)于/user/register的POST操作。
于情于理,用戶(hù)注冊(cè)處必然可以作為匿名用戶(hù)來(lái)進(jìn)行操作。開(kāi)啟/user/register:
設(shè)置允許匿名用戶(hù)利用POST來(lái)訪問(wèn)/user/register:
上文中提到,我們需要一個(gè)Entity內(nèi)存在LinkItem Field。通過(guò)對(duì)Entity的查找,定位到MenuLinkContent和Shortcut使用了LinkItem,利用Shortcut來(lái)進(jìn)行進(jìn)一步的測(cè)試。
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ù):
可以發(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ā)反序列化。
攻擊者利用此反序列化可以在服務(wù)器上執(zhí)行任意代碼,利用此漏洞在服務(wù)器上彈出計(jì)算器的視頻如下:
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ò),可以把它分享出去讓更多的人看到。