新曝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

※統計顯示威脅情報並沒有想像中那麼好,原因在哪兒?
※又一款奇特的勒索軟體:只要閱讀兩篇有關勒索軟體的文章,就可以解鎖!
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詳解(上篇)