PHP 官方 10 月 21 日發布安全公告,標題就是「Critical remote code execution vulnerabilities, update now」:PHP 8.5.12、8.4.27、8.3.36 和 8.2.35 修復了兩個嚴重漏洞 CVE-2026-109618(GHSA-w8hw-w9fx-j79w)和 CVE-2026-109619(GHSA-6wmf-4rv5-p3rp)。兩個在 GitHub 公告裡都是 Critical、CVSS v4 評分 9.2,都可能讓未經認證的攻擊者遠端執行程式碼。官方的說法是所有 PHP 使用者都應立即更新。這兩個漏洞也被叫作 php2shell。

誰受影響

  • 公告寫的是所有處理 Web 請求的 PHP 安裝,包括 PHP-FPM、Apache 的 mod_php、php-cgi、FrankenPHP 和 LiteSpeed。官方認為 mod_php 風險最高,已經演示過一個未認證的請求能在任何應用程式碼執行之前觸發攻擊。
  • CVE-2026-109618:記憶體耗盡(OOM)處理可能在內部請求資料只初始化了一部分時打斷 PHP,隨後的請求清理可能把這些無效資料當成有效資料來用。
  • CVE-2026-109619:屬於某個請求的內部狀態,在它背後的記憶體被釋放後仍然殘留,同一個 worker 處理的下一個請求可能在正常初始化之前就用上它。
  • 問題出在 PHP 執行時本身,不在 WordPress 或某個外掛。WordPress 官方同日發文說明,WordPress 本身不需要、也不打算為此發布更新,要升級的是 PHP。在 WordPress 後台「工具 → 網站健康 → 資訊 → 伺服器」裡可以看到目前的 PHP 版本。

怎麼升級

  • 先用 php -v 看版本。用官方原始碼自己編譯的,升級到 8.5.12、8.4.27、8.3.36 或 8.2.35。
  • 用系統套件的:Ubuntu 10 月 21 日發布了 USN-8948-1,22.04 的修正套件是 php8.1 8.1.2-1ubuntu2.28,24.04 是 php8.3 8.3.6-0ubuntu0.24.04.13;Debian 13 是 php8.4 8.4.27-1~deb13u1(DSA-6574-1),Debian 12 是 php8.2 8.2.35-1~deb12u1(DLA-4848-1)。執行 sudo apt update && sudo apt upgrade 之後,要重啟 PHP-FPM 或 Apache(例如 sudo systemctl restart php8.3-fpm),已經在跑的 worker 不會自己換成新程式碼。
  • PHP 8.1 及更早的版本,PHP 官方已經不再更新;發行版自己回補修復的(比如上面 Ubuntu 22.04 的 8.1),照常升級系統套件即可。考慮到嚴重程度,官方這次還為 7.4、8.0、8.1 提供了最小化的原始碼修補程式,給自己編譯的人用。
  • 寶塔這類面板裝的 PHP、Docker 映像裡的 PHP,都不走系統的 apt:前者在面板裡檢查有沒有新版本,後者拉取更新後的映像、重建容器。參見用寶塔面板視覺化管理 VPS和 VPS 上的 Docker 入門。

暫時升不了:官方給的臨時措施

官方強調只有升級才是完整的解決辦法,下面這些措施只能減少特定的攻擊路徑,並不能讓系統變得安全:

  • 針對 CVE-2026-109618:設定 memory_limit=-1,最好用應用程式改不掉的方式(例如 FPM 池或 Apache 設定裡的 php_admin_value);同時調低 post_max_size,不需要上傳檔案的應用程式設為 8M,需要上傳的設為 32M,並讓 upload_max_filesize 小於它。
  • 針對 CVE-2026-109619:設定 session.upload_progress.enabled=0 並重啟所有 worker,要寫在 php.ini、FPM 池或伺服器設定裡,不能靠 ini_set() 或 FPM 的 .user.ini 檔案;PHP 8.5 還要設定 fatal_error_backtraces=0。
  • 10 月 23 日官方又發了一條補充說明:即使已經升到 8.5.12,也建議在下一個常規版本發布之前保持 session.upload_progress.enabled=0,因為還有一個觸發條件很少見的相關問題 CVE-2026-115560,要到下個版本才修。

前面有 CDN 也要升級

Cloudflare 10 月 21 日表示,這兩個漏洞在正式發布前就已洩露,它觀察到了針對客戶的攻擊流量;從 10 月 21 日 03:02(UTC)起,用它免費版或付費版 WAF 的網站預設受到防護。但 Cloudflare 自己也說,有 WAF 也要給 PHP 打修補程式。而且 WAF 只能過濾經過它的流量:原始伺服器 IP 如果能被直接存取,攻擊者可以繞過 CDN。升級完成後,如果網站之前一直暴露在公開網路,建議按 VPS 被入侵怎麼辦檢查一遍有沒有異常程序和陌生檔案。WordPress 站長還應確認 9 月的 WordPress 核心漏洞已經修復,用 nginx 的順便看看 nginx 10 月 14 日修的 5 個漏洞。