來自Secarma的安全研究員Sam Thomas?發現了一種新的開發技術,可以使黑客更容易使用以前風險較低的函數觸發PHP編程語言中的關鍵反序列化漏洞。這項新技術使成千上萬的Web應用程序受到遠程代碼執行攻擊,包括由一些流行的內容管理系統(如WordPress和Typo3)提供支持的網站。
反序列化漏洞
序列化就是把對象轉換成字節流,便于保存在內存、文件、數據庫中;反序列化即逆過程,由字節流還原成對象。PHP反序列化或對象注入漏洞最初是在2009年記錄的,這可能允許攻擊者通過向unserialize()PHP函數提供惡意輸入來執行不同類型的攻擊。
研究人員發現攻擊者可以使用針對Phar檔案的低風險函數來觸發反序列化攻擊,而無需在各種場景中使用unserialize()函數。
Phar文件是PHP中的一種存檔格式,它以序列化格式存儲元數據,只要文件操作函數(fopen,file_exists,file_get_contents等)試圖訪問存檔文件,它就會被反序列化。
“對于直接文件操作(例如”file_exists“)和間接操作(例如在XML中的外部實體處理期間發生的那些操作(即,正在利用XXE漏洞時))都是如此,”
利用針對WordPress站點的PHP反序列化攻擊
托馬斯演示了如何使用作者帳戶對Wordpress站點執行此攻擊,以完全控制Web服務器。為了成功利用該漏洞,攻擊者需要做的就是將包含惡意有效負載對象的有效Phar存檔上傳到目標的本地文件系統,并使文件操作功能使用“phar://”流包裝器訪問它。
托馬斯還透露,攻擊者甚至可以使用JPEG圖像利用此漏洞,最初是通過修改前100個字節將Phar存檔轉換為有效的JPEG。
“應用程序[WordPress]中某些縮略圖功能的工作方式使得具有上傳和修改媒體項目權限的攻擊者能夠充分控制”file_exists“調用中使用的參數,從而導致反序列化發生,”
一旦精心設計的縮略圖上傳到目標WordPress服務器上,攻擊者就可以使用另一個函數使用“phar://”流包裝器調用與Phar存檔相同的圖像文件,最終在程序反序列化元數據時執行任意代碼。
“該漏洞存在是由于作為圖像文件傳遞的數據不安全反序列化,然后通過’/wpincludes/post.php’腳本中’wp_get_attachment_thumb_file’函數中的’phar://’流包裝器執行,具有創建/編輯帖子能力的遠程認證攻擊者可以上傳惡意圖像并在易受攻擊的系統上執行任意PHP代碼。”
托馬斯去年早些時候向WordPress安全團隊報告了此漏洞,該公司承認了這一問題。但是,該公司發布的補丁并未完全解決問題。
Thomas還報告了2018年6月9日Typo3的漏洞,該供應商在版本7.6.30,8.7.17和9.3中解決了這個問題。