導(dǎo)語:WordPress是網(wǎng)絡(luò)上最受歡迎的CMS。在這篇文章中,我們將講述在WordPress內(nèi)核中引入一個(gè)經(jīng)認(rèn)證的任意文件刪除漏洞,這個(gè)漏洞可能會(huì)導(dǎo)致攻擊者執(zhí)行任意代碼。
簡(jiǎn)介
WordPress是目前網(wǎng)絡(luò)上最受歡迎的CMS。根據(jù)w3tech的資料顯示,約有30%的網(wǎng)站都在使用它1。這種廣泛的采用,也使其成為了網(wǎng)絡(luò)犯罪分子非常感興趣的一個(gè)目標(biāo)。在這篇文章中,我們將講述在WordPress內(nèi)核中引入一個(gè)經(jīng)認(rèn)證的任意文件刪除漏洞,這個(gè)漏洞可能會(huì)導(dǎo)致攻擊者執(zhí)行任意代碼。在7個(gè)月前,我們向WordPress安全團(tuán)隊(duì)報(bào)告了這個(gè)漏洞,但至今依然沒有得到修復(fù)。由于經(jīng)過了這么長(zhǎng)時(shí)間,WordPress官方都沒有發(fā)布任何補(bǔ)丁或具體修復(fù)計(jì)劃,所以我們決定公開這個(gè)事件。
受影響的版本
截止到本篇文章發(fā)送時(shí),還沒有補(bǔ)丁可防止此漏洞的使用。任何WordPress版本(包括當(dāng)前的4.9.6版本),都容易受到該漏洞的影響。
如果要利用該漏洞,攻擊者需要事先獲得編輯和刪除媒體文件的權(quán)限。因此,該漏洞可以通過對(duì)與作者權(quán)限相同的用戶來提升權(quán)限,或者通過其他漏洞的錯(cuò)誤配置來利用。
攻擊帶來的影響
利用此漏洞,使攻擊者能夠刪除WordPress安裝的任何文件(+ PHP服務(wù)器上的任何其他文件,PHP進(jìn)程用戶具有適當(dāng)?shù)膭h除權(quán)限)。除了刪除整個(gè)WordPress安裝文件對(duì)系統(tǒng)的影響(如果沒有當(dāng)前備份可用,會(huì)導(dǎo)致災(zāi)難性后果),攻擊者可以利用任意文件刪除功能繞過一些安全措施,并在Web服務(wù)器上執(zhí)行任意代碼。更確切地說,可以刪除以下文件:
· .htaccess:一般來說,刪除此文件不會(huì)有不安全的影響。但是,在某些情況下,.htaccess文件包含與安全相關(guān)的約束(例如,對(duì)某些文件夾的訪問限制)。因此,刪除此文件將會(huì)禁用這些安全限制。
· index.php文件:通常情況下,將空的index.php文件放置到目錄中,以防止Web服務(wù)器無法執(zhí)行的情況下的目錄列表。如果刪除這些文件則將為攻擊者提供一份列表,列出受此措施保護(hù)的目錄中的所有文件。
· wp-config.php:刪除這個(gè)WordPress安裝文件,會(huì)在下次訪問該網(wǎng)站時(shí)觸發(fā)WordPress安裝過程。這是因?yàn)閣p-config.php包含數(shù)據(jù)庫憑證,如果沒有它,WordPress的將認(rèn)為它尚未安裝。攻擊者可以刪除該文件,使用管理員帳戶選擇的憑據(jù)進(jìn)行安裝過程,最后在服務(wù)器上執(zhí)行任意代碼。
如需觀看視頻,請(qǐng)點(diǎn)擊此處查看原文。
技術(shù)細(xì)節(jié)
當(dāng)用戶輸入傳遞文件刪除功能時(shí),會(huì)發(fā)生任意文件刪除漏洞。在PHP中,當(dāng)unlink()調(diào)用該函數(shù),并且用戶輸入可能會(huì)影響部分或整個(gè)參數(shù)$filename(表示要?jiǎng)h除的文件的路徑)時(shí),會(huì)發(fā)生這種情況,而WordPress不會(huì)進(jìn)行適當(dāng)?shù)奶幚怼?
在該wp-includes/post.php文件中找到了在WordPress Core中使這個(gè)漏洞成為可能的代碼部分:
在wp_delete_attachement()上面顯示的功能中,$meta[‘thumb’]呼叫中使用的內(nèi)容unlink()未經(jīng)過任何處理。這段代碼的目的是在刪除圖像的同時(shí)刪除圖像的縮略圖。在WordPress中通過媒體管理器上傳的圖像被表示為附屬類型的帖子。該值$meta[‘thumb’]從數(shù)據(jù)庫中檢索,并保存為表示圖像的文章的自定義字段2。因此,在數(shù)據(jù)庫檢索和關(guān)鍵函數(shù)調(diào)用之間使用unlink(),表示縮略圖文件名的值不經(jīng)過任何清理或檢查。如果該值在保存到數(shù)據(jù)庫之前也沒有經(jīng)過任何安全措施,我們將在下一個(gè)代碼列表中看到情況,我們有一個(gè)二階任意文件刪除漏洞。
此代碼片段/wp-admin/post.php代表了附件中屬于附件的縮略圖的文件名如何保存到數(shù)據(jù)庫中。在從保存在$_POST[‘thumb’]數(shù)據(jù)庫中的用戶輸入中檢索和保存到數(shù)據(jù)庫wp_update_attachment_metadata()之間沒有任何安全措施,以確保該值代表正在編輯的附件的縮略圖。$_POST[‘thumb’]對(duì)于任何文件的路徑,這個(gè)值可以保存到WordPress上傳目錄的相對(duì)路徑中,當(dāng)附件被刪除時(shí),該文件將被刪除,如第一列表中所示。
臨時(shí)修復(fù)程序
在編寫此篇文章時(shí),此漏洞在WordPress內(nèi)核中仍未被修復(fù)。正因?yàn)檫@樣,我們開發(fā)了一個(gè)臨時(shí)修復(fù)程序。通過將修復(fù)程序添加到functions.php當(dāng)前活動(dòng)的主題/子主題文件中,可以將修復(fù)程序集成到現(xiàn)有的WordPress安裝中。
所有提供的修復(fù)程序都會(huì)掛接到wp_update_attachement_metadata()調(diào)用中,并確保為元值提供的數(shù)據(jù)thumb不包含任何使路徑成為可能的部分。因此,不能刪除與安全相關(guān)的任何文件。
我們所提供的修復(fù)方案屬于臨時(shí)修復(fù),以防止攻擊。我們無法監(jiān)督WordPress插件的所有可能的向后兼容性問題,因此建議您謹(jǐn)慎的對(duì)WordPress文件進(jìn)行任何修改。
時(shí)間線
總結(jié)
在這文章中,我們介紹了WordPress內(nèi)核中引入了一個(gè)任意文件刪除漏洞,它允許任何具有作者權(quán)限的用戶完全接管WordPress網(wǎng)站,并在服務(wù)器上執(zhí)行任意代碼。該漏洞去年已報(bào)告給WordPress安全團(tuán)隊(duì),但在編寫本文時(shí)仍然沒有作任何修復(fù)。
為了提高對(duì)此漏洞的認(rèn)識(shí),我們決定發(fā)布一些細(xì)節(jié)和修復(fù)程序。使用我們的安全分析解決方案可以輕松發(fā)現(xiàn)漏洞,我們確信這個(gè)問題已經(jīng)被許多研究人員所了解。盡管用戶帳戶的需求阻止了任意WordPress站點(diǎn)的大規(guī)模開發(fā),但共享多個(gè)用戶帳戶的WordPress站點(diǎn)應(yīng)該應(yīng)用此修復(fù)程序。