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