作者:Rico @騰訊安全云鼎實驗室
公眾號:https://mp.weixin.qq.com/s/EQD4-K6HgBY9wdzeXeyzkg

0. 漏洞背景

2 月 20 日 Drupal 官方披露了一個 Drupal 的遠程命令執行漏洞:

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

漏洞的觸發條件為開啟了 RESTful Web Services,且允許 POST / PATCH 請求。

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

騰訊云不受該漏洞影響,此漏洞爆發后,騰訊云安全團隊第一時間進行跟蹤分析,且對云上客戶進行預警通知。

1. 漏洞定位

漏洞通告指出了 Drupal 8 在開啟了 RESTful Web Services 模塊,同時允許了 PATCH / POST 方法請求后,可以造成代碼執行漏洞。

根據 commit log [注1] 可以定位到漏洞的觸發原因在于反序列化的操作:

img

可以推測應該是在進行 REST API 操作的過程中,options 參數的內容帶入到 unserialize 函數導致的。通過 diff 可以發現 LinkItem.php 和 MapItem.php 都受到影響,這里從 LinkItem 來向上挖掘漏洞點。

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

img

梳理了其整個調用鏈,從 REST 請求開始,先通過用戶傳入的 JSON 的 _links.type 獲取了其對應的 Entity,再獲取 Entity 內的 Fields 列表,遍歷這個列表得到 key,從用戶傳入的 JSON 內取出 key,拼接成為 field_item:key 的形式(過程略),最終在 getDefinition 內查找了 definitions 數組內的字段定義,得到一個對應的 Field 的實例對象,過程大體如下:

img

接著 FieldNormalizer 的 denormalize 方法調用了 Field 的 setValue 方法。

img

也就是說,我們如果可以將 $field_item 控制為 LinkItem 或者 MapItem,即可觸發反序列化。

2. 觸發點構造

我們在 Drupal 后臺配置好 RESTful Web Service 插件,選擇一個可以進行 POST 的操作。

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

于情于理,用戶注冊處必然可以作為匿名用戶來進行操作。開啟 /user/register :

img

設置允許匿名用戶利用 POST 來訪問 /user/register 。

img

上文中提到,我們需要一個 Entity 內存在 LinkItem Field。通過對 Entity 的查找,定位到 MenuLinkContent 和 Shortcut 使用了 LinkItem,利用 Shortcut 來進行進一步的測試。

img

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

向 /user/register 發送 POST 請求,同時在 PHPStorm 內將斷點下在

core\modules\hal\src\Normalizer\FieldItemNormalizer.php 的 denormalize 函數:

img

可以發現,在調用 setValue 方法的現場,values 為一個數組。且 $values['options'] 存在,那么就執行反序列化操作。我們修改 payload 為即可觸發反序列化。

img

驗證視頻:

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

3. 安全建議

修復方案如下:

  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 請求

注1:

https://github.com/drupal/core/commit/24b3fae89eab2b3951f17f80a02e19d9a24750f5

騰訊安全云鼎實驗室
關注云主機與云內流量的安全研究和安全運營。利用機器學習與大數據技術實時監控并分析各類風險信息,幫助客戶抵御高級可持續攻擊;聯合騰訊所有安全實驗室進行安全漏洞的研究,確保云計算平臺整體的安全性。相關能力通過騰訊云開放出來,為用戶提供黑客入侵檢測和漏洞風險預警等服務,幫助企業解決服務器安全問題。


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/821/