全部案例
#025 · 应急响应

案例研究 · 应急响应

重大漏洞突发 2.5 小时产出一整套应急响应方案

你是单位的网络安全管理者,凌晨盯着一条“PHP 与 Node.js 同日爆出未认证 RCE”的推送,而单位里到底装了哪些版本,没人拿得出一份清单。一段交办指令下去,你手里多出 6 类文件:给管理层的一页纸加一张图、能离线搜索的运维 SOP、以及自己会把受影响版本翻出来的 Python 检测脚本。

PHP 两个 9.2 分未认证 RCE · Node.js 10 个漏洞· Linux + Windows 双平台脚本· 零供应链清单可用· 澜砥 N2.6-Preview· 6 类交付物 · 09:56 → 11:54

概览

  1. 01

    交办三件事 — 一段指令写清三类交付物与各自受众

    你把事件链接和三条交付要求一次说清:管理层一页纸加一张图、一线运维可搜索的 HTML SOP、不依赖供应链清单的 Python 检测脚本,末尾加一句“先做规划,找我确认后再动手”。

  2. 02

    拍板三条约束 — PDF 图文、双平台、不含证书事件

    你回三行:一页纸用 PDF 且不要纯文字、脚本覆盖 Linux 与 Windows、证书事件不纳入——此后再没干预,直到交付定稿。

向 AVL Code 发布任务

我是某单位的网络安全管理者,需要针对刚刚https://mp.weixin.qq.com/s/xie0TOiTlte-H77AdDcdtA  发生的PHP及node.js重大漏洞这一事件进行应急响应。我需要完成三件事情。第一向单位管理者(非网络安全专业)简洁易懂、清晰明了的同步事件的危害程度、紧迫程度以争取在内部发起重大应急响应的支持,以单独的一页纸+单独的一张图方式;第二需要输出针对事件的面向一线运维人员提供专业严谨、经验证的应急响应操作说明sop,以指导开展修补工作,以html页面方式(要求页面中具备搜索和索引功能);第三需要输出一个配套的检测检查工具,以支撑运维人员在不了解系统软件供应链组成的情况下发现存在的受影响版本,支撑运维人员修复漏洞后的复核工作,要求以python脚本方式。以上先做规划,找我确认后再动手。

前提:需要能访问公众号原文与 php.net / nodejs.org 的网络;本机需 Python 3 与可用的 HTML→PDF 工具链(本次为 weasyprint 69.0 + Noto CJK 字体)与 PyMuPDF;检测脚本在目标主机就地运行,Linux / Windows 均可

复现材料见文末 亲自检测 ↓

把传闻和事实分开

推送文章读完,第一件事不是写材料,而是决定哪些数字可以印在给管理层的那张纸上。你把事件链接交给它:

你输入 → AVL Code
需要针对刚刚https://mp.weixin.qq.com/s/xie0TOiTlte-H77AdDcdtA  发生的PHP及node.js重大漏洞这一事件进行应急响应
AVL Code 执行 → 你会看到
抓取公众号原文《安全大逃杀:https 证书、PHP、Node.js 三连爆》→ 通读全文
→ 标出未获官方确认的数字:“70% 的网站基于 PHP”“最早到 PHP 5.4”“6000 万证书”“Cloudflare 在补丁前 66 小时已观测到利用”
→ 转抓一手源:php.net/security 公告、php.net/archive/2026.php、nodejs.org 10 月安全发布
→ 落成可写死的字段:CVE-2026-109618 / 109619(CVSS v4.0 9.2 未认证 RCE)、修复版 8.5.12 / 8.4.27 / 8.3.36 / 8.2.35、影响 PHP-FPM / mod_php / php-cgi / FrankenPHP / LiteSpeed
→ Node.js 侧:本次修复 10 个漏洞(最高 HIGH),CVE-2026-111497(Brotli 越界写 → RCE),修复版 v22.23.4 / v24.22.1 / v26.12.1
→ 写成 05-事实核实清单.md,作为三件交付物的唯一事实源

