---
title: "复盘 2026 黑色十月，当 AI 挖穿 PHP2Shell 与十年老洞，靠志愿者撑起的开源底座还能扛多久"
url: "https://afengblog.com/blog/black-october-2026-php2shell-litellm-ai-open-source.html"
language: "zh-CN"
author: "AFeng"
published: "2026-11-03T12:37:50.195Z"
category: "安全与隐私"
tags: ["PHP2Shell","供应链安全","AI 安全","LiteLLM","开源生态"]
reading_time: "31 分钟阅读"
description: "深度复盘 2026 年黑色十月安全危机：拆解 PHP2Shell（CVE-2026-109618/109619）内存中断机理、LiteLLM v1.107.0 供应链投毒、25 台防火墙失守实况，以及 13 人 PHP 基金会与志愿者维护者在 AI 挖洞时代的治理极限。"
---

# 复盘 2026 黑色十月，当 AI 挖穿 PHP2Shell 与十年老洞，靠志愿者撑起的开源底座还能扛多久

> 从引发全球政务与维基百科预防性断网的 PHP2Shell，到同日爆发的 LiteLLM 供应链投毒、Google Brotli 越界写入与 16 年 UEFI 老洞：当大模型在几天内打通十余年复杂状态机漏洞，仅靠 13 名受资助开发者与业余志愿者维系的开源防线正面临前所未有的算力冲击。

## TL;DR（太长不看）

- 2026 年 10 月中下旬集中爆发 PHP2Shell、Brotli 越界写入、16 年 UEFI 老洞、12 年 GitLab 满分漏洞、eMudhra 单字节私钥 4 与 LiteLLM 投毒六大底层安全危机。
- Calif 与 Wiz 借助 GPT-5.6 Sol、Gemini 4 Argon 及 SKILL.md 狩猎模式，在数日内打通潜伏 14 年的 PHP OOM 非局部跳转与跨请求 UAF 利用链。
- 同日爆发的 LiteLLM v1.107.0 投毒源于 Claude Code 响应体日志泄露 OAuth 令牌，101 分钟内被拉取 4.9 万次并在 4.5 小时后启动 Bedrock 算力劫持。
- 高级威胁行为体 CL-UNK-1280 利用接入 DeepSeek 与 Kimi 的 aiscan 平台，串联 PHP2Shell 与内核漏洞 Fragnesia 在 15 分钟内攻陷 25 台防火墙与管理服务器。
- 支撑全球 70% 网站的 PHP 基金会仅 13 名受资助开发者，2024 年审计发现的缺陷因共识分歧搁置两年，凸显 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 报文就能在内存中膨胀出逾百兆字节的结构体分配。
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)` 仍保留悬垂指针。同理，在 `ext/standard/var_unserializer.re` 中，`unserialize()` 内部 OOM 会令 `RSHUTDOWN` 将 `BG(unserialize).level` 递减为 `-1`，在下一请求引发 `used_slots` 整数溢出与跨请求释放后重用（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 智能体反复调用的 `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 路径），被脚本小子和僵尸网络拿去全网盲扫，制造了漫天无效的 `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 副 CISO 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 与数据库凭据；同时严禁在代理网关中开启未脱敏的完整响应体日志记录。

标签：[PHP2Shell](https://afengblog.com/tag/php2shell)、[供应链安全](https://afengblog.com/tag/supply-chain-security)、[AI 安全](https://afengblog.com/tag/ai-safety)、[LiteLLM](https://afengblog.com/tag/litellm)、[开源生态](https://afengblog.com/tag/open-source)

---

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

Other pages also provide Markdown by appending `.md`; site index: https://afengblog.com/llms.txt
