高危 PHP 漏洞可繞過驗證加載惡意內(nèi)容
PHP的libxml流組件中發(fā)現(xiàn)一個高危漏洞,可能影響依賴DOM或SimpleXML擴展處理HTTP請求的Web應(yīng)用程序。該漏洞編號為CVE-2025-1219,源于處理重定向資源時對content-type標(biāo)頭的錯誤處理,可能導(dǎo)致文檔解析錯誤和驗證繞過等安全風(fēng)險。
受影響PHP版本包括:
- 8.1.32以下版本
- 8.2.28以下版本
- 8.3.18以下版本
- 8.4.5以下版本
漏洞技術(shù)細(xì)節(jié)
當(dāng)HTTP流包裝器跟隨重定向時,該漏洞會觸發(fā)。系統(tǒng)未在執(zhí)行后續(xù)請求前清除先前捕獲的標(biāo)頭,而是將多個請求的標(biāo)頭追加到同一數(shù)組中,導(dǎo)致最終數(shù)組包含所有請求的標(biāo)頭(最后請求的標(biāo)頭位于末尾)。
函數(shù)php_libxml_input_buffer_create_filename()或php_libxml_sniff_charset_from_stream()會掃描該數(shù)組尋找content-type標(biāo)頭以確定響應(yīng)字符集。但系統(tǒng)會從上至下順序處理標(biāo)頭,并在遇到首個content-type標(biāo)頭時停止。根據(jù)PHP報告,該標(biāo)頭可能不對應(yīng)最終包含待解析HTML正文的響應(yīng),從而導(dǎo)致文檔可能以錯誤字符集解析,引發(fā)安全隱患。
攻擊者可利用該漏洞通過操縱字符集檢測來改變文檔解析方式,具體表現(xiàn)為:
- 文檔可能被錯誤解讀,改變其原意
- 若文檔解析錯誤,驗證流程可能被繞過
- 使用->saveHtml()等方法導(dǎo)出文檔時,可能保留原始字符集導(dǎo)致意外輸出
- 使用PHP的DOM或SimpleXML擴展處理HTTP請求的應(yīng)用程序尤其易受攻擊。
漏洞驗證實例
概念驗證(PoC)展示了漏洞利用方式:
- 重定向腳本(redirect.php)發(fā)送指定字符集(utf-16)的content-type標(biāo)頭并重定向到其他資源
- 通過PHP的DOMDocument或SimpleXML擴展訪問時,系統(tǒng)錯誤地使用初始content-type標(biāo)頭而非最終響應(yīng)的標(biāo)頭進行解析
該行為可導(dǎo)致解析錯誤和驗證繞過,例如導(dǎo)出的HTML內(nèi)容在篡改后仍保留原始字符集。
PHP開發(fā)團隊已在以下版本修復(fù)該問題:
- PHP 8.1.32
- PHP 8.2.28
- PHP 8.3.19
- PHP 8.4.5
緩解措施
為防范CVE-2025-1219漏洞,強烈建議用戶將PHP升級至上述已修復(fù)版本:
- 使用php -v命令檢查當(dāng)前版本
- 通過包管理器更新系統(tǒng),或從php.net下載更新后的二進制文件
- 更新后重啟所有依賴PHP的服務(wù)
CVE-2025-1219暴露了PHP使用libxml流處理HTTP重定向時的關(guān)鍵缺陷,對通過HTTP請求解析文檔的應(yīng)用程序構(gòu)成風(fēng)險。該漏洞再次凸顯定期更新軟件以應(yīng)對新興安全威脅的重要性。