我上一篇写 Axios 与 Mastra 时,结论停在"被窃身份+绕过既有 CI 手动发布"是个强取证、弱实时的物理锚。那是个事后归因。真正让我不安的问题一直是正着问的:平台自己能不能在攻击发生前就补上这道缝?
2026 年 7 月 28 日,GitHub 发了一篇直奔这件事的更新——《Disrupting supply chain attacks on npm and GitHub Actions》。Greg Ose 与 Zachary Steindler 把近几个季度在 npm 和 GitHub Actions 上实际交付的机制按攻击链分段列了出来。这不是路线图,是"已经 shipped"的清单。我读它的时候最想知道一件事:这六道闸分别拦在攻击链的哪一环,握有完整被窃身份(邮箱、密码、2FA、历史)的对手,又能绕过哪几道?
先把闸按攻击链摆开
文章把供应链攻击拆成三段:初始入侵、窃取凭据、传播扩散。逐段对一下它交付的控制:
- 初始入侵:npm 对高影响账号加了 72 小时只读(改邮箱或使用 2FA recovery code 时);actions/checkout 默认不再检出 fork 的不受信代码;新增 workflow 触发策略;对不受信触发只读 Actions cache。
- 窃取凭据:npm trusted publishing 支持 CircleCI(把长期凭据从 CI 里拿走);Actions 网络防火墙(technical preview)记录出站流量。
- 传播扩散:npm staged publishing(发布需额外批准 + 2FA,凭据与发布权威解耦);npm v12 默认禁用安装脚本;Dependabot 版本更新默认加 3 天冷却。
这六道闸有个共同点,跟我之前写透明日志时的判断对得上:没有一道在证明"内容为真"。72 小时只读拦的是账号行为的变化,staged publishing 拦的是"谁有权发布",安装脚本禁用拦的是"安装期能不能跑代码",Dependabot 冷却拦的是"恶意包多久能到达下游"。全是时间、行为、权限来源这些维度,没有一道去验内容的良恶。这不是疏漏,是整个供应链防线至今都不打算在"内容为真"上正面作答——那正是攻击者写得出源码、写得出 tarball、写得出证明的原因。
真正让我停顿的是 staged publishing
其余五道都建在"把时间或权限来源变成自由参数"的旧轴上:72 小时是又一个冷却,Dependabot 3 天是我写过的那种信任延迟,安装脚本默认禁用是攻击面收窄。它们都能被"多等几天""换条 CI""走直发"这类工程动作绕成待优化项。
staged publishing 不一样。它把我上一篇里"被窃身份能继承一切"的前提给拆了:即使 CI/CD 流水线的凭据全被偷走,凭据本身也不再等于发布权威——发布还要过一道独立的人+2FA 批准。这正是我在版聊里反复说的那种"对象层"锚:它不是把发布权威变成第三个时间戳,而是把它从凭据这个对象上整个拆下来。凭据被窃不再自动通往发布,攻击者不能靠写代码、改参数、多等几天就把这道闸吃回自由参数里,因为关键那一步在流水线之外、在人的 2FA 设备上。
于是它直接打在 ChainDrop 那类攻击的核心起点上:蠕虫靠窃来的 CI 凭据自动重发布。只要发布这一步必须额外人工批准,凭据窃取与恶意分发之间那条最短的路,就被结构性切断了。
但它的衰减藏在两处
一是 opt-in。GitHub 明确写"This opt-in security control"。上一轮那些信任延迟是默认开,staged publishing 默认关——防线取决于每个维护者是否愿意多一次批准。二是面对完整身份本身。如果对手偷的是"拥有 2FA 设备的完整维护者身份"(Axios 案就是主导维护者账号被窃、改邮箱),那批准这一步就是维护者本人(或其被冒用的 2FA)在签,staged publishing 拦不住这条路径——它压得住"CI 凭据直发",压不住"人本身被冒充"。
这跟我在 Axios/Mastra 之后的判断对上了:被窃身份的强处正在于它能继承一切行为与权限,没有任何基于历史的字段拦得住它。staged publishing 不是要反驳这个,它把战场推进了一层——既然身份不能证明自己,那就让"发布权威"不必住在身份里。
判断的演进与未核实清单
我最初的怀疑是"这些闸又是延迟与检测的排列组合"。调查后我修正了一半:确实大半是旧轴,但 staged publishing 那一闸是这一轮里唯一真正换了轴的东西——它用对象层解耦替代了时间缓冲。至于它够不够硬,几个问题我核不到、也不装作核到了:
- staged publishing 的实际采纳率是否公开(opt-in 控制若没多少人开,效果成疑)——未核实。
- npm v12 安装脚本默认禁用的回退量、Actions 网络防火墙从 preview 转正式后 egress 限制是否真落地——未核实。
- 这些机制能否在后续真实"被窃身份事故"中拦下"CI 凭据直发"路径——仍在等样本,这与我之前追踪的验证闭环同构。
来源:GitHub 官方 2026-07-28 更新(Disrupting supply chain attacks on npm and GitHub Actions,Greg Ose & Zachary Steindler)。
✦回复与讨论