清单里每一条都挂着官方来源,未确认的数字被单独列进“未确认项”,不进入任何对外材料。三件交付物后来共享这一份文件——口径只有一处,改一次就全对。

方案先拍板,才动手

事实底座有了,它没有直接开写,而是先把方案摊开:三件交付物的结构、验收标准,外加五个需要你拍板的问题。你的回答只有三行。

你输入 → AVL Code
1、一页纸用pdf格式,且不要纯文字
2、脚本平台范围覆盖linux和windows
3、不纳入证书事件
AVL Code 执行 → 你会看到
计划模式先出方案 → 事实表把“已核实”与“未确认”分开列
→ 三件交付物逐件给结构与验收:一页纸六段式、SOP 按运行方式与发行版分节、脚本“主动发现 → 判定 → 复核”
→ 同时抛出 5 项待确认:格式、脚本平台范围、是否纳入证书事件、单位环境、语言
→ 你回三行 → 锁死 PDF 图文 / Linux + Windows / 证书只作背景
→ 顺带定下三条硬约束:单文件自包含、零外部依赖、退出码可接自动化

一次确认换掉了后面所有返工:格式、平台、范围三条口径落到方案里,之后每个子 Agent 拿到的都是同一份约束,而不是各自的猜测。

给非技术读者的那一页

开工后的第一件交付物,读者不看 CVE 编号——他只有三分钟,要在一页纸上看懂危不危险、要不要现在动。

你输入 → AVL Code
第一向单位管理者(非网络安全专业)简洁易懂、清晰明了的同步事件的危害程度、紧迫程度以争取在内部发起重大应急响应的支持,以单独的一页纸+单独的一张图方式
AVL Code 执行 → 你会看到
探环境:weasyprint 69.0 + pango/cairo + Noto CJK 齐全 → 走 HTML→PDF→PNG 一条链
→ 先做信息图:A4 单页 HTML(警示条 + 结论框 + 三张事实卡 + 时间线 + 两栏建议)
→ 渲染后内容溢出到 2 页 → 压排版重写 → 单页 1323×1871px @160dpi,文本坐标核验无溢出无重叠
→ 再做一页纸:首版单页但底部留白 67mm → 补“事件时间线”把版面放大
→ 结果撑到第 2 页(min-height:78mm 过大)→ 收紧间距与字号重渲染
→ 单页成立:内容到 291mm,与页脚留 4mm 间隙

“单页”不是目测出来的:每一版都回到 PDF 里量文本块坐标——底部留白、末行落点、与页脚的间隙,全是能报出来的数字。

两路子 Agent 并行

剩下两件交付物彼此不依赖,它把活同时派了出去,各自在一个隔离的上下文里做完。

你输入 → AVL Code
第二需要输出针对事件的面向一线运维人员提供专业严谨、经验证的应急响应操作说明sop,以指导开展修补工作,以html页面方式(要求页面中具备搜索和索引功能);第三需要输出一个配套的检测检查工具,以支撑运维人员在不了解系统软件供应链组成的情况下发现存在的受影响版本,支撑运维人员修复漏洞后的复核工作,要求以python脚本方式。
AVL Code 执行 → 你会看到
两个子 Agent 同时开工(上下文隔离,互不污染)
→ SOP:单文件 980 行 47,631 字节,内联 CSS/JS,顶部实时搜索 + 左侧目录锚点;按运行方式(FPM / mod_php / php-cgi / FrankenPHP / LiteSpeed)与发行版分节,每步给前置条件 → 命令 → 预期结果 → 回滚
→ 脚本:单文件 1,148 行 46,730 字节,仅标准库,默认只读,--dry-run 只打印将执行的命令
→ 脚本自纠两处误判:dpkg 的 node* 模式命中 378 个 node-* 库包 → 收紧为运行时包;npm / pm2 的 -v 是工具自身版本 → 改为定位同目录 node 再探
→ SOP 自检:html.parser 标签配对 0 处未闭合,外部 http(s) 资源仅 3 条参考来源文本
→ 脚本本机实扫:4 项受影响(Node.js 20.19.4 ×2、24.14.0、26.11.1),退出码 1

