最近,360安全團隊發布了一篇關于PHP漏洞的報告。該漏洞位于PHP的FastCGI模式中,存在于PHP-FPM與Nginx的通信過程中。攻擊者可以通過該漏洞遠程執行惡意代碼。這個漏洞已經被編號為CVE-2019-11043。下面我們來詳細了解該漏洞的具體情況。
在PHP-FPM的FastCGI模式中,存在一種名為“php-fpm的pathinfo解析漏洞”。攻擊者可以通過篡改PHP-FPM Nginx所請求的URL,通過惡意構造的URL誘導服務器解析,從而執行遠程的惡意代碼。例如:
example.com/index.php/a.txt
攻擊者可以將請求修改為:
example.com/index.php/a.txt/.php
PHP-FPM會認為請求了一個.php文件,從而嘗試執行該文件。但是,由于無法讀取文件,所以它會嘗試解析請求的路徑以獲取數據。這里的問題在于,PHP-FPM是在不正確解析路徑信息時解析的。這個漏洞是發生在Pathinfo解析函數(php-fpm外殼和FastCGI傳輸過程中的CGI_SAPI類),而非在PHP腳本解析函數中。攻擊者可以通過創建惡意的pathinfo字符串以遠程執行任意PHP代碼。
攻擊者可以使用以下樣本來利用該漏洞:
curl -v "http://example.com/index.php?-d+allow_url_include%3dOn+-d+auto_prepend_file%3dphp://input"
這個樣本將從標準輸入(stdin)讀取PHP代碼。攻擊者可以隨意指定所需的PHP代碼。例如,使用以下樣本將計算機的主機名發送到遠程服務器:
curl -v -X POST -d " php @eval(system('hostname'));?>" "http://example.com/index.php/-"
此按鈕的訪問將顯示主機名。
解決方法:
這個漏洞已經修復了。如果您使用PHP7.0及以下版本,建議升級到PHP7.1.0或更高版本。如果您使用PHP7.1.0及以上版本,則應該更新到最新版本。如果您無法更新,請考慮禁用PathInfo。
總結:
該漏洞給互聯網安全帶來了巨大的風險,如果您使用PHP-FPM及Nginx作為WEB服務器,那么請在第一時間升級PHP版本,并檢查是否存在這個漏洞。請勿等待攻擊發生,才去發現問題。