📌 快速摘要:2026年10月21日,PHP 基金会紧急披露两个 CVSS v4.0 评分高达 9.2 的远程代码执行漏洞(CVE-2026-109618 / CVE-2026-109619),代号 PHP2Shell。这两个漏洞潜伏长达两年,最终由 AI 辅助安全研究团队彻底摸清攻击路径,全球约 69.4% 的网站后端面临直接威胁。
📋 漏洞速查表
| 属性 | 详情 |
|---|---|
| 漏洞代号 | PHP2Shell |
| CVE 编号 | CVE-2026-109618、CVE-2026-109619 |
| CVSS 评分 | ⭐ 9.2 / 10 (CRITICAL) |
| CVSS v4.0 向量 | AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/AU:Y/RE:M/U:Red |
| 漏洞类型 | Use-After-Free(释放后重用)、内存破坏 |
| 攻击复杂度 | ⚠️ 高 (AC:H) — 需精准时序条件 |
| 认证要求 | ✅ 无需认证 (PR:N) |
| 用户交互 | ✅ 无需用户交互 (UI:N) |
| 影响架构 | Apache mod_php(直接触发)、PHP-FPM(应用级路径) |
| 披露日期 | 2026-10-21 14:00 UTC |
| 修复版本 | PHP 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35 |
🎯 受影响版本矩阵
┌─────────────────────────────────────────────────────────────────┐
│ PHP 版本修复矩阵 │
├──────────────┬──────────────────┬──────────────────────────────┤
│ PHP 版本分支 │ 修复版本 │ 受影响版本范围 │
├──────────────┼──────────────────┼──────────────────────────────┤
│ 8.5.x │ 8.5.12 │ 8.5.0 – 8.5.11 │
│ 8.4.x │ 8.4.27 │ 8.4.0 – 8.4.26 │
│ 8.3.x │ 8.3.36 │ 8.3.0 – 8.3.35 │
│ 8.2.x │ 8.2.35 │ 8.2.0 – 8.2.34 │
│ 8.1.x │ ❌ 已 EOL │ ❌ 无补丁,终止支持 │
│ 8.0.x │ ❌ 已 EOL │ ❌ 无补丁,终止支持 │
│ 7.x │ ❌ 已 EOL │ ❌ 无补丁,终止支持 │
└──────────────┴──────────────────┴──────────────────────────────┘⚠️ 警告:根据统计,仍有约 47% 的网站运行在已 EOL(End of Life)的旧版 PHP 上,这些网站 无法获得任何安全补丁,处于完全裸奔状态。
🔬 技术成因深度拆解
CVE-2026-109618:OOM 内存破坏漏洞
英文全称:RCE via OOM corruption (Out-Of-Memory)
漏洞本质:内存越界 / 部分初始化数据泄露
攻击场景(Apache mod_php):
┌─────────────────────────────────────────────────────────┐
│ 攻击链时序(简化版) │
│ │
│ 攻击者请求 ──▶ 触发 PHP memory_limit │
│ │ │
│ ├──▶ 恰好在内部数据结构「部分初始化」时 OOM │
│ │ │
│ ├──▶ PHP 清理逻辑将「无效指针」当作「有效对象」 │
│ │ │
│ ├──▶ 调用析构函数 → use-after-free │
│ │ │
│ └──▶ 内存破坏 → 控制流劫持 → ✅ 远程代码执行 │
└─────────────────────────────────────────────────────────┘关键细节:
- 该漏洞在 任何应用代码执行之前 即可被触发
- Apache
mod_php环境下,单请求内完成,无需等待 worker 复利 - 攻击者需要构造 恰好在 memory_limit 边界触发 的请求,对时序有较高要求
CVE-2026-109619:陈旧全局状态 Use-After-Free
英文全称:RCE via stale global state
漏洞本质:跨请求内存污染
攻击场景(Worker 模式下):
┌──────────────────────────────────────────────────────────┐
│ Worker 进程跨请求污染模型 │
│ │
│ 请求 A ──▶ 触发 fatal error ──▶ 全局状态指针未正确重置 │
│ │ │
│ │ 「会话」「错误回溯」等全局变量 │
│ │ 仍指向请求 A 已释放的堆内存 ──────────┐ │
│ │ │ │
│ │ ▼ │
│ 请求 B ──▶ 被同一 Worker 处理 ──▶ Use-After-Free ✅ │
│ │
│ PHP-FPM、mod_php 都存在 worker 复用机制 │
└──────────────────────────────────────────────────────────┘关键细节:
- PHP worker 进程在处理完一个请求后会复用给下一个请求
- fatal error 发生时,清理代码假设全局状态已重置,但实际上并未完全重置
- 后续请求会访问到属于前一个请求的、已释放的内存区域
为什么是 9.2 分?
“Both issues sit in parts of PHP that nearly every request touches: memory management and error handling.” — PHP 基金会
| CVSS v4.0 指标 | 值 | 说明 |
|---|---|---|
| 攻击途径 (AV) | Network | 网络可远程触发 |
| 攻击复杂度 (AC) | High | 需精准时序控制 |
| 认证要求 (PR) | None | 无需登录 |
| 用户交互 (UI) | None | 无需用户操作 |
| 机密性影响 (VC) | High | 完全泄露 |
| 完整性影响 (VI) | High | 完全篡改 |
| 可用性影响 (VA) | High | 完全拒绝服务 |
| 作用域 (SC/SI/SA) | High | 可影响其他组件 |
🤖 AI 如何发掘「沉睡漏洞」?
漏洞发现时间线
2024 ──────────────────────────────────────── 2026
│ │
│ 📝 2024 Q2 │ 🚨 2026.10.21
│ PHP 首次外部安全审计 │ PHP2Shell 正式披露
│ (OSTIF + Quarkslab) │ ─ CVSS 9.2
│ │ ─ 补丁紧急发布
│ 🔍 2024 Q3 │
│ PHP 核心开发者首次发现 OOM 隐患 │
│ ⚠️ 但无稳定 RCE 路径 → 修复停滞 │
│ │
│ 🤖 2026.06 │
│ OpenAI 启动「Patch the Planet」项目 │
│ PHP 被列入研究目标 │
│ │
│ 🎯 2026.08.11 │
│ Calif 研究员 Ryan A. 借助 AI 找到 RCE 路径 🎯 │
│ OpenAI 独立发现相同根因 │
│ │
│ 🛡️ 2026.08-10 │
│ PHP 安全团队全速开发补丁 │
│ 与多家安全公司秘密协同披露 │
│ │
│ 🚨 2026.10.20 │
│ ⚠️ 漏洞信息意外泄露 → 紧急提前发布 │
│ │
└────────────────────────────────────────────────┘参与发现的 AI 工具矩阵
| 安全研究方 | AI 模型/工具 | 发现内容 |
|---|---|---|
| Calif (Ryan A.) | AI 辅助逆向 | CVE-2026-109618 RCE 路径 |
| OpenAI Codex Security | Daybreak Red | 独立确认根因 + 额外向量 |
| Wiz Research | Wiz Atlas + Gemini 4 Argon + GPT-5.6 Sol | CVE-2026-109619 独立发现 |
| Alpha-Omega | Anthropic Claude Mythos | 全量扫描 PHP 代码库 |
| Trail of Bits | 独立审计 | 补充发现 |
💡 Wiz 研究团队原话:PHP2Shell 是「软件历史上最严重的漏洞之一」,但利用这些漏洞的复杂程度「几乎超出了人类研究人员能够实现的范围」。
🌍 全球影响快照
产业波及面
全球网站后端技术栈占比:
┌──────────────────────────────────────────────┐
│ 🔴 PHP ████████████████████ 69.4% │
│ 🟡 ASP.NET ████ 12.1% │
│ 🟢 Java ██ 7.0% │
│ 🔵 Ruby ██ 6.6% │
│ ⚪ 其他 ██ 4.9% │
└──────────────────────────────────────────────┘
Top PHP 内容管理系统:
┌──────────────────────────────────────────────┐
│ WordPress ████████████████████ 约 43% │
│ Drupal ████ 约 5% │
│ Joomla ███ 约 3% │
│ MediaWiki ██ 约 1% │
└──────────────────────────────────────────────┘各国紧急应对
| 地区/组织 | 应对措施 |
|---|---|
| 🇯🇵 日本 | PHP 使用率 92%,最危急;niconico、pixiv 等紧急下线 |
| 🇪🇺 欧洲多国 | 政府与学术机构紧急断网隔离 |
| 🇨🇳 CNVD | 收录 CNVD-2026-41674 / 41675,发布紧急安全公告 |
| 🇺🇸 美国 | WordPress 官方推送安全更新;WPEngine 等紧急升级 |
| 🎮 游戏行业 | 《赛马娘》《碧蓝幻想》《任天堂 Online》临时停机 |
| 🍣 餐饮连锁 | 寿司郎小程序暂停运行 |
🛡️ 修复指南
方案一:直接升级(推荐)
# 查看当前 PHP 版本
php -v
# Ubuntu/Debian 系统
sudo apt update
sudo apt install --only-upgrade php8.5 php8.5-fpm php8.5-cli
# 或指定版本
sudo apt install php8.5.12
# CentOS/RHEL 系统
sudo yum update php
# 或使用 Remi 源
sudo dnf --enablerepo=remi update php
# Docker
docker pull php:8.5.12-fpm-alpine
# 重建镜像并重新部署
# macOS (Homebrew)
brew update
brew upgrade php方案二:临时缓解(无法立刻升级时)
; php.ini 缓解配置(仅供过渡)
; 1. 降低 memory_limit,缩小 OOM 触发窗口
memory_limit = 64M ; 根据应用实际需求调整,不宜过大
; 2. 启用严格错误隔离
expose_php = Off
display_errors = Off
log_errors = On
; 3. PHP-FPM 特定配置
pm.max_requests = 1000 ; 强制 worker 回收,减少跨请求污染窗口
request_terminate_timeout = 30s
request_slowlog_timeout = 5s
; 4. disable_functions(额外防护,可能影响应用)
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
; 5. open_basedir(限制文件访问)
open_basedir = /var/www/html:/tmp方案三:WAF / CDN 层面拦截
# Nginx ModSecurity 规则示例(针对已知攻击模式)
SecRule ARGS "@rx (memory_limit|ini_set.*memory)" \
"id:900001,phase:1,deny,status:403,log,msg:'PHP2Shell OOM probe detected'"
SecRule REQUEST_HEADERS:User-Agent "@rx PHP2Shell|php2shell|PatchThePlanet" \
"id:900002,phase:1,deny,status:403,log,msg:'Known PHP2Shell scanner UA'"
# Cloudflare 建议
# - 启用 WAF:High / Under Attack 模式
# - 阻止含超长 POST Body 的请求(针对 OOM 触发)
# - 监控 4xx/5xx 突增(攻击触发错误日志)升级验证 Checklist
- 确认 PHP 版本 ≥ 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35
- Web 服务重启(Apache reload / FPM restart)
- PHPInfo 中确认 ZEND_VERSION 正常
- 内存监控无异常飙升
- 错误日志无 use-after-free / memory corruption 关键字
- WordPress / CMS 插件兼容性测试通过
- CI/CD 流水线构建成功
- WAF / CDN 防护规则已更新
🕵️ 漏洞披露事故复盘
协调披露被多次打断
┌─────────────────────────────────────────────────────┐
│ 🔒 原计划:2026-10-22 14:00 UTC 协调披露 │
│ │
│ ❌ 10-20 15:00 UTC │
│ ├── CVE 编号意外流出到论坛和社交媒体 │
│ ├── CVSS 被错误传为 10.0(实际是 9.2) │
│ └── PHP 官方被迫提前 5.5 小时发布预告 │
│ │
│ ❌ 10-20 20:00 UTC │
│ ├── Calif 研究员误发布 PoC 演示视频 │
│ └── 被删除后仍大量二次传播 │
│ │
│ ❌ 10-21 07:41 UTC │
│ ├── Chainguard 单方面打破 embargo │
│ ├── 提前放出含修复的 Docker 镜像 │
│ └── 攻击者可逆向补丁研究利用方式 │
│ │
│ ✅ 10-21 14:00 UTC │
│ └── PHP 基金会正式发布 8.5.12 / 8.4.27 / 8.3.36 │
│ / 8.2.35 补丁版本 │
└─────────────────────────────────────────────────────┘🧠 深度思考:我们学到了什么?
1️⃣ AI 正在改写漏洞发现的平衡
“Future attackers will also use AI.” — OpenAI
| 维度 | 过去 | 现在 / 未来 |
|---|---|---|
| 发现周期 | 数月至数年 | 数周(AI 加速路径搜索) |
| 复杂度门槛 | 需资深逆向工程师 | AI 辅助下大幅降低 |
| 漏洞类型 | 常规逻辑、注入 | 底层内存破坏、UAF |
| 攻防格局 | 人类 vs 人类 | AI vs AI + 人类最后裁决 |
2️⃣ 开源基础设施的「摇摇欲坠」
PHP 基金会 2025 年财务快照:
┌─────────────────────────────────────────┐
│ 💰 年捐助收入:73 万美元 │
│ 👥 全职+兼职开发者:11 人 │
│ 📊 核心代码贡献:42%(基金会成员) │
│ 🌐 支撑网站:全球 69.4% │
└─────────────────────────────────────────┘
对比一些大厂的年度安全预算 → 数亿至数十亿美元 ⚠️3️⃣ 系统复杂度 vs 多样性的失衡
| 事件 | 年份 | 影响技术 | 影响范围 |
|---|---|---|---|
| Millennium Bug | 2000 | COBOL | 全球银行系统 |
| Heartbleed | 2014 | OpenSSL | 2/3 网站 |
| Log4Shell | 2021 | Log4j | 全球云基础设施 |
| CrowdStrike 蓝屏 | 2024 | Windows EDR | 数百万台 PC |
| PHP2Shell | 2026 | PHP | 全球 70% 网站 |
📌 共性规律:规模越大 → 依赖越集中 → 单点故障的级联效应越强
4️⃣ 给企业的安全建议
┌────────────────────────────────────────────────────────┐
│ ✅ 立即行动 │
│ • 全面盘点 PHP 版本与运行架构(mod_php vs FPM) │
│ • 48 小时内完成受支持版本升级 │
│ • 已 EOL 版本 → 强制下线紧急任务 │
│ • 全量扫描 CVE-2026-109618 / 109619 暴露面 │
│ │
│ 🔄 中期改进 │
│ • 建立 EOL 组件替换时间表(<= 3 年) │
│ • 引入 SBOM(软件物料清单)持续扫描 │
│ • 关键路径启用自动安全补丁(Rolling Patch) │
│ • 建立跨团队应急响应机制 │
│ │
│ 🏗️ 长期建设 │
│ • 逐步降低对 PHP 单体架构的依赖(微服务化) │
│ • 支持 PHP 基金会持续安全投入(企业 Sponsorship) │
│ • 建立 AI 辅助内部代码安全审计流程 │
│ • 推动开源基础设施多元化 │
└────────────────────────────────────────────────────────┘