您好,登錄后才能下訂單哦!
這篇文章給大家介紹Drupal SA-CORE遠程命令的執行分析,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
2月20日Drupal官方披露了一個Drupal的遠程命令執行漏洞:
https://www.drupal.org/sa-core-2019-003
漏洞的觸發條件為開啟了RESTful Web Services,且允許POST/PATCH請求。
根據Drupal的配置,此漏洞可能不需要任何權限即可觸發,但普適性不高。一旦該漏洞被利用,攻擊者則可以直接在Web服務器上執行任意PHP代碼,造成服務器被入侵、用戶信息泄露等后果。
騰訊云不受該漏洞影響,此漏洞爆發后,騰訊云安全團隊第一時間進行跟蹤分析,且對云上客戶進行預警通知。
漏洞通告指出了Drupal 8在開啟了RESTful Web Services模塊,同時允許了PATCH/POST方法請求后,可以造成代碼執行漏洞。
根據commit log( https://github.com/drupal/core/commit/24b3fae89eab2b3951f17f80a02e19d9a24750f5 )可以定位到漏洞的觸發原因在于反序列化的操作:
可以推測應該是在進行REST API操作的過程中,options參數的內容帶入到unserialize函數導致的。通過diff可以發現LinkItem.php和MapItem.php都受到影響,這里從LinkItem來向上挖掘漏洞點。
查看core\modules\link\src\Plugin\Field\FieldType\LinkItem.php :
梳理了其整個調用鏈,從REST請求開始,先通過用戶傳入的JSON的_links.type獲取了其對應的Entity,再獲取Entity內的Fields列表,遍歷這個列表得到key,從用戶傳入的JSON內取出key,拼接成為field_item:key的形式(過程略),最終在getDefinition內查找了definitions數組內的字段定義,得到一個對應的Field的實例對象,過程大體如下:
接著FieldNormalizer的denormalize方法調用了Field的setValue方法。
也就是說,我們如果可以將$field_item控制為LinkItem或者MapItem,即可觸發反序列化。
我們在Drupal后臺配置好RESTful Web Service插件,選擇一個可以進行POST的操作。
為了盡可能模擬網站管理員的配置,我們這里允許對于/user/register的POST操作。
于情于理,用戶注冊處必然可以作為匿名用戶來進行操作。開啟/user/register:
設置允許匿名用戶利用POST來訪問/user/register:
上文中提到,我們需要一個Entity內存在LinkItem Field。通過對Entity的查找,定位到MenuLinkContent和Shortcut使用了LinkItem,利用Shortcut來進行進一步的測試。
Shortcut的_links.type為:http://127.0.0.1/rest/type/shortcut/default。
向/user/register發送POST請求,同時在PHPStorm內將斷點下在core\modules\hal\src\Normalizer\FieldItemNormalizer.php的denormalize函數:
可以發現,在調用setValue方法的現場,$field_item為LinkItem。跟入setValue方法(圖 2),根據邏輯,如果$values為一個數組。且$values['options']存在,那么就執行反序列化操作。我們修改payload為即可觸發反序列化。
攻擊者利用此反序列化可以在服務器上執行任意代碼,利用此漏洞在服務器上彈出計算器的視頻如下:
1.Drupal 8.6.x版本升級到8.6.10版本;
2.Drupal 8.5.x或更早期版本版本升級到8.5.11版本;
3.Drupal 7暫無更新。
1.禁用RESTful Web Services模塊;
2.配置服務器不允許POST/PATCH請求。
關于Drupal SA-CORE遠程命令的執行分析就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。