---
title: "黑色十月復盤，從 PHP2Shell 與 LiteLLM 投毒看 AI 時代的開源底座危機"
url: "https://afengblog.com/zh-tw/blog/black-october-2026-php2shell-litellm-ai-open-source.html"
language: "zh-TW"
author: "AFeng"
published: "2026-11-03T12:46:06.714Z"
category: "安全與隱私"
tags: ["供應鏈安全","AI 安全","LiteLLM","開源生態"]
reading_time: "32 分鐘閱讀"
description: "深度復盤 2026 黑色十月資安風暴：解析 GPT-5.6 Sol 如何挖出潛伏 14 年的 PHP2Shell 漏洞（CVE-2026-109618 / 109619）、25 台防火牆實戰攻陷鏈路、LiteLLM v1.107.0 投毒始末，以及 13 人維護全球七成網站的開源治理困境與修補清單。"
---

# 黑色十月復盤，從 PHP2Shell 與 LiteLLM 投毒看 AI 時代的開源底座危機

> 2026 年 10 月中下旬，潛伏 14 年的 PHP2Shell 遠端程式碼執行漏洞迫使英芬多國政府拔網路線停機，並被攻擊者串聯核心漏洞 Fragnesia 在 15 分鐘內攻陷 25 台邊界防火牆與管理伺服器；同一天，AI 閘道器 LiteLLM 因 Claude Code 日誌外洩權杖遭供應鏈投毒，101 分鐘內被下載 4.9 萬次。當 GPT-5.6 Sol 與 Gemini 4 Argon 將十年級複雜漏洞挖掘壓縮到單人一週，僅靠 13 名受資助開發者與單人志工支撐全球七成網站的開源底座正面臨前所未有的算力衝擊。

## TL;DR（重點摘要）

- 潛伏 14 年的 PHP2Shell（CVE-2026-109618 / 109619）與 Brotli、UEFI、GitLab、eMudhra、LiteLLM 六大危機在十月中旬同時引爆，迫使多國政府預防性停機。
- Calif 與 Wiz 借助 GPT-5.6 Sol 和 Gemini 4 Argon，將原本需頂尖團隊耗時數月的跨請求 OOM 狀態機漏洞挖掘壓縮至單人一週並提煉為 SKILL.md。
- 雖然公開泛用 PoC 在正式環境屢屢碰壁，但進階攻擊者已透過精準韌體逆向串聯核心漏洞 Fragnesia，15 分鐘奪取 25 台防火牆與內網管理伺服器 root 權限。
- 同日爆發的 LiteLLM v1.107.0 供應鏈投毒源於 Claude Code 回應日誌外洩 OAuth 權杖，101 分鐘內植入 4.9 萬次雙持久化掛鉤並迅速轉入算力劫持。
- PHP 早在 2024 年稽核時便發現該 OOM 隱憂卻因相容性爭議擱置兩年，暴露出 13 人基金會與單人打包志工難以抵禦 AI 算力洪流的結構性困境。

