【PHP】10/21 重大資安漏洞:PHP2Shell

【PHP】10/21 重大資安漏洞:PHP2Shell

本篇重點

  • PHP2Shell 包含 CVE-2026-109618 與 CVE-2026-109619 兩項高危險性核心漏洞,CVSS 評分達到 9.2 分
  • 漏洞影響所有常見的 PHP 運行模式(如 PHP-FPM 與 Apache mod_php),攻擊者可無須驗證發動遠端程式碼執行(RCE)
  • 官方修補版本為 PHP 8.5.12、8.4.27、8.3.36 及 8.2.35;EOL 版本需透過社群 Backport 補丁或編譯處理

事件摘要

2026 年 10 月 21 日,PHP 官方緊急發佈了針對兩項核心漏洞的修補更新,這兩項漏洞被合稱為 PHP2Shell,分別追蹤為 CVE-2026-109618 與 CVE-2026-109619 。

這組漏洞被列為近年最嚴重的 PHP 核心安全危機之一,CVSS 風險評分為 9.2(Critical)。其嚴重性在於攻擊者可以在未經身份驗證(Unauthenticated)的情況下,透過特製的 HTTP 請求觸發 PHP 引擎內部的記憶體管理錯誤,進而達到遠端程式碼執行(Remote Code Execution, RCE)。

  • W3Techs 截至 2026 年 10 月的數據,PHP 支援了全球約七成使用伺服器端程式語言的網站。
  • 資安機構 checkpoint 研究顯示,全球約有十分之一的組織受此漏洞影響或波及,其中歐洲區域的受害主機比例最高。

事件影響範圍

PHP2Shell 發生在 PHP 核心執行環境,而非特定網站框架或應用程式的商業邏輯。因此,即使 Laravel、WordPress 或應用程式本身沒有相關程式碼缺陷,底層 PHP 執行環境仍可能需要修補。

官方認為所有處理 Web 請求的 PHP 安裝都應納入評估,包括 PHP-FPM、Apache mod_php、php-cgi、FrankenPHP 與 LiteSpeed,而 mod_php 的風險尤其值得注意。

漏洞技術摘要

PHP2Shell 和 PHP 核心的記憶體管理及請求生命週期有關,但觸發機制不相同。

CVE-2026-109618:OOM 記憶體毀損

PHP 在處理請求時會配置記憶體,並在請求結束時清理相關資料。當耗盡了 memory_limit 限制(記憶體不足),PHP 會拋出 Out-of-Memory (OOM) 錯誤並使用內部的 longjmp() 機制強制進行請求清理(Request Shutdown)。

問題在於,部分內部資料可能已被其他程序路徑使用,但尚未完成初始化。如果記憶體配置在這個時間點失敗,後續的請求清理流程仍可能把不完整的狀態當作有效資料處理。

攻擊者可以透過特製的 HTTP 請求,嘗試讓 PHP 在特定狀態下發生記憶體耗盡,進而觸發錯誤的清理流程。

流程如下:

  1. 特製 HTTP 請求,例如觸發特定的 Multipart 請求解析與記憶體配置
  2. PHP 發生 OOM,執行流程提前中斷,部分內部狀態尚未完成初始化
  3. 錯誤的請求清理流程,可能讀取或操作無效的記憶體狀態
  4. 可能造成記憶體破壞、程序崩潰或 RCE

CVE-2026-109619:跨請求使用失效記憶體

在常駐進程架構(如 PHP-FPM)中,單一進程會連續處理多個 HTTP 請求。當前一個請求因為異常在中途中斷時,部分全域狀態(Global State)未被徹底重置,但其對應的記憶體空間已經被標記為釋放。

當下一個請求進入同一個 Worker 進程時,PHP 引擎在完成正規初始化前,誤用了殘留在舊記憶體位址中的無效狀態(Stale State),讓攻擊者重寫資料指標並取得系統執行權限,形成 Use-After-Free (釋放後使用)問題。

流程如下:

  1. 請求 A,產生或保留內部狀態
  2. 請求 A 結束,記憶體釋放,但部分全域狀態未正確重設
  3. 請求 B 由同一工作程序處理,正常初始化前的操作接觸到舊狀態
  4. 可能造成記憶體破壞或 RCE

官方修補版本

優先使用受支援的 PHP 分支

PHP 官方於 2026 年 10 月 21 日發布的修補版本如下:

PHP 8.1 及更早版本已停止維護,不會針對這次事件提供對應的官方修補版本。

已停止維護版本的 Backport

PHP 8.1 及更早版本(如 PHP 7.4、7.2 等)已處於停止維護(End-of-Life,EOL) 狀態,官方沒有提供預編譯的安裝包更新。

針對無法立即升級至 PHP 8.2+ 的舊系統,可以參考社群套件維護者 Patch,Ondřej Surý 提供 PHP 7.4 至 8.1 的 Minimal Source Backport,透過 OS 套件管理器更新至帶有安全性修訂號的修復包。

Ubuntu PPA | Debian packages

健忘筆記

Backport(修補回移)是將新版本中已修正的程式碼或安全修補,移植到較舊的軟體分支,而不必直接升級至最新主版本,但這不代表舊版 PHP 已獲得完整的維護,也不代表所有漏洞都已修復。

結論

PHP2Shell 是 2026 年 10 月 21 日公開的兩項 PHP 核心漏洞,分別涉及記憶體耗盡時的狀態破壞以及跨請求使用失效記憶體。兩項漏洞均可能導致遠端程式碼執行,官方已針對 PHP 8.2、8.3、8.4 與 8.5 發布修補版本。

事件的重要性在於漏洞是在 PHP 核心執行環境,而非特定框架或應用程式程式碼。因此,PHP 應用程式即使沒有直接使用相關功能,也不能單憑程式碼本身判定安全。

實際風險仍須區分受影響版本、可利用條件、修補狀態與入侵證據。對舊版 PHP 而言,發行版安全更新及第三方 Backport 可能提供過渡方案,但必須確認實際修補內容與維護責任。

此外,10 月 23 日公布的 CVE-2026-115560 顯示,相關風險仍有後續發展,持續追蹤官方公告、驗證設定及檢查入侵跡象,才是完整的事件處理方式。

延伸閱讀

發表於

2026-10-28

更新於

2026-10-28

許可協議


你可能也想看

【PHP】4種判斷變數或陣列是否存在的方法
【PHP】解析邏輯運算子 and、or、&&、|| 之間的差異
【PHP】陣列合併應用:array + array、array_merge()、array_replace()

評論

複製完成