PHP 爆發出史上最嚴重的 RCE 漏洞「php2shell」(CVE-2026-109618 與 CVE-2026-109619),評分高達 9.2分
- PHP 官方公告:Security advisory: Critical remote code execution vulnerabilities, update now
- CVE 漏洞細節:RCE via OOM corruption · Advisory · php/php-src · GitHub
- Wiz 漏洞分析:PHP2Shell: AI uncovers critical RCE vulnerabilities affecting 70% of the Internet
嚴重到日本首相高市早苗都直接宣佈:
- 「各位,今晚有件極為緊急的請求,希望各位能配合處理」,呼籲所有公開營運的網站管理者確認是否使用PHP,並在修補程式公開前做好準備盡速套用;如果難以在第一時間修補,暫停網站運作也是降低風險的有效做法之一
先說解法:
- PHP 8.2 以上:用官方 Patch 或 Debian 官方套件 apt upgrade 即可
- PHP 7.x 以下(暫解):可以考慮此篇文章 php_uploadprogress_guard 的套件(.so)
目前 PHP 官方有出的 Patch:8.5.12、8.4.27、8.3.36、8.2.35 (正解是需要升級到這些版本)
針對 7.x 以下的版本,官方目前還沒有提供 Patch,所以需要另外處理,有提供 ini 檔的修改解法:(不過下面兩位專家說沒用)
- session.upload_progress.enabled = Off
- post_max_size = 8M or 32M (限制大小)
- memory_limit = -1
- max_input_nesting_level = 8 (設小一點)
- expose_php = 0
- PHP 8.5:fatal_error_backtraces = 0 (關閉)
- PHP-FPM:pm.max_requests 設小一點
PHP Foundation 的核心開發與管理機構成員:
- Gina Peter Banyard(PHP 核心開發者與文件維護者):「唯一的緩解措施就是直接進行修補或升級 PHP」,不存在任何十全十美的臨時替代方案
- Gina Peter Banyard, a PHP core developer and documentation writer funded by the PHP Foundation, wrote: "The only thing I can say is that the only mitigation is patching / upgrading PHP." I sadly know too much.
- Joe Ferguson(PHP 8.6 版本 Release 管理員):「ini 設定救不了你(ini settings won't save you)。」 警告所有站長切勿依賴修改 php.ini 配置來當作避風港
- Joe Ferguson, the release manager for the coming PHP 8.6, put it shorter: "ini settings won't save you."
PHP 嚴重的 RCE 漏洞「PHP2Shell」解法
PHP2Shell 這次事件影響的 CVE 和詳細說明可見:
- CVE-2026-109618: Remote Code Execution via Memory Exhaustion
- CVE-2026-109618:記憶體不足(OOM)時,中斷尚未完成的內部資料初始化,清理階段可能誤用無效資料
- Reported by: Calif, Wiz, OpenAI, and Quarkslab.
- CVE-2026-109619: Remote Code Execution via Fatal Errors
- CVE-2026-109619:舊請求留下的全域狀態仍指向已釋放的記憶體,後續請求可能重複使用該指標
- Reported by: Wiz, Calif, and OpenAI.
- 詳細說明:
此次建議的作法:
- 立即升級:確認實際在背景處理網頁流量的 PHP
- 版本與映像檔,套用上述安全版本並重啟工作程序(Worker / FPM)
- 預防性下線:若無法立即完成修補且對外曝露,多國資安單位與政府(如芬蘭、荷蘭等)建議暫時將受影響的公開網頁與服務離線
- 檢查日誌與後門:檢視 WAF(網頁應用程式防火牆)紀錄、伺服器排程與檔案變動,確認是否有異常請求或未授權存取痕跡
- 官方緊急修補版本 (2026年10月21日釋出)
- PHP 8.2 ➔ 請升級至 8.2.35
- PHP 8.3 ➔ 請升級至 8.3.36
- PHP 8.4 ➔ 請升級至 8.4.27
- PHP 8.5 ➔ 請升級至 8.5.12
OpenAI 有推出檢測工具:GitHub - openai/php2shell-checker · GitHub
PHP 官方 7.4 的 Patch:Comparing master...PHP-7.4-CVE-2026-109618-109619 · php/php-src
Debian Security Bug Tracker 的套件更新狀態:
目前看來,針對 PHP 8.2 以上的,建議直接 apt update; apt upgrade 作升級動作即可
針對 PHP 7.x 以下的解法,可以考慮此套件 php_uploadprogress_guard (Hosted Power 主機商公司 Open Source):
php_uploadprogress_guard 套件內容:
- dist 各個版本 so:https://github.com/HOSTED-POWER/php_uploadprogress_guard/tree/main/dist # 這邊有直接編譯好的 so 檔,不過我習慣還是自己編譯
- Source code:https://github.com/HOSTED-POWER/php_uploadprogress_guard/blob/main/src/hp_uploadprogress_guard.c
- 簡單說,若無法升級 PHP,那這個套件可以暫時先頂著,但是不確定是否有全部擋到,現在最新是 v3.1.0,若有更新記得跟上去
php_uploadprogress_guard 安裝 (若使用 dist 的 so,就直接跳到 Step 8,將 *.so cp 到 /usr/lib/php/20190902/ 即可
- sudo apt install php-dev
- git clone https://github.com/HOSTED-POWER/php_uploadprogress_guard
- cd php_uploadprogress_guard/src
- phpize
- ./configure
- make
- make test
- sudo make install
- Installing shared extensions: /usr/lib/php/20190902/
- echo 'extension=hp_uploadprogress_guard.so' | sudo tee /etc/php/7.4/mods-available/hp_uploadprogress_guard.ini
- sudo phpenmod hp_uploadprogress_guard
- sudo apache2ctl configtest
- sudo systemctl restart apache2.service
- php -m | grep hp_uploadprogress_guard # CLI 能執行不是重點,只是參考
- 重點是線上 要有看到 hp_uploadprogress_guard enable 等等的資訊
- php --ri hp_uploadprogress_guard # cli 但是這個不是重點