PHP2Shell 是什麼?AI 協助揭露的 PHP 核心致命 RCE 漏洞(CVE-2026-109618 / CVE-2026-109619)完整解析與修補指南
2026 年 10 月資安界揭露代號「PHP2Shell」的嚴重漏洞(CVE-2026-109618 與 CVE-2026-109619),影響 PHP 5.4 至 8.5 全系列版本。本文深度拆解其記憶體損毀成因、AI 如何參與挖掘,以及伺服器管理員必須立即執行的修補方案。
本文導覽
PHP2Shell 是 2026 年 10 月中旬被公開揭露的兩個重大 PHP 核心漏洞統稱,官方弱點編號為 CVE-2026-109618 與 CVE-2026-109619。這兩個漏洞在 Common Vulnerability Scoring System(CVSS v4.0)中均獲得高達 9.2 分(Critical,嚴重) 的評價。
這起資安事件之所以引起全球網站維運者與資安專家的高度緊張,是因為它並非存在於某個特定的 WordPress 外掛、Drupal 模組或 Laravel 套件中,而是深植於 PHP 語言本身的底層執行環境(C 語言核心運行時)。
更關鍵的是,攻擊者可以在不需要任何帳號密碼認證的情況下,對伺服器發送特製的 HTTP 請求,直接取得伺服器主機的遠端控制權(Remote Code Execution,簡稱 RCE),因此被社群命名為「PHP2Shell」(從 PHP 請求直通伺服器 Shell)。
如果把網站程式比喻成一家銀行的警衛與防盜門,PHP2Shell 不是破解了防盜門的密碼,而是直接炸毀了整棟大樓的地基——在警衛還沒看清楚訪客身分之前,整座建築的控制權就已經落入對方手中。
一句話重點
PHP2Shell 是潛伏於 PHP 核心超過 12 年的記憶體安全漏洞,攻擊者能在未經授權下繞過應用層防線取得伺服器 Shell 權限;PHP 官方已緊急釋出 PHP 8.2.35、8.3.36、8.4.27、8.5.12 修補版本,所有使用 PHP 的網站均應立刻檢查並升級。
漏洞發生的背景與成因
PHP 支撐了全球超過 75% 的動態網頁伺服器,包含 WordPress、Drupal、Joomla 等主流內容管理系統(CMS),以及無數企業內部系統與 API 服務。
長年以來,大多數 PHP 相關的資安威脅主要集中在「應用程式邏輯層」,例如 SQL 注入(SQL Injection)、跨站腳本攻擊(XSS)或檔案上傳驗證不嚴。然而,PHP 底層是以 C 語言寫成的直譯器,牽涉到複雜的記憶體配置、垃圾回收與處理請求時的狀態切換。
這一次由資安研究機構 Calif、Wiz 以及 OpenAI 的研究團隊聯手發現的 PHP2Shell,問題恰恰出在 PHP 處理「非正常請求中斷」與「檔案上傳進度追蹤」時的記憶體管理瑕疵:
- 潛伏時間極長:受影響的程式碼邏輯可追溯至 2012 年發布的 PHP 5.4.0,至今已存在超過 12 年。
- 預設設定即中招:引發問題的關鍵功能在 PHP 預設環境中是開啟狀態,伺服器不需要安裝特殊模組就會暴露風險。
- 無差別攻擊目標:攻擊者不需要尋找特定的上傳頁面或登入入口,只要對任何會經過 PHP 處理的網址發送請求即可觸發。
兩大核心漏洞技術拆解
PHP2Shell 實際上由兩個相互關聯但觸發點不同的 CVE 漏洞組成:
+-------------------------------------------------------------------------+
| HTTP 請求 |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| Web 伺服器 SAPI 層 (PHP-FPM / mod_php) |
+-------------------------------------------------------------------------+
| |
| [CVE-2026-109619] | [CVE-2026-109618]
v v
+-----------------------------+ +---------------------+
| session.upload_progress | | OOM 記憶體耗盡中斷 |
| 處理 multipart 檔案上傳 | | longjmp() 狀態遺留 |
+-----------------------------+ +---------------------+
| |
v v
+-----------------------------+ +---------------------+
| 釋放後引用 (Use-After-Free) | | 懸空指標與記憶體損毀 |
+-----------------------------+ +---------------------+
|
v
+-------------------------------------------------------------------------+
| 堆積噴灑 (Heap Spraying) 覆寫 Zend 引擎函式指標 |
+-------------------------------------------------------------------------+
|
v
+-------------------------------------------------------------------------+
| 取得伺服器控制權 (Remote Shell / RCE) |
+-------------------------------------------------------------------------+
1. CVE-2026-109619:上傳進度追蹤的釋放後引用(Use-After-Free)
- 影響模組:PHP Session 核心擴充的
session.upload_progress功能。 - 問題根源:PHP 為了讓前端能即時得知檔案上傳進度,在核心內建了上傳進度暫存機制。當瀏覽器發送含有上傳識別碼的
multipart/form-data請求時,PHP 核心會在 Session 結構中建立追蹤節點。 - 漏洞成因:當 HTTP 請求遭到異常中止(例如故意中斷連線或傳送畸形分段)時,PHP 的記憶體清理流程在釋放該節點的記憶體後,未將全域結構中的引用指標完全清空。這導致了典型的 釋放後引用(Use-After-Free,簡稱 UAF)。
- 攻擊手法:攻擊者隨後利用堆積噴灑(Heap Spraying)技術,以精準控制的資料填補剛被釋放的記憶體區塊,進而覆蓋 Zend 虛擬機內部的函式執行指標(如
zend_call_function),最終引導 CPU 執行攻擊者指定的任意系統指令。
2. CVE-2026-109618:記憶體耗盡(OOM)下的全域狀態損毀
- 影響模組:PHP 核心記憶體配置器(Zend Memory Manager)與例外中止流程。
- 問題根源:當單一請求超過 PHP 的記憶體上限(
memory_limit)時,PHP 會藉由 C 語言的longjmp()機制強行跳出當前執行脈絡,直接進入清理程序以防止伺服器崩潰。 - 漏洞成因:在某些極端的記憶體配置邊界條件下,
longjmp()中止了進行到一半的物件初始化,導致部分全域狀態變數處於「半初始化」的懸空狀態。 - 攻擊手法:當同一個 Worker 行程(如 PHP-FPM 的背景 worker)繼續接收下一個請求時,便會引用到上一個請求留下的損毀記憶體位址,造成非預期的記憶體洩漏(可能外洩環境變數、資料庫密碼或 API 金鑰)或被誘發二次崩潰達成 RCE。
為什麼這個漏洞如此致命?
在一般情況下,網站如果遇到漏洞,通常可以透過前端的防火牆規則、登入驗證或程式碼修補來防堵。但 PHP2Shell 之所以被各家資安大廠列為「最高威脅」,有以下三個關鍵原因:
1. 執行時序先於所有應用程式碼(Pre-Execution)
這是最致命的特性。當 HTTP 請求到達伺服器時,SAPI(如 PHP-FPM、Apache mod_php、LiteSpeed、FrankenPHP)會在載入任何 PHP 程式碼之前先解析請求標頭與上傳進度。
這意味著:
- 即使網站後台設定了嚴格的多因素驗證(MFA/2FA),也完全無效。
- 即使是完全靜態的 PHP 頁面(例如只印出
phpinfo()或echo "hello";),同樣能被攻擊。 - 即使網站本身根本沒有提供檔案上傳功能,PHP 核心依然會被動解析上傳請求。
2. 主要 Web 伺服器架構皆受波及
過去某些漏洞僅侷限於特定 Web 伺服器架構(例如僅影響 Nginx 或僅影響 Windows 版 IIS)。但 PHP2Shell 存在於 PHP 核心層:
- Apache + mod_php:風險最高,甚至在行程隔離不嚴格的環境中可能直接危害主伺服器。
- PHP-FPM(搭配 Nginx 或 Caddy):最常見的現代架構,攻擊者可取得
www-data或執行帳號的完整權限。 - LiteSpeed / OpenLiteSpeed / FrankenPHP:同樣受到底層 PHP 函式庫共用機制的影響。
3. 已有活躍的在野利用(Wild Exploitation)
資安威脅情資顯示,在修補程式正式公布前後,網路上已經偵測到自動化掃描腳本與概念驗證程式碼(PoC)。黑客組織正密集掃描全球對外開放的 PHP 站點,嘗試植入 Webshell、後門程式或加密貨幣挖礦程式。
AI 如何協助發現這個長達 12 年的漏洞?
PHP2Shell 的發現過程,寫下了當代資安研究的重要里程碑——這是頂尖 AI 模型主導參與核心運行時漏洞挖掘的經典戰役。
在過去十餘年間,PHP 核心程式碼已經受過全球無數頂尖白帽駭客的靜態分析(SAST)、動態模糊測試(Fuzzing)與嚴格的同行審查。為什麼這個記憶體缺陷能藏匿超過 12 年?
因為傳統 Fuzzing 工具主要著眼於「程式會不會崩潰(Crash)」,而 CVE-2026-109619 必須在特定的非同步請求中止、結合特定時序的 Heap 結構重複利用下才會形成可利用鏈,傳統工具很容易將其視為一般連線中斷而忽略。
此次研究中,Calif 與 Wiz 的資安團隊利用了 OpenAI 專門微調的深度推理模型與資安代理人架構(AI Security Agents):
- 語意層級的狀態追蹤:AI 模型具備跨檔案、跨函式的程式碼語意理解能力,能夠在腦海中模擬 C 語言記憶體指標在多執行緒與異常處理時的生命週期。
- 自動推演利用鏈(Exploit Chain Synthesis):當 AI 發現
session.upload_progress在longjmp()中斷時的清理不對稱性後,進一步推演能否透過堆積噴灑來控制暫存器,並自動產出測試腳本證實了可行性。 - 自動生成防禦特徵碼:在通報 PHP 官方核心團隊的同時,AI 代理人也自動生成了針對 Snort、Suricata 與雲端 WAF(如 Cloudflare、AWS WAF)的流量過濾特徵,大幅縮短了防禦方部署防線的時間差。
這項案例證明:AI 已經具備探索軟體底層基礎架構隱蔽弱點的實戰能力,軟體防禦與進攻的節奏已經被徹底改寫。
它和一般網站應用程式漏洞有什麼不同?
為了讓大家更清楚 PHP2Shell 的嚴重層級,我們將它與常見的網站漏洞進行比較:
| 比較項目 | 一般 Web 漏洞(例如 SQL 注入 / XSS) | 第三方外掛漏洞(如 WordPress 外掛) | PHP2Shell(CVE-2026-109618 / 109619) |
|---|---|---|---|
| 影響層級 | 單一網站應用程式邏輯 | 特定外掛或模組使用者 | 全體 PHP 伺服器核心執行環境 |
| 觸發先決條件 | 需要有資料庫查詢或特定參數漏洞 | 必須安裝並啟用該外掛 | 只要能接收 HTTP 請求即可觸發 |
| 身分驗證需求 | 通常需要特定權限或公開表單 | 視外掛功能而定 | 完全不需要身分認證(Unauthenticated) |
| 應用層防護 | 應用程式可過濾輸入值 | 停用外掛即可防止 | 在應用程式碼執行前就已觸發,應用層無法攔截 |
| 潛在危害 | 資料外洩或篡改 | 網站被入侵或掛馬 | 直接取得伺服器本機權限(RCE / Shell) |
| 修復方式 | 修改網站原始碼 | 更新或移除外掛 | 必須升級 PHP 運行時或修改核心配置 |
非工程背景或管理者需要知道什麼?
如果您是企業主管、行銷主管或非工程背景的網站負責人,您需要掌握以下三個核心決策點:
- 這不是單純「改程式碼」就能解決的問題:您的委外廠商或內部工程師沒辦法只在 WordPress 後台按按更新外掛就了事,必須由伺服器維運人員(DevOps / SRE)介入,升級伺服器作業系統內的 PHP 套件或 Docker 映像檔。
- 所有對外服務都該立即盤點:不只是公司的形象官網,許多內部 ERP、CRM、客服後台若底層使用 PHP,且能透過網際網路或 VPN 連線,都屬於潛在的高風險目標。
- 雲端託管服務也有責任分工:若您使用的是完全代管的服務(PaaS/SaaS,例如 WP Engine、Shopify),雲端廠商通常會統一修補;但如果您使用的是虛擬主機(VPS,如 Linode、DigitalOcean、AWS EC2),您必須自行負責更新。
誰會受到影響?
受影響的 PHP 版本
- PHP 8.5:
8.5.12以前的所有版本 - PHP 8.4:
8.4.27以前的所有版本 - PHP 8.3:
8.3.36以前的所有版本 - PHP 8.2:
8.2.35以前的所有版本 - 已終止支援(EOL)版本:PHP 8.1、8.0、7.x、5.4~5.6 原生皆含有此脆弱性(官方不再為這些舊版釋出更新,除非使用 Linux 發行版的安全延伸維護付費專案)。
預設高風險環境特徵
- 使用預設的
php.ini設定(其中session.upload_progress.enabled = On)。 - 伺服器對公網開放 HTTP/HTTPS 連線。
- PHP-FPM 或 Apache 執行行程具備較高或未經嚴格隔離的檔案系統存取權限。
目前可以怎麼檢測與緊急修復?
面對這場資安風暴,網站管理者應依序採取以下三步驟:
步驟一:檢查當前環境版本
在伺服器終端機執行以下指令,確認目前運行的 PHP 版本:
php -v
若輸出版本低於下列安全版本,代表您的環境處於高風險狀態:
- PHP 8.2 安全版本:
8.2.35以上 - PHP 8.3 安全版本:
8.3.36以上 - PHP 8.4 安全版本:
8.4.27以上 - PHP 8.5 安全版本:
8.5.12以上
步驟二:正式修復方案(強烈建議,最根本)
透過套件管理工具將 PHP 更新至最新安全版,並重啟相關服務:
Ubuntu / Debian 系統:
sudo apt update
sudo apt --only-upgrade install php8.3-fpm php8.3-cli php8.3-common
sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx # 或 apache2
Docker 容器環境:
若使用官方 Docker 映像檔,請更新 Dockerfile 的標籤(Tag)並重新建立容器:
# 確保拉取已包含最新修補的映像檔
FROM php:8.3.36-fpm-alpine
重新建置並部署:
docker compose pull
docker compose up -d --force-recreate
步驟三:緊急暫時緩解方案(若暫時無法立即重開機或升級)
如果伺服器身處生產環境,暫時無法排定停機升級時間,可以透過關閉漏洞觸發點進行緊急緩解。
編輯伺服器的 php.ini 設定檔(通常位於 /etc/php/8.x/fpm/php.ini 或 /etc/php/8.x/cli/php.ini):
; 尋找並將 session.upload_progress.enabled 改為 Off
session.upload_progress.enabled = Off
修改完成後,重載 PHP 服務生效:
sudo systemctl reload php8.3-fpm
注意:關閉
session.upload_progress.enabled能夠有效阻斷 CVE-2026-109619 的直接利用向量,但無法完全修復 CVE-2026-109618 的 OOM 記憶體問題。因此,升級 PHP 仍是唯一徹底解決問題的途徑。
我們的觀察:AI 時代的資安攻防轉折點
PHP2Shell 不只是一起嚴重的單一漏洞事件,更是網路資安防禦史上的一個關鍵轉折點。我們從這起事件觀察到以下三個趨勢:
- 老牌基礎設施面臨「AI 級」放大鏡檢驗: 過去三十年累積的龐大開源 C/C++ 基礎設施(如 Linux Kernel、OpenSSL、PHP、Python、cURL),正在被先進的 AI 推理模型逐行審視。那些躲過人類眼睛與傳統語法檢查器的邊緣條件漏洞,將會以驚人的速度被挖掘出來。
- 防禦方的反應窗口從「天」縮短至「小時」: 過去從漏洞公布到出現大規模攻擊可能需要數週;但在 AI 能自動理解漏洞邏輯並生成利用腳本的時代,從 PoC 外洩到大規模在野掃描只需數小時。企業必須建立更敏捷的自動化更新與容器部署管線。
- 軟體現代化刻不容緩: 許多網站長期停留在 PHP 7.x 甚至 5.x,秉持著「沒壞就不要動」的消極態度。但在 PHP2Shell 這類核心級 RCE 威脅下,停留在 EOL 版本的伺服器幾乎等同於在公開網路上門戶大開。將老舊系統遷移至現代化架構(如具備更高記憶體安全保障的語言,或隨時可滾動更新的容器化架構),已是不可迴避的課題。
來源
- PHP 官方安全公告:https://www.php.net/archive/2026.php
- PHP2Shell 專題研究分析站:https://php2shell.com/
- NIST NVD 資料庫(CVE-2026-109618):https://nvd.nist.gov/
- NIST NVD 資料庫(CVE-2026-109619):https://nvd.nist.gov/
- 查閱日期:2026-10-23