PHP套件管理器Composer爆兩指令注入高風險漏洞,可遠端觸發任意指令執行

PHP生態系受廣泛使用的套件管理工具Composer,官方揭露兩個高嚴重性指令注入漏洞CVE-2026-40261CVE-2026-40176,均源自Perforce版本控制整合模組在建構Shell指令時未對外部輸入做適當跳脫處理。其中CVSS評分達8.8的CVE-2026-40261,可透過惡意Composer套件儲存庫遠端觸發,且不需要用戶端安裝Perforce即可執行任意指令,形成軟體供應鏈攻擊風險。官方已釋出Composer 2.2.27與2.9.6修補版本。

兩個漏洞的根本成因相似,都是Composer的Perforce驅動程式在組合系統指令時,直接將外部提供的參數嵌入指令字串,未經過濾或跳脫處理,導致攻擊者可藉由在參數中夾帶Shell特殊字元來注入任意指令。

CVE-2026-40261涉及Perforce::syncCodeBase()方法,該方法在同步程式碼時將來源參照直接附加到Shell指令中。由於來源參照屬於套件中繼資料的一部分,任何Composer套件儲存庫都能在提供套件資訊時宣告Perforce為來源類型,並夾帶惡意內容。因此只要開發者從遭入侵或蓄意架設的Composer儲存庫安裝套件,就可能在不知情的情況下觸發指令執行。該漏洞可在以原始碼方式安裝或更新相依套件時被利用,包括使用--prefer-source,或安裝dev前綴版本時的預設行為。

CVE-2026-40176則出現在Perforce::generateP4Command()方法,該方法在產生P4指令時,將使用者提供的Perforce連線參數包括Port、User與Client直接內嵌至指令字串。攻擊者可透過在composer.json中定義惡意的Perforce VCS儲存庫設定來觸發指令注入。不過該漏洞的攻擊面相對受限,因為VCS儲存庫定義僅從專案根目錄的composer.json或Composer全域設定目錄載入,無法透過已安裝的相依套件間接觸發。

兩個漏洞影響Composer 2.0至2.2.26的LTS分支,以及2.3至2.9.5的主線分支,官方已在2.2.27與2.9.6版完成修補。要是開發者暫時無法升級,針對CVE-2026-40261,開發者可改用下載封裝檔的方式安裝套件,避免以原始碼方式取得相依套件,至於CVE-2026-40176,則應避免在來源不明的專案目錄中執行Composer指令。