AI 科技資訊人工智慧的新知入口
首頁 / PHP2Shell 是什麼?AI 協助揭露的 PHP 核心致命 RCE 漏洞(CVE-2026-109618 / CVE-2026-109619)完整解析與修補指南

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 如何參與挖掘,以及伺服器管理員必須立即執行的修補方案。

本文導覽
  1. 一句話重點
  2. 漏洞發生的背景與成因
  3. 兩大核心漏洞技術拆解
  4. 為什麼這個漏洞如此致命?
  5. AI 如何協助發現這個長達 12 年的漏洞?
  6. 它和一般網站應用程式漏洞有什麼不同?
  7. 非工程背景或管理者需要知道什麼?
  8. 誰會受到影響?
  9. 目前可以怎麼檢測與緊急修復?
  10. 我們的觀察:AI 時代的資安攻防轉折點
  11. 來源

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 處理「非正常請求中斷」與「檔案上傳進度追蹤」時的記憶體管理瑕疵:

  1. 潛伏時間極長:受影響的程式碼邏輯可追溯至 2012 年發布的 PHP 5.4.0,至今已存在超過 12 年。
  2. 預設設定即中招:引發問題的關鍵功能在 PHP 預設環境中是開啟狀態,伺服器不需要安裝特殊模組就會暴露風險。
  3. 無差別攻擊目標:攻擊者不需要尋找特定的上傳頁面或登入入口,只要對任何會經過 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 運行時或修改核心配置

非工程背景或管理者需要知道什麼?

如果您是企業主管、行銷主管或非工程背景的網站負責人,您需要掌握以下三個核心決策點:

  1. 這不是單純「改程式碼」就能解決的問題:您的委外廠商或內部工程師沒辦法只在 WordPress 後台按按更新外掛就了事,必須由伺服器維運人員(DevOps / SRE)介入,升級伺服器作業系統內的 PHP 套件或 Docker 映像檔。
  2. 所有對外服務都該立即盤點:不只是公司的形象官網,許多內部 ERP、CRM、客服後台若底層使用 PHP,且能透過網際網路或 VPN 連線,都屬於潛在的高風險目標。
  3. 雲端託管服務也有責任分工:若您使用的是完全代管的服務(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 不只是一起嚴重的單一漏洞事件,更是網路資安防禦史上的一個關鍵轉折點。我們從這起事件觀察到以下三個趨勢:

  1. 老牌基礎設施面臨「AI 級」放大鏡檢驗: 過去三十年累積的龐大開源 C/C++ 基礎設施(如 Linux Kernel、OpenSSL、PHP、Python、cURL),正在被先進的 AI 推理模型逐行審視。那些躲過人類眼睛與傳統語法檢查器的邊緣條件漏洞,將會以驚人的速度被挖掘出來。
  2. 防禦方的反應窗口從「天」縮短至「小時」: 過去從漏洞公布到出現大規模攻擊可能需要數週;但在 AI 能自動理解漏洞邏輯並生成利用腳本的時代,從 PoC 外洩到大規模在野掃描只需數小時。企業必須建立更敏捷的自動化更新與容器部署管線。
  3. 軟體現代化刻不容緩: 許多網站長期停留在 PHP 7.x 甚至 5.x,秉持著「沒壞就不要動」的消極態度。但在 PHP2Shell 這類核心級 RCE 威脅下,停留在 EOL 版本的伺服器幾乎等同於在公開網路上門戶大開。將老舊系統遷移至現代化架構(如具備更高記憶體安全保障的語言,或隨時可滾動更新的容器化架構),已是不可迴避的課題。

來源