新聞

漏洞情資業者VulnCheck於5月19日發布分析指出,PHP單元測試框架PHPUnit在2017年揭露的遠端程式碼執行漏洞CVE-2017-9841,至今仍是攻擊者經常鎖定的目標之一。根據VulnCheck部署在全球的Canary誘捕節點網路資料,截至5月11日的前30天,該公司共偵測到80,119次相關攻擊嘗試,其中最近10天就有36,543次,顯示這類活動並非零星掃描,而是持續針對外部可存取的PHP應用程式進行探測與攻擊。

CVE-2017-9841的CVSS風險分數為9.8,屬於Critical(重大)風險,影響PHPUnit早於4.8.28版與早於5.6.3版的版本。漏洞位於PHPUnit舊版測試工具中的eval-stdin.php,該檔案原本供測試使用,內含可讀取HTTP POST請求內容,並交由PHP函式eval()執行的程式碼。一旦eval-stdin.php檔案被部署到正式環境,且能由網際網路直接存取,攻擊者不需通過身分驗證,就能在伺服器端執行任意PHP程式碼。

VulnCheck指出,CVE-2017-9841早在2017年即已修補,CISA也已在2022年將其納入已知遭利用漏洞(KEV)目錄,但這項漏洞至今仍持續遭濫用。問題並非漏洞本身出現新變化,而是受影響的PHPUnit檔案仍常被部署到正式環境,並暴露於公開網際網路。

VulnCheck分析,PHPUnit通常是PHP專案在開發與測試階段透過Composer安裝的相依套件,原本應列在require-dev,並在正式環境部署時透過composer install --no-dev排除。然而,部分CI/CD流程或除錯環境仍會安裝開發用相依套件,使vendor/目錄與eval-stdin.php檔案一併進入正式環境。若Apache或Nginx等網頁伺服器未封鎖外部存取vendor/phpunit/路徑,攻擊者就能透過可預測的URL探測該檔案。

此外,部分舊有PHP專案長期未更新相依套件,只要應用程式仍能正常運作,維護者就可能沒有升級PHPUnit版本。再加上CVE-2017-9841已有多個公開利用工具,攻擊門檻低,也讓這項舊漏洞持續成為攻擊者鎖定的目標。

研究人員建議,使用PHP應用程式的組織應先盤點對外伺服器,確認是否仍存在eval-stdin.php檔案;若發現該檔案出現在可公開存取的正式環境,應立即移除或阻擋外部存取。企業也應確認正式環境部署流程已排除開發用相依套件,並避免讓vendor/目錄可由外部直接存取。