2026 年 10 月 21 日，全球網際網路經歷了一場久違的實體級恐慌。英國政府一口氣關停 32 項公共服務，芬蘭政府 ICT 中心（Valtori）臨時切斷全部面向公眾的政府網站，維基百科的程式碼協作平台、網際網路檔案館乃至日本全日空與《賽馬娘》的伺服器紛紛掛出維護公告。引發這場全球「拔網路線」浪潮的導火線，是潛伏在 PHP 直譯器核心長達 14 年的兩枚遠端程式碼執行漏洞——[PHP2Shell](https://www.php2shell.com/)（`CVE-2026-109618` 與 `CVE-2026-109619`）。

如果把視野從單一語言拉寬就會發現，這根本不是一次孤立的事故。在 10 月 17 日至 30 日這兩週裡，Google Brotli 解碼器越界寫入（Node2Shell）、潛伏 16 年的 TianoCore UEFI 韌體預先啟動漏洞、潛伏 12 年的 GitLab 滿分遠端程式碼執行、印度憑證授權機構（CA）eMudhra 把中繼憑證私鑰生成為單一位元組數字 `4`，以及當紅 AI 閘道器 LiteLLM 的供應鏈投毒相繼引爆。

這一輪被資安界稱為「[黑色十月（Black October）](https://www.welivesecurity.com/en/business-security/lessons-cybersecurity-black-week/)」的危機，標誌著攻防邏輯的分水嶺。當 `GPT-5.6 Sol` 與 `Gemini 4 Argon` 把挖掘十年級複雜狀態機缺陷的週期從「頂尖團隊數月」壓縮到「單人一週」，真正被算力擊穿的不只是底層 C 程式碼的記憶體邊界，還有靠 13 名受資助開發者和業餘志工苦撐全球 70% 網站的開源治理防線。

## 十月斷網潮與六場並發的底座危機

過去十年裡，資安圈習慣了每一次超級漏洞都有一個唯一的「主角」，例如 2014 年的 Heartbleed 或 2021 年的 Log4Shell。但 2026 年 10 月中下旬的荒誕之處在於，網際網路從硬體韌體、加密憑證、壓縮演算法、伺服端直譯器到 AI 供應鏈的六個核心層級，在短短十幾天內同時失守。

![彙整 2026 年黑色十月 PHP2Shell、Node2Shell、LiteLLM、UEFI、GitLab 與 eMudhra 六大資安危機的資訊圖表](https://afengblog.com/uploads/2026/11/92865ae1db2dc4398a707f1a.webp "圖 1 · 2026 年 10 月中下旬集中爆發的六大底層資安事件，涵蓋傳統 Web 直譯器、通用壓縮函式庫、伺服器 UEFI 韌體、PKI 信任鏈與 AI 基礎設施（資料來源：MITRE CVE、MSRC 與 Wiz Research）")

把這六場危機的核心參數放在同一張表裡，能更直觀地看清當時的緊急應變有多窒息：

| 事件代號與元件 | 核心 CVE / 版本 | 嚴重度評分 | 潛伏週期 | 波及範圍與實測破壞力 |
| :--- | :--- | :--- | :--- | :--- |
| **PHP2Shell**（PHP 直譯器） | [`CVE-2026-109618`](https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w)、[`CVE-2026-109619`](https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp) | CVSS v4.0 `9.2`（v3.1 最高 `9.8`） | **14 年**（PHP `5.4.0` 至 `8.5.11`） | 涵蓋約 70% 網站與逾 2,260 萬暴露執行個體；在野串聯核心提權攻陷 25 台防火牆及管理伺服器 |
| **Node2Shell / HTTP2Shell**（Google Brotli） | [`CVE-2026-111497`](https://cveawg.mitre.org/api/cve/CVE-2026-111497) | CVSS v4.0 `9.2` | 影響 Brotli `1.0.3` 至 `1.2.0` | `c/dec/decode.c` 緩衝區越界寫入；波及 Node.js、Bun、.NET、PowerShell 7、Python 與 PHP Windows 建置版 |
| **LiteLLM 供應鏈投毒** | PyPI / 容器映像檔 [`v1.107.0`](https://docs.litellm.ai/blog/security-incident-oct-21-2026) | 惡意軟體植入 | 存活 **101 分鐘**（10 月 21 日） | PyPI 被下載約 **49,000 次**；雙持久化掛鉤竊取雲端憑證、API 金鑰並在 4.5 小時後實施算力劫持 |
| **TianoCore EDK II 韌體** | [`CVE-2026-97631`](https://github.com/tianocore/edk2/security/advisories/GHSA-99cj-7hg9-mp4m) | CVSS v4.0 `9.5` | **16 年**（2010 年合入程式碼） | `UefiPxeBcDxe` 驅動程式 504 位元組 ICMP 緩衝區溢位；早於 OS 與 Secure Boot 在 Ring 0 執行任意程式碼 |
| **GitLab 正規表示式編譯器溢位** | [`CVE-2026-110264`](https://cveawg.mitre.org/api/cve/CVE-2026-110264) | CVSS v3.1 **`10.0` 滿分** | **12 年**（GitLab `7.0` 至 `19.5.0`） | 編譯特製正規表示式觸發整數溢位，無需身分驗證即可遠端執行任意程式碼 |
| **eMudhra 中繼 CA 弱私鑰** | [`CVE-2026-111943`](https://blog.google/security/protecting-chrome-and-android-users-from-compromised-emudhra-intermediate-ca-certificates/) | PKI 信任鏈崩潰 | 2025 年 4 月生成 | 8 張 `emSign G3` 中繼 CA（6 張 TLS + 2 張程式碼簽章）熵源故障，最多 256 次嘗試可破，其一私鑰十進位數值僅為 `4` |

除了這六大支柱，同一週裡還夾雜著趨勢科技 ZDI 在 10 月 21 日誤將未修補的 Linux 核心 KSMBD 遠端程式碼執行漏洞（`ZDI-CAN-33549`、`ZDI-CAN-33774`，CVSS `9.0`）副本寄送至公開郵件論壇，以及月底幣安（Binance）63 億美元加密資產遭竊與無印良品（MUJI）2,726 萬名使用者資料外洩。

在所有並發事件中，真正讓各國政府拉下斷路器的還是 PHP2Shell。根據 W3Techs 的統計，PHP 依然驅動著全球約 **69.2% 至 70%** 已知伺服端語言的網站；[Wiz Research 的雲端環境遙測](https://www.wiz.io/blog/php2shell-php-rce)顯示 **65%** 的企業組織在正式環境中執行 PHP，而 Palo Alto Networks Cortex Xpanse 在全網掃出了超過 **2,260 萬台**直接暴露在公開網路的 PHP 執行個體。

更糟糕的是，官方原本計畫在 10 月 22 日按協調揭露流程釋出新版，但禁運防線在最後關頭連環失守：

* **揭露前 4 天已遭在野搶跑**：[AWS 威脅情報團隊](https://aws.amazon.com/blogs/security/amazon-threat-intelligence-identifies-php2shell-exploitation-prior-to-public-disclosure-in-madpot/)透過全球誘捕系統網路 `MadPot` 證實，早在 **10 月 17 日**就有威脅行為者透過商用匿名代理網路發送針對 PHP2Shell 的攻擊載荷；
* **論壇洩密與展示影片誤設公開**：[Andreas Scherzer 的分鐘級復盤時間軸](https://scherzer.dev/Blog/20261022-php2shell-timeline)紀錄顯示，10 月 20 日 15:00 UTC，Hacker News 出現匿名貼文（`item?id=50167754`）爆出「PHP2Shell」代號與兩枚 CVE 編號；PHP 官方被迫將釋出時間提前 24 小時；緊接著 20:00 UTC 左右，Calif 研究團隊在準備教材時不慎將一段橫掃 WordPress 7.1.3、MediaWiki 1.46.2、Magento 2.4.9、Laravel 13.36.0、Drupal 11.4.10 等 10 款主流框架的 RCE 展示影片設為公開；
* **容器映像檔提前 6 小時破窗**：10 月 21 日 06:07 UTC，容器廠商 Chainguard 違反禁運協議，提前逾 6 小時在公開儲存庫推送了套用修補程式的 PHP 映像檔，讓外部攻擊者得以直接透過二進位比對（Binary Diffing）逆向定位漏洞函式。

當 PHP 官方在 10 月 21 日 13:31 UTC 緊急釋出 [`8.5.12`、`8.4.27`、`8.3.36`、`8.2.35` 修補程式](https://www.php.net/archive/2026.php)（並罕見地為早已終止支援的 `PHP 7.4`、`8.0`、`8.1` 提供原始碼級最小回溯修補程式）時，[英國國家網路安全中心（NCSC）](https://www.ncsc.gov.uk/news/critical-security-issue-affecting-php)向全英機構發出了 50,000 份緊急警報，明確建議「若無法立即部署緩解措施或耗時過長，應考慮將系統下線」。[日本首相高市早苗](https://edition.cnn.com/2026/10/21/tech/php2shell-vulnerability-ai-intl)也在社群平台公開呼籲企業必要時暫停服務。隨後 48 小時內，[英國 32 項政府服務](https://www.theguardian.com/technology/2026/oct/22/websites-across-world-hit-by-millions-of-attempts-to-exploit-php-code-flaw)、[芬蘭全部公共政府網站、荷蘭國會下議院（Tweede Kamer）與 DigiD 登入系統](https://www.bbc.com/news/articles/cmly0lg3w5x2o)、維基媒體基金會的 Phabricator 與 Toolforge 平台，以及日本全日空（ANA）、JR 西日本、三菱日聯銀行（MUFG）部分網頁相繼預防性停機。

## 把十四年老洞寫成 SKILL.md，大型語言模型如何拆穿 PHP 記憶體邊界

為什麼這兩枚潛伏在 PHP 直譯器最底層的漏洞，能夠繞過上層業務程式碼，通殺從 WordPress 到自研框架的幾乎所有應用程式？

答案藏在 PHP 處理記憶體耗盡（Out-of-Memory，OOM）時的緊急跳出機制，以及長生命週期 Worker 行程的跨請求狀態管理裡。

![展示 PHP2Shell 從 8MB 記憶體放大觸發 OOM longjmp 到跨請求 UAF 與 PHPBleed 記憶體外洩的三階段技術流程圖](https://afengblog.com/uploads/2026/11/d73436ac93059301f030ce47.webp "圖 2 · PHP2Shell 核心利用機理，利用分塊傳輸或小於 8MB 的深層巢狀空陣列耗盡 128MB 記憶體上限，觸發 zend_bailout 非局部跳轉撕裂內部狀態，並在同一 Worker 的後續請求中完成收割（技術來源：Calif Research & Wiz Research）")

在 PHP 引擎內部，當單次請求配置的記憶體觸碰 `memory_limit`（預設 `128M`）時，引擎會呼叫 `zend_bailout()`——底層直接基於 C 語言的非局部跳轉 `longjmp()`——立刻跳出當前執行堆疊並中止請求。這種設計假設所有底層 C 函式在配置記憶體前都處於「隨時可以安全中斷」的一致狀態。但 [Calif Research 的 Ryan Austin](https://calif.io/php2shell/) 與 [Wiz Research 團隊](https://www.wiz.io/blog/php2shell-php-rce)揭開了兩類致命破綻：

1. **前置突破（用不到 8MB 封包撐爆 128MB 記憶體）**：許多人起初以為 PHP 預設的 `post_max_size = 8M` 會擋住超大記憶體消耗。實際上攻擊者有兩條繞過路徑：一是發送省略 `Content-Length` 標頭的 HTTP/1.1 `Transfer-Encoding: chunked` 請求或無 `content-length` 虛擬標頭的 HTTP/2 串流，讓 PHP 持續緩衝直至撞上 128MB 牆；二是在剖析 `multipart/form-data` 檔案上傳（`main/rfc1867.c`）時建構深層巢狀空陣列變數名稱（如 `files[a][b][c]...`），迫使 PHP 為每個欄位在 `$_FILES` 中重複初始化 `name`、`type`、`tmp_name`、`error`、`size` 五棵 `HashTable` 子樹，不到 8MB 的原始 POST 封包就能在記憶體中膨脹出逾百 MB 的結構體配置。
2. **`CVE-2026-109618`（OOM 中斷導致的未初始化記憶體損毀）**：在 `Zend/zend_hash.c` 的 `_zend_hash_str_add_or_update_i` 函式中，程式碼先把雜湊表已用計數 `ht->nNumUsed++` 加一，隨後才呼叫 `zend_string_init` 為鍵名配置記憶體。如果恰在此時觸發 OOM `longjmp()`，槽位計數已經增加，但對應槽位的 `Bucket.val` 仍是未初始化的垃圾資料；緊接著請求清理階段 `zend_hash_destroy` 走訪銷毀該表時，就會把未初始化的野指標當作合法 `zval` 呼叫解構函式，直接劫持控制流。
3. **`CVE-2026-109619`（跨請求陳舊全域狀態 UAF 與「PHPBleed」）**：在 Apache `mod_php` 或 `PHP-FPM` 等多請求重用同一 Worker 行程的架構下，PHP 存在多個臨時指向單次請求堆積記憶體的全域變數。例如當請求帶有 `PHP_SESSION_UPLOAD_PROGRESS` 欄位（`session.upload_progress.enabled=1` 預設開啟）時，PHP 在請求極早期（`PG(modules_activated)` 仍為 `0`）就將全域變數 `PS(mod_data)` 指向請求記憶體；若此時觸發 OOM，引擎會因模組尚未標記啟用而跳過所有 `RSHUTDOWN` 清理函式，導致請求記憶體釋放後 `PS(mod_data)` 仍保留懸空指標（Dangling Pointer）。同理，在 `ext/standard/var_unserializer.re` 中，`unserialize()` 內部 OOM 會令 `RSHUTDOWN` 將 `BG(unserialize).level` 遞減為 `-1`，在下一請求引發 `used_slots` 整數溢位與跨請求釋放後重用（Use-After-Free，UAF）。而當 `php_session_start()` 期間發生 OOM 導致工作階段 ID 指標 `PS(id)` 未清零時，下一請求的 `Set-Cookie: PHPSESSID=...` 回應標頭更會像當年的 Heartbleed 一樣，直接把 Worker 記憶體裡的環境變數、資料庫密碼、API 金鑰乃至用於繞過 ASLR 的共用函式庫基底位址回傳給攻擊者（即「PHPBleed」）。IBM 全球紅隊演練負責人 Patrick Fussell 對此打了個精準的比方：「這就好比你退了飯店房間，但房卡依然有效；你稍後推門回去，房間裡已經擺滿了下一位房客的行李。」

真正讓人背脊發涼的不是漏洞本身有多精巧，而是它們被挖出來的方式。

利用 `memory_limit` 中斷製造狀態不一致的思路，早在 **2004 年**就由 PHP 資安專家 Stefan Esser 提出；**2020 年**，資安研究員 `jr@coredu.mp` 也曾提交 `Bug #78876` 指出 `multipart/form-data` 可繞過限制觸發 OOM。但在長達十幾年裡，要在數百萬行 C 程式碼中人工追蹤跨模組巨集展開、參考計數、堆積配置與非局部跳轉的排列組合，幾乎處於人類精力的極限邊緣。

2026 年夏天，遊戲規則變了。6 月 22 日，OpenAI 聯合 Trail of Bits 啟動「[Patch the Planet](https://blog.trailofbits.com/2026/06/22/introducing-patch-the-planet/)」開源資安稽核計畫；7 月 30 日，資安公司 Calif 加入該計畫稽核 PHP 原始碼。Calif 研究員 Ryan Austin（`@lcfr_hax`）借助 OpenAI 的 `GPT-5.6 Sol` 模型，在啟動稽核後**第 2 天（8 月 1 日）**就揪出了 `_zend_hash_str_add_or_update_i` 的 OOM 中斷原語。更關鍵的是，他在找到第一個漏洞後，直接讓大型語言模型將該缺陷抽象成了一份可供 AI 代理（Agent）反覆呼叫的 `SKILL.md` 結構化狩獵模式：

```text
publish or destroy state (發布或銷毀狀態)
  -> perform fallible work (執行可能觸發 OOM 的可失敗配置)
  -> nonlocal fatal (觸發 zend_bailout / longjmp 非局部致命跳轉)
  -> commit/rollback skipped (跳過正常提交或 RSHUTDOWN 回滾清理)
  -> surviving consumer trusts false state (同一 Worker 的後續消費者信任殘留的錯誤狀態)
```

拿著這份 `SKILL.md`，AI 代理在百萬行 C 程式碼裡按圖索驥，迅速掃出了 `session.upload_progress` 與 `var_unserializer` 等一整串同類原語。幾乎在同一時期（8 月 19 日至 24 日），Wiz Research 團隊在毫不知情的情況下，動用自研資安代理 `Wiz Atlas`、Google `Gemini 4 Argon` 與 `GPT-5.6 Sol`，僅由**單名研究員在 1 週內**就獨立發現了這組漏洞並打通了涵蓋 `mod_php` 與 `PHP-FPM` 的四條攻擊鏈：

> "The underlying flaws had been present for decades, but demonstrating their exploitability required an exceptionally complex chain of steps, at the edge of what human researchers could practically achieve. Frontier AI models substantially reduced that barrier, turning a longstanding flaw into an exploit. With frontier AI models and the right tools, a single researcher completed in a week what previously would have taken a world-class team months of work."
> （這些底層缺陷已經存在了數十年，但證明其可利用性需要極其複雜的步驟鏈條，處於人類研究人員實際可達成能力的邊緣。前瞻 AI 模型大幅降低了這一門檻，將長期存在的缺陷轉化為漏洞利用。借助前瞻 AI 模型和適當的工具，單名研究人員在一週內就完成了過去需要世界級團隊耗時數月才能完成的工作。）

同樣的劇本貫穿了整個「黑色十月」：引發 [Node.js](https://nodejs.org/en/blog/vulnerability/october-2026-security-releases)、.NET、Bun 與 [微軟全線產品例行外更新](https://www.microsoft.com/en-us/msrc/blog/2026/10/patch-now-php2shell-brotli-emudhra-guidance-for-customers)的 Google Brotli 越界寫入漏洞（`CVE-2026-111497`），其修復提交 `0ed4268a` 早在 2026 年 2 月 27 日就已合入儲存庫卻無人意識到是資安漏洞，直到 OpenAI Codex Security 研究員 Khai Tran 與 Sylvie Mayer 用模型將其挖出；而潛伏在 TianoCore EDK II 韌體裡整整 16 年的 PXE 預先啟動漏洞（`CVE-2026-97631`），同樣是由 Anthropic 研究員 Alex Matrosov 與 Google 研究員 Dan Holmes-Mitra 聯手翻出（後因韌體廠商 AMI 提前提交公開 Pull Request 打破了原定 2027 年 1 月的禁運，詳見 [Ars Technica 報導](https://arstechnica.com/security/2026/10/code-execution-flaw-in-uefi-firmware-threatens-most-servers-on-planet-earth/)）。

## 當 AI 工具鏈開始反噬，LiteLLM 投毒案的 101 分鐘驚魂

如果說 PHP2Shell 和 Brotli 展現的是 AI 算力對「舊世界 C 語言底座」的降維清算，那麼在 2026 年 10 月 21 日「黑色星期三」同一天爆發的 [LiteLLM 供應鏈投毒案](https://www.wiz.io/blog/litellm-compromised-steals-credentials)，則赤裸裸地暴露了「新世界 AI 基礎設施」自身的脆弱與燈下黑。

LiteLLM 是當前企業與開發者串接 OpenAI、Anthropic、AWS Bedrock 等百餘種大型語言模型最核心的開源 Python 閘道器之一。10 月 21 日 11:39 UTC——就在全球維運團隊焦頭爛額地等待 PHP 官方修補程式落地的同一時刻——攻擊者向 PyPI 官方套件庫推送了竄改版 `litellm==1.107.0`，並在 11:46 UTC 至 14:20 UTC 之間同步汙染了 Docker Hub 與 GitHub Container Registry（GHCR）上的 `v1.107.0`、`latest`、`main-latest` 和 `main-stable` 容器映像檔。

![展示 LiteLLM v1.107.0 供應鏈投毒從 Claude Code 日誌洩密到雙持久化掛鉤與算力劫持的四步鏈路圖](https://afengblog.com/uploads/2026/11/dd5a5d47843842f90d726e55.webp "圖 3 · LiteLLM v1.107.0 供應鏈攻擊全鏈路，從 Claude Code 回應主體日誌外洩工程師 OAuth 權杖，到 PyPI 惡意套件植入雙持久化掛鉤並在 4.5 小時後啟動 AWS Bedrock 算力劫持（資料來源：BerriAI 官方事故復盤 & Wiz Research）")

根據 [BerriAI（LiteLLM 母公司）的事後官方復盤](https://docs.litellm.ai/blog/security-incident-oct-21-2026)與 Wiz Research 的逆向報告，整條入侵鏈從源頭到變現都帶著濃重的 AI 時代烙印：

* **源於 `Claude Code` 回應主體日誌的權杖外洩**：BerriAI 內部在公開網路暴露了一台開啟了詳細回應主體日誌紀錄的 LiteLLM 執行個體。研究團隊發現，`Claude Code` 在特定情境下會將使用者的 GitHub CLI OAuth 權杖直接嵌入到回應主體（Response Body）中，結果導致 BerriAI 內部 3 名核心工程師的 GitHub CLI OAuth 權杖被原原本本記入了 LiteLLM 日誌。攻擊者拿到這 3 枚權杖後，直接觸發並核准了 `v1.107.0` 的正式釋出管線。
* **101 分鐘狂攬 4.9 萬次下載與雙持久化掛鉤**：儘管 PyPI 在 13:20 UTC（上線 101 分鐘後）緊急隔離了該版本，但 ClickPy 統計顯示，這短短一個多小時內惡意套件已被自動化 CI/CD 管線和開發者拉取了約 **49,000 次**。Wiz 逆向發現，惡意載荷具有明顯的 LLM 輔助編寫特徵，且首次在野採用了 **`.pth` + `sitecustomize.py` 雙持久化並行機制**——只要宿主機上啟動任意 Python 直譯器，`cook.pth` 就會自動匯入 `cook.py`，在 `/tmp/.pc_once_72129118c59f5636c0bb` 寫入單次執行鎖後，呼叫內部名為 `privcollect` 的 16 個採集模組，把瀏覽器密碼、AWS/GCP/Azure 雲端憑證、OpenAI/Anthropic API 金鑰乃至 PostgreSQL 資料庫資料表 `"LiteLLM_CredentialsTable"` 中的前 500 筆金鑰一網打盡，經 AES-256-CBC 與 RSA-4096 加密後回傳至偽冒網域 `www.litellm.dev/healthcheck`；與此同時，`sitecustomize.py` 則在 Linux 和 macOS 背景每小時輪詢一次 GitHub 死信箱（`letters9813/pythonclient-test/main/domain.txt`），隨時準備拉取二階段遠端控制指令碼。
* **4.5 小時極速轉入算力劫持（LLMjacking）**：在憑證外洩僅 4.5 小時後的當日 16:20 至 17:01 UTC，攻擊者就已經開始批次呼叫 `sts:GetCallerIdentity` 與 `bedrock:ListFoundationModels`，直接盜用受害企業的 AWS Bedrock 配額實施大型語言模型算力劫持。

一邊是防守方用大型語言模型挖穿潛伏 14 年的傳統開源底座，另一邊是攻擊者從 AI 程式設計工具與 AI 閘道器的日誌漏洞裡順走鑰匙，用大型語言模型寫的木馬反過來收割雲端大型語言模型算力。這兩幕在同一天上演，構成了 2026 年「黑色十月」最諷刺的畫面。

## 泛用指令碼碰壁與 25 台伺服器失守，AI 攻擊鏈的真實水位

在 PHP2Shell 公開後的頭幾天裡，資安社群一度陷入兩極分化的爭吵。

一方面，Cloudflare 執行長 Matthew Prince 揭露，在漏洞正式公布前 10 小時就已觀測到數千次嘗試，公布後 45 分鐘內飆升至數萬次，24 小時內突破數百萬次。但另一方面，[Wiz Research 在 10 月 27 日的實測拆解](https://www.wiz.io/blog/php2shell-exploitation-so-far)與 [Bishop Fox 的應變指南](https://bishopfox.com/blog/responder-guidance-for-php2shell)均指出，GitHub 上瘋傳的兩大主流開源 PoC 家族——針對 `CVE-2026-109618` 的 `archive/legacy-8m/exploit.py` 和針對 `CVE-2026-109619` 的 `pure/mk_a1.py` + `mk_leak_b.py`——在離開預設 Docker 靶機後，面對真實正式環境幾乎全軍覆沒。

原因並不複雜：`legacy-8m` 強依賴 Apache `mod_php` 且未加 `chunked` 編碼時會被預設 `8M` 限制直接攔下；而針對現代主流 `PHP-FPM` 的 `pure/mk_a1.py` 不僅寫死了特定編譯版本的堆積風水偏移量（Heap Feng Shui offsets），還苛刻地要求先後兩次請求必須命中同一個 PHP Worker 行程。在高並發或多 Worker 負載平衡的正式伺服器上，正常業務流量隨手就會打亂堆積配置，或者直接把 Worker 撞崩重啟。GitHub 上甚至還冒出了像 `WoYinDao/CVE-2026-109618-CVSS-9.2-Critical` 這樣掛羊頭賣狗肉的假 PoC（底層其實是在掃陳舊的本地檔案包含 LFI 路徑），被腳本小子（Script Kiddie）和殭屍網路拿去全網盲掃，製造了漫天無效的 `HTTP 500` 雜訊。

但這絕不意味著 PHP2Shell 只是一場虛驚。當腳本小子拿著泛用指令碼到處碰壁時，真正具備工程化能力的進階威脅行為者，已經用行動證明了什麼叫「外科手術式狙擊」。

![Dream Research 還原的攻擊者利用 PHP2Shell 與 Fragnesia 攻陷邊界防火牆並穿透內網管理伺服器滲透 Active Directory 網域控制站的路徑圖](https://afengblog.com/uploads/2026/11/bacdb24a505c852b1dc46e57.webp "圖 4 · Dream Research 與 Unit 42 聯合還原的 CL-UNK-1280 實戰入侵路徑，透過單次 HTTPS 請求串聯 PHP2Shell 與 Linux 核心漏洞 Fragnesia 奪取邊界防火牆 root 權限，再經由 8 連接埠反向 SSH 通道攻陷內網中央管理伺服器並直插 Active Directory 網域控制站（圖源：Dream Research，2026-10-29）")

2026 年 10 月 29 日，[Dream Research](https://dreamgroup.com/blog/chained-php2shell-exploit-roots-25-servers) 與 [Palo Alto Networks Unit 42](https://unit42.paloaltonetworks.com/cve-2026-109618-cve-2026-109619/)（及 [Cybersecurity Dive 通報](https://www.cybersecuritydive.com/news/palo-alto-networks-firewalls-compromised-chained-attacks-php2shell/873323/)）聯合公開了首起經過完整鑑識驗證的進階在野入侵行動（追蹤代號 `CL-UNK-1280`）。鑑識人員在攻擊者的基礎設施裡發現了已安裝的 `Claude Code`，以及一套早在 10 月 8 日就設定好、串接了 `DeepSeek` 與 `Kimi` 大型語言模型的自動化攻擊平台 `aiscan`。

這批攻擊者根本沒有去碰充滿隨機性的公開 Web 網站，而是把準星死死鎖在了環境高度標準化、且管理平面（`appweb`）內嵌了高記憶體上限 `PHP 8.0.30` 與 `7.4.33` 的 **Palo Alto Networks PAN-OS 邊界防火牆**上：

1. **漏斗式精準測繪與韌體逆向**：攻擊者先透過 FOFA 檢索出全球約 19,000 台暴露管理介面的防火牆（約占全球安裝基數的 0.02%），用 200 執行緒存活探測篩出 5,000 台線上設備，再按美國、日本、台灣和韓國四地及 `PHP 8.0.30` 版本過濾出 **240 個高價值目標**。動手前，攻擊者已提前解密了 PAN-OS 韌體，針對不同小版本逆向提取了 **11 份精確到位元組的 `libphp.so` 記憶體偏移設定檔（Profiles）**。
2. **四階段 PHP2Shell + 核心提權 `Fragnesia` 一擊拿 Root**：為了繞過防火牆的 SELinux `httpd_t` 沙箱限制，攻擊者設計了一套四階段連招——`A1` 發送 383MB 載荷耗盡記憶體製造懸空狀態，`B1` 從 `Set-Cookie` 回應標頭外洩 `libphp.so` 基底位址繞過 ASLR，`A2` 發送 500MB 載荷建立陳舊參照，最後在 `B2` 請求中偽造 `HashTable` 解構函式呼叫 `zif_system`，**並在同一次 HTTP 請求內直接串聯 Linux 核心 XFRM ESP-in-TCP 本地提權漏洞 `Fragnesia`（`CVE-2026-46300`）**，透過頁面快取覆寫 774 位元組的 `/etc/pam.d/su` 為 `pam_permit.so`。從發起請求到奪取無密碼 `root` 權限並植入 103 位元組的 Webshell（`/unauth/php/change_password.php`），全程僅需 **15 分鐘**。
3. **穿透反向通道攻陷美國政府關聯內網**：10 月 23 日 18:14 至 21:55 UTC，攻擊者一口氣拿下了 **24 台邊界防火牆**的 `root` 權限。10 月 24 日 10:09 UTC，攻擊者針對其中 2 台隸屬於某**美國政府關聯機構**（啟用了 CAC 智慧卡驗證）的防火牆發起專案行動，在 `/usr/local/lib/.panops/` 下建立開機自動啟動的 8 連接埠反向 SSH 通道；11:35 UTC，攻擊者穿過通道，對原本嚴格隔離在內網的**第 25 台伺服器（中央防火牆管理伺服器）**再次發射同一套 `PHP2Shell` 攻擊鏈奪取 `root`，用主金鑰解密了管理伺服器設定裡的 LDAP 服務帳號明文密碼，並在網域原則 `lockoutThreshold=0`（無帳號鎖定）的條件下，對整個 Active Directory 網域發起了全量列舉、密碼噴灑、後門電腦帳號建立與 Keycloak SAML 簽章金鑰提取。

正是這起乾淨俐落的實戰狙擊，連同資安研究員 Adel Karimi 誘捕系統被破、英國滲透測試員 Jaydip Modhwadia（`killa`）攻破 2,000 美元比特幣實機懸賞靶標，促使美國 CISA 在 10 月 26 日至 28 日連續三天將 [`CVE-2026-109618`](https://cveawg.mitre.org/api/cve/CVE-2026-109618)、[`CVE-2026-109619`](https://cveawg.mitre.org/api/cve/CVE-2026-109619)、Brotli `CVE-2026-111497` 以及核心提權漏洞 `Fragnesia`（`CVE-2026-46300`）悉數列入「已知被利用漏洞目錄（KEV）」，[JPCERT/CC](https://www.jpcert.or.jp/at/2026/at260033.html) 與日本 IPA 也隨即發出最高級別追加通報。

![Wiz Research 統計的 2026 年 10 月 22 日至 25 日受 PHP2Shell 顯著影響的企業組織比例下降趨勢折線圖](https://afengblog.com/uploads/2026/11/4c85d36d924519fc789cd069.webp "圖 5 · 漏洞揭露後受 PHP2Shell 顯著影響的企業組織比例變化，首日從 100% 快速降至 63.0%，但到第 4 天（10 月 25 日）仍停留在 52.1%，逾半數組織存在長尾未修補資產（圖源：Wiz Research，2026-10-27）")

更嚴峻的是防守方的長尾困境。Wiz Research 的連續遙測顯示，儘管從 10 月 22 日到 25 日，全網暴露的受影響 PHP 主機總數下降了 **67%**，但擁有至少 1 台未修補暴露主機的企業組織比例在首日降到 `63.0%` 後便迅速放緩，到 10 月 25 日仍有 **52.1%** 的組織沒能清零（累計降幅 `47.9%`）。大量不直接對外宣告 PHP Banner 的邊界閘道器、硬體防火牆管理埠、老舊 NAS 和停留在 EOL 分支的內部系統，依然暴露在自動化攻擊平台的瞄準鏡下。

## 13 個人的基金會與 48 小時不眠的志工，開源底座還撐得住嗎

復盤完技術細節與攻防實況，最後必須回到那個最刺痛工程界的問題：為什麼一個早在 2004 年就有理論先例、2020 年就有 Bug 報告的隱憂，會一直留到 2026 年被 AI 挖穿？

許多人不知道的是，構成 `CVE-2026-109618` 的核心 OOM 錯誤處理缺陷，其實早在 **2024 年 6 月**——在德國主權技術局（Sovereign Tech Agency）出資、OSTIF 與 Quarkslab 組織的 PHP 資安稽核中——就已經被一名 PHP 核心開發者親手指了出來。

2026 年 10 月 21 日，PHP 基金會執行董事 Roman Pronskiy 在[官方復盤部落格](https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/)中寫下了一段極其坦誠的自我剖析，公開承認那次長達兩年的擱置是一場**「結構性失靈（structural failure）」**：

> "In 2024, during the security audit facilitated by OSTIF and Quarkslab and funded by the Sovereign Tech Agency, a PHP core developer identified the out-of-memory error handling issue that forms part of CVE-2026-109618. At the time, no concrete exploit path was known, and the proposed fixes carried trade-offs that delayed consensus. Looking back, failing to resolve this earlier was a structural failure."
> （2024 年，在由主權技術局資助、OSTIF 與 Quarkslab 促成的資安稽核期間，一名 PHP 核心開發者識別出了構成 CVE-2026-109618 一部分的記憶體耗盡錯誤處理問題。當時尚未發現具體的漏洞利用路徑，且提議的修復方案伴隨著權衡取捨，推遲了共識的達成。回過頭看，未能更早解決這一問題是一次結構性失靈。）

為什麼發現了卻修不掉？《[The Next Web](https://thenextweb.com/news/php-foundation-structural-failure-2024-flaw-leak)》與 [BBC News 的深度調查](https://www.bbc.co.uk/news/articles/cw30ejqljl43o)揭開了開源底座光鮮外表下的窘迫家底：

![對比 AI 代理規模化漏洞挖掘攻擊與全球開源基礎設施志工維護極限的非對稱博弈資訊圖表](https://afengblog.com/uploads/2026/11/b80f8e438b9a9fc7e43a3c8c.webp "圖 6 · 算力洪流下的非對稱博弈，一邊是不知疲倦掃描百萬行 C 程式碼的前瞻大型語言模型代理，另一邊是僅靠 13 名受資助開發者與單人志工連熬 48 小時支撐全球 70% 網站的開源維護底座")

* **13 個人扛起 70% 的網際網路**：驅動全球近七成網站的 PHP 基金會，全職與兼職受資助的核心開發人員加起來只有 **13 個人**。團隊既沒有專職的資安專案經理，也沒有強制升級裁決機制。當 2024 年那名開發者指出 OOM 隱憂時，由於當時沒人能手寫出完整的端到端 RCE PoC，而徹底修補又需要在底層引入破壞向後相容性、甚至可能導致第三方擴充套件崩潰的侵入式改動，幾套競爭性方案在「共識驅動」的郵件論壇裡爭論不休，最終被擱置了整整兩年。
* **一個捷克志工的 48 小時極限孤戰**：上游發了原始碼修補程式，成百上千萬台正式伺服器並不能直接用上。全球 Debian 與 Ubuntu 生態中最核心的 PHP 套件儲存庫（`deb.sury.org`），長期以來完全由捷克志工開發者 **Ondřej Surý** 一個人利用業餘時間維護。在 PHP2Shell 爆發的那兩天裡，這位志工幾乎整整 **48 小時沒有闔眼**，獨自一人完成了從新版本到老舊分支的全部回溯打包，才讓全球數百萬台 Linux 伺服器能夠敲下一行 `apt upgrade` 救命。
* **「找洞已經變成了最廉價的部分」**：正是在 PHP2Shell 爆發的同一週，OpenAI 執行長 Sam Altman 公開坦言「[我不再認為我們能夠修補所有漏洞](https://www.theguardian.com/technology/2026/oct/23/cybersecurity-ai-hacking-php-vulnerability)」；Anthropic 副資安長 Jason Clinton 警告業界正迎來一場「沒有足夠時間給關鍵基礎設施套用修補程式的漏洞海嘯」；美國前 CISA 局長 Chris Krebs 更在 [CNBC 專訪](https://www.cnbc.com/2026/10/23/php-vulnerabilities-ai-cybersecurity.html)中估算，「人類歷史上發現的所有嚴重（Critical）漏洞中，約有 **3%** 是在剛剛過去的一個月內被發現的」。

正如 Trail of Bits 工程團隊在復盤「Patch the Planet」計畫時寫下的那段判詞：

> "If it wasn’t already clear from the last several months of security news, this week makes one thing clear: the expensive part of security work has moved... The advantage is no longer in finding bugs, but everything after: confirming a finding, getting its severity right, writing a patch a maintainer will accept, hardening the surrounding code, making long-term improvements to prevent similar issues in the future, and coordinating a disclosure."
> （如果過去幾個月的資安新聞還不夠清楚的話，本週讓一件事變得無比明確：資安工作中昂貴的部分已經轉移了……優勢不再在於發現漏洞，而在於發現之後的一切：確認發現、準確評估嚴重程度、編寫維護者能夠接受的修補程式、強化周邊程式碼、做出長期改進以防止未來出現類似問題，以及協調揭露。）

過去二十年，開源資安的預設假設是「深層架構漏洞極難被串成穩定攻擊鏈，只要還沒人寫出 PoC，維護者就有幾年時間慢慢討論相容性」。大型語言模型把這條緩衝帶徹底抹平了。當 AI 可以在幾天內把二十年前埋下的狀態機裂縫變成 15 分鐘拿 Root 的自動化武器，而開源社群依然指望十幾個兼職開發者靠用愛發電去接住每秒鐘都在產生的算力洪流，這種錯配注定無法持續。

對於科技巨頭和前瞻 AI 實驗室來說，光靠跑大型語言模型刷 CVE 排行榜、把成百上千份漏洞報告甩給精疲力竭的志工維護者，並不是真正的資安貢獻——出資為關鍵開源底座配備專職資安工程團隊、用 AI 協助編寫經過完整回歸驗證且兼顧向後相容的高品質修補程式，才是償還技術債的唯一出路。

而對於我們每一個在第一線維護產品的開發者和維運團隊，「黑色十月」留下的工程教訓同樣無比具體：

1. **立即核查並收斂執行階段邊界**：將 PHP 升級至 `8.5.12`、`8.4.27`、`8.3.36`、`8.2.35` 或發行版對應安全修補版本；若受限於老舊系統暫無法升級，第一時間在 `php.ini` 中明確設定 `session.upload_progress.enabled = 0`，避免在執行階段透過 `ini_set` 動態切換 `session.serialize_handler`（防範關聯漏洞 `CVE-2026-115560`），並在反向代理（Nginx / Cloudflare）層嚴格限制分塊傳輸與請求主體大小、縮短 PHP-FPM `pm.max_requests` 週期以加速回收 Worker 行程。
2. **排查跨語言底層依賴與內嵌設備**：同步升級 Node.js（`22.23.4` / `24.22.1` / `26.12.1`）、Bun（`1.4.4`）、.NET（`8.0.33` / `9.0.22` / `10.0.14`）及 Python 環境中的 `brotli` 解碼函式庫（修補 `CVE-2026-111497`）；重點清查防火牆、VPN 閘道器、NAS 等內部內嵌了舊版 PHP 管理介面的硬體設備，嚴禁將管理平面直接暴露於公開網路。
3. **清查 AI 工具鏈與憑證衛生**：凡在 2026 年 10 月 21 日拉取過 `litellm==1.107.0`（PyPI 或容器映像檔）的環境，僅降級套件遠遠不夠，必須排查宿主機 Python `site-packages` 下的 `cook.pth`、`cook.py`、`sitecustomize.py` 及 `/tmp/.pc_once_*` 痕跡，並全量輪替機器上接觸過的所有雲端廠商金鑰、大型語言模型 API Key 與資料庫憑證；同時嚴禁在代理閘道器中開啟未去識別化的完整回應主體日誌紀錄。

標籤：[供應鏈安全](https://afengblog.com/zh-tw/tag/supply-chain-security)、[AI 安全](https://afengblog.com/zh-tw/tag/ai-safety)、[LiteLLM](https://afengblog.com/zh-tw/tag/litellm)、[開源生態](https://afengblog.com/zh-tw/tag/open-source)

---

原文：https://afengblog.com/zh-tw/blog/black-october-2026-php2shell-litellm-ai-open-source.html

其他公開頁面亦可在 URL 後加上 `.md` 取得 Markdown 版本；網站索引： https://afengblog.com/zh-tw/llms.txt
