对象:人手不多、同时运维多个 Web 应用(框架混用),想把依赖库的漏洞(CVE)处置「认真彻底地修一次」的人。这里不讲攻击手法,只讲修好、让它不会消失、并持续监控为止的实务。容易成为导火索的事故示例,可参考 放任已公开的RCE导致被恶意刷费的经历。
本站的视角:越小的团队越能靠『两个机制』守住
人手少的团队,真正管用的不是花哨的工具,而是两条纪律。①自动的变化检测(只对新增的漏洞报警)②local→push→deploy(生产端只接收,不编辑)。本站也是同样的思路,把依赖审计(pnpm audit)放在每次部署前+每日 cron 里跑,向生产端则只用 push-to-deploy 来分发。不把它当成一次性的修复,而是设置好持续运转的告警,这是成本最低、最能长久坚持的做法。
先确定「完成」的4个条件
这样可以避免过早地说「搞定了」。先约定好:在这四点齐备之前都算未完成。
① 扫描
用数字掌握现状
② 修复
从源头修复非dev的严重/高危
③ 隔离/移交
修不了·孤立的要明示
④ 监控
加上每日变化检测
① 扫描:数清现在有什么
首先,用机器掌握「哪里有什么」。手动的不定期检查一定会中断。
自动探索锁文件并扫描
composer.lock / package-lock.json / pnpm-lock.yaml,每天用 OSS 扫描器(osv-scanner 或 pnpm audit)跑一遍。只是读锁文件,负载极轻。要知道严重度不是『一个数字』就能定
噪声不是『无视』而是『有依据地排除』
② 修复:更新存在漏洞的版本本身
掩盖症状的临时措施和修复真正的原因是两件不同的工作。两者都做了才算结束。
只掩盖症状(原因仍在)
- 用反向代理只挡掉「看起来像那样」的请求
- 因为症状停了就以为「处置完成」
- 脆弱的依赖原封不动=RCE等仍然可以被利用
修复原因(正确)
- 把脆弱的依赖更新到修复版
- 更新后,用日志确认征兆是否消失
- 把临时措施和真正的修复当作两件事都做
跨大版本要『在推上生产前先构建验证』
和打补丁不同,跨大版本(框架14→15、UI工具4→6 等)会伴随破坏性变更。不加确认就升级,导致生产构建失败,服务就会停掉。把改完的源码放到与生产相同的运行时(同样 Node/PHP 版本的容器)里,等构建/类型检查完全通过后再 push。失败的报错要一个一个解决(同步→异步化的 codemod、CSS 的多行 class、类型命名空间被废弃 等)。若采用旧容器仍在运行的结构,失败时也能不停机地回切。
确认下一次部署不会撤销修复
内容哪怕100分,只要下一次部署就被覆盖,也是0分。这是最常见的错误。
不要在生产的工作树里直接commit
务必统一为 local→push→deploy 的单向流动
不要把 HTTP 200 当成『正常』
curl | grep)、错误日志里是否出现新条目、连依赖 DB 和带参数的动态路由都要走一遍。由于缓存可能让生效变慢,要隔一段时间或清缓存后再看。③ 隔离/移交:把修不了的东西写下来
不一定所有问题都能马上修好。诀窍在于:对修不了的、归属他人管辖的、已经不用的,不要含糊其辞。
孤立·EOL 代码要『在删除前先隔离』
先确定确实无人引用,再动手
修不了/他人管辖的要明示移交
④ 监控:加上每日变化检测
走到这一步,最后放上告警机制。没有它,就算辛苦修好了,也察觉不到复发。
不是『把全部每天都报』而是『增加了才报』
把扫描结果与上次取差分(state file)比较,只在出现新增的严重/高危时才通知。每天都收到相同内容,很快就会被无视(告警疲劳)。通知汇总成一封邮件(新增·已解决·现状),用 cron 每日跑。哪怕是共享服务器,靠一个扫描器二进制+cron 也足够运转(负载是数毫秒量级·搭配 nice 就更稳妥)。
盘点时一并发现的 API key 与 SSH 密钥
在彻底修复 CVE 的过程中,常常会连依赖以外的问题一起被发现。常见的有两个:遗忘在公开目录里的秘密文件(webroot 里放着旧 token,若源自共用模板就所有站点都有同一个问题),以及交给可能被入侵的临时环境的 root 密钥。两者都是会造成「一处泄露就全盘皆失」的典型,所以要在和 CVE 处置相同的盘点时机一并检查(这两个各自都值得单独深挖)。秘密的基础可参考 秘密的安全保管 和 最低限度检查清单。
接下来读
- CVE-2026-111793 Openwave:评分低却被列入 KEV
- 示例(每月补丁日):SAP Security Patch Day,2026年11月(四个 CVSS 10.0 漏洞)
- 真实案例:CVE-2026-123551:OpenAM 会话令牌泄露(更新加撤销会话)
- 示例:Jenkins 安全公告(2026 年 10 月 28 日,15 个问题)
- 判断:先修哪个 CVE?CVSS、EPSS、KEV 各自衡量什么
- 依赖监控:osv-scanner 的引入与用法 / 不落后于 CVE 的机制
- 事故:放任已公开的RCE导致被恶意刷费的经历
- 运维:生产端只接收/自建 Git vs GitHub
- 基础:安全最低限度检查清单
- 按模式防御:文件上传漏洞——从设计上防止 Web Shell / RCE
- 事故:Capcom 勒索软件事件(2020)(一台被放任的旧 VPN 设备成为入口)
- 工具:CVE / KEV 查询(在一个页面查看 CVSS、EPSS 与是否正在被利用)