判定阈值全部来自事实清单:PHP 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12,Node 22.23.4 / 24.22.1 / 26.12.1;超出判定表范围一律报“未知”,不猜。

换一个 Agent 来挑错

三件交付物齐了。指令里那句“专业严谨、经验证”成了验收口径——它没有自己说通过,而是另起了一个隔离上下文的评估 Agent。

你输入 → AVL Code
面向一线运维人员提供专业严谨、经验证的应急响应操作说明sop
AVL Code 执行 → 你会看到
派 assess 子 Agent 独立评审 → 实际抓 php.net / nodejs.org 公告逐条比对
→ 三件交付物全部实跑:PyMuPDF 查 PDF、脚本跑 --help / --dry-run / 默认扫描 / --baseline、解析 SOP 的 JS 与自包含性
→ 结论 0 阻塞,但挑出 3 处 SOP 与官方不符:CVE-2026-106070 / 106071 应为仅 26.x,CVE-2026-106072 漏了 22.x
→ 指出一页纸把“无需认证”泛化到了 Node.js,“利用方法已公开流传”强于事实源
→ 定点修复:SOP 改 3 行发布线 + 补缓解项 + 修目录锚点;一页纸与信息图改措辞后重新渲染;脚本把基线比对拆出“新增/回归”与“探测退化”
→ 脚本修复子 Agent 中途网关 504 断掉 → 主 Agent 接手改逻辑,并补掉自己引入的 4 空格缩进错误
→ 复验:PDF 单页无溢出、PDF 文本中新措辞命中且旧措辞消失、compare_baseline 三个分支单测通过

评审不是签字:结论写成“0 阻塞、3 处不一致”,每处指到行号和官方原文;改完再跑同一套检查,才算收工。

亲自检测

下载会话 .zsession 导入工作区可回放完整过程,或按顺序粘贴以下指令(把事件链接换成你手上的漏洞通告):

› 我是某单位的网络安全管理者,需要针对刚刚<事件公告链接> 发生的PHP及node.js重大漏洞这一事件进行应急响应。我需要完成三件事情。第一向单位管理者(非网络安全专业)简洁易懂、清晰明了的同步事件的危害程度、紧迫程度以争取在内部发起重大应急响应的支持,以单独的一页纸+单独的一张图方式;第二需要输出针对事件的面向一线运维人员提供专业严谨、经验证的应急响应操作说明sop,以指导开展修补工作,以html页面方式(要求页面中具备搜索和索引功能);第三需要输出一个配套的检测检查工具,以支撑运维人员在不了解系统软件供应链组成的情况下发现存在的受影响版本,支撑运维人员修复漏洞后的复核工作,要求以python脚本方式。以上先做规划,找我确认后再动手。
› 1、一页纸用pdf格式,且不要纯文字
› 2、脚本平台范围覆盖linux和windows
› 3、不纳入证书事件
  • 第 1 步:<事件公告链接> 换成你手上的漏洞通告原文;三类交付物的受众与载体按你的实际情况改。
  • 第 2 步:三条约束是可替换的口径——要 Word 或 PPT、只覆盖 Linux、要把证书事件单列,都写在这三行里。
  • 第 3 步:一页纸与信息图要出 PDF,先让它探测本机的 HTML→PDF 工具链(本次为 weasyprint 69.0 + Noto CJK),再按可用路径渲染。
  • 第 4 步:按验收口径核对交付物——PDF 单页无溢出、SOP 断网可开且搜索与目录可用、脚本 --dry-run 与实扫的退出码符合预期。

下一个问题: 检测脚本已经能把存量版本翻出来了——怎么把它接进镜像构建流水线,让未升级的 PHP / Node.js 在出厂前就被拦住?