當前位置:
首頁 > 新聞 > 新曝WordPress REST API內容注入漏洞詳解

新曝WordPress REST API內容注入漏洞詳解

近日,來自Sucuri的研究人員發現WordPress存在重大漏洞,漏洞在於WordpressREST API,成功利用該漏洞可刪除頁面或修改頁面內容。

官方很快發布了升級版Wordpress,但很多管理員沒有及時升級,以至於被篡改的網頁從最初的幾千一路飆升到了150萬,在此也提醒各位管理員儘快升級。


漏洞詳情


1. 漏洞信息:

WordPress是一個以PHP和MySQL為平台的自由開源的博客軟體和內容管理系統。在4.7.0版本後,REST API插件的功能被集成到WordPress中,由此也引發了一些安全性問題。

近日,一個由REST API引起的影響WorePress4.7.0和4.7.1版本的漏洞被披露,該漏洞可以導致WordPress所有文章內容可以未經驗證被查看,修改,刪除,甚至創建新的文章,危害巨大。


2. 漏洞影響版本:

WordPress4.7.0、WordPress 4.7.1

3. 復現環境:

Apache 2.4

PHP 7.0

WordPress4.7.1


4.復現過程:

(1) 安裝WordPress並配置REST API

① 配置Apache+PHP+Mysql的運行環境,下載含有漏洞版本的WordPress (https://wordpress.org/wordpress-4.7.1.tar.gz)並安裝。

② 載入Apache的rewrite模塊。

在Apache的配置文件中添加

LoadModule

rewrite_module/usr/lib/apache2/modules/mod_rewrite.so

並在主配置文件中設置對應的WEB目錄的AllowOverride為All

③設置WordPress站點為固定鏈接

在Settings->Permalinks中的Common Settings設置為非Plain模式。例如下圖,我們設置為Day and name。

(2) 漏洞復現

①根據REST API文檔,修改文章內容的數據包構造如下:

可以看到,不帶任何驗證信息會提示不允許編輯文章

②構造可利用的數據包:

當url為/wp-json/wp/v2/posts/1?id=1a時,可以看到,已經成功跳過驗證看到文章內容了。


漏洞發現之技術細節

Sucuri研究人員的漏洞發現過程始於./wp-includes/rest-api/endpoints/class-wp-rest-posts-controller.php

這裡有幾件事值得注意。註冊的路由用於用數字填充ID請求參數。比如,如果向

/wp-json/wp/v2/posts/1234

–發送請求,則

ID

參數被設置為

1234

這種行為本身不失為一種防止攻擊者編製惡意ID值的好方法,但是當查看REST API如何管理訪問時,研究人員很快發現其給予

$_GET

$_POST

值的優先順序高於路由的正則表達式生成的值。

這使攻擊者可以發送

/wp-json/wp/v2/posts/1234?id=12345helloworld

這樣的請求,這樣會將

12345helloworld

分配到

ID

參數,這樣包含的不僅僅是數字。

研究人員進一步查看了各種回調(上面截圖中),其中一個引起了研究人員的注意:

update_item

及其許可權檢查方法:

update_item_permissions_check。

簡言之,它將字母數字ID值直接傳遞給了

get_post()

函數。該函數通過檢查帖子

是否實際存在

以及用戶

是否有權編輯

此帖來驗證請求。研究人員認為這種審驗請求的方式較為奇特。

如果我們發送一個沒有相應帖子的

ID

,我們可以通過許可權檢查,並被允許繼續執行對

update_item

方法的請求。

出於對是什麼導致

get_post()

無法找到帖子(除ID不存在外)的好奇,研究人員意識到其使用

wp_posts

中的

get_instance()

靜態方法來抓取帖子。

從代碼中可以看出,對於不是由純數字字元組成的任何輸入,其基本上會失敗 – 因此

123ABC

會失敗。

對於攻擊者,這意味著WordPress(將其視作具有足夠許可權編輯此帖的用戶)會運行

update_item

方法。

我們認為有必要查看該方法的作用。

截圖中有一個微妙但非常重要的細節——WordPress在將ID參數傳遞給

get_post

前先將其轉換為一個整數。鑒於PHP進行類型比較和轉換的方式,這是一個問題。比如,你會發現以下代碼片段會

返回123

這導致了非常危險的情形,即攻擊者可以提交

/wp-json/wp/v2/posts/123?id=456ABC

這樣的請求來對

ID

為456

的帖子進行篡改

鑒於此類型欺騙問題,攻擊者便可篡改受害者網站上的

任何帖子或頁面的內容

。這樣他們便可以添加插件特定的短代碼來利用漏洞(原本僅限於貢獻者)、使用SEO垃圾郵件活動感染網站內容或注入廣告,等等。甚至可以很容易地執行PHP代碼——取決於網站上啟用的插件。


結語

這是一個可以以不同方式利用的嚴重漏洞,如果您的網站尚未啟用自動更新,請儘快更新。


參考來源:


https://blog.sucuri.net/2017/02/content-injection-vulnerability-wordpress-rest-api.html


https://www.bleepingcomputer.com/news/security/attacks-on-wordpress-sites-intensify-as-hackers-deface-over-1-5-million-pages/


https://www.seebug.org/vuldb/ssvid-92637


*本文作者

:華為未然實驗室,轉載請註明來自Freebuf.COM



您的贊是小編持續努力的最大動力,動動手指贊一下吧!


本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

統計顯示威脅情報並沒有想像中那麼好,原因在哪兒?
又一款奇特的勒索軟體:只要閱讀兩篇有關勒索軟體的文章,就可以解鎖!

TAG:FreeBuf |

您可能感興趣

HTTP/2 Server Push 詳解(上)
Spring詳解——AspectJ 實現AOP
Android ORM 框架:GreenDao 使用詳解
「iPhone 7s Plus」PCB主板各模塊布局詳解
Oracle CEO詳解雙層雲戰略 直指AWS定價
Android Binder機制詳解:手寫IPC通信
詳解SSL證書中的keystore
Xbox負責人詳解Direct Reality:與DirectX相似,支持跨平台VR內容研發
Model-View-View Modal詳解
Elasticsearch前沿:ES 5.x改進詳解與ES6展望
Apple 官方公布 iPhone X「Face ID」面部識別技術詳解
Docker Machine 詳解
Python Yield Generator 詳解
MVC 動態註冊HttpModule詳解
華欣開普敦尼哈拉酒店Cape nidhra HOtel HUA HIN詳解
為什麼 Kotlin 調用 java 時可以使用 Lambda?——Kotlin中SAM 轉換機制詳解
一文詳解 Word2vec之Skip-Gram 模型
Part06-詳解Veeam B&R per-VM backup files
Windows 10 S中的Device Guard詳解(上篇)