73个微软包暗藏窃密代码,AI Agent一打开就中招

两周内第二次,微软相关NPM包被植入凭证窃取器,73个仓库被禁用。这次的攻击者瞄准的是AI编码代理——恶意代码只在Agent解析包时才触发,传统人工审查几乎无感。
两周内的第二次
距离上一轮 Microsoft 相关 NPM 包被 "Shai-Hulud" 蠕虫感染才过去不到两周,6 月 7 日,Ars Technica 披露:又有 73 个挂着微软名号的 NPM 包被植入凭证窃取器,受影响仓库已被批量禁用。
这次比上一次更令人不安的地方在于触发条件——恶意代码不是在开发者手动 npm install 时跑,而是在 AI Agent 打开这个包的瞬间 自我复制并启动。这意味着,那些把 Cursor、Claude Code、Copilot Workspace 当成日常生产力的团队,可能在自己什么都没干的情况下就把 GitHub Token、Azure 凭证、npm 发布密钥一股脑送了出去。

这波攻击长什么样
根据安全研究人员的描述,攻击链大致是这样:
- 入口:攻击者拿到了过往 Shai-Hulud 行动中持久化的凭证,重新进入了 Microsoft / Azure 旗下的 GitHub 组织,重点是
durabletask这条生态线(Azure Durable Functions 用的就是它)。 - 植入:在 73 个包里塞进了 5 个看似无害的配置文件,被研究者称为 "Miasma" 的 worm 模块。
- 触发:恶意 payload 的入口点不是
postinstall脚本,而是包元数据中 AI 编码代理在 "读取包描述/示例代码" 时会解析的字段。换句话说,agent 一旦把这个包加载进上下文,self-replicating stealer 就开始跑。 - 横向扩散:偷到的 npm token 立刻被用来发布更多被污染版本,蠕虫式扩散。
这套路子比起传统的 typosquatting(仿冒包名)高明得多。这些包本身就是真包、官方组织发布、下载量真实,开发者没有任何动机去怀疑。
为什么 AI Agent 成了完美载体
过去聊供应链投毒,大家关心的是 install 阶段的脚本执行。现在的问题是 AI Agent 的攻击面要大得多:
- 它会主动 fetch。你让 agent "帮我看看 durabletask 这个包怎么用",它会去拉 README、拉 example、拉源码进上下文。攻击者只要在这些字段里塞 prompt injection,agent 就可能被劫持。
- 它有凭证。能跑
npm publish、能 push 到 GitHub、能调 Azure CLI 的 agent,等于把整个开发环境的钥匙串都挂在了 LLM 输出的下游。 - 它没人盯着。Agentic 工作流的卖点就是 "无人值守",可恰恰因为没人值守,恶意行为在被发现前能跑很久。
微软自己 AI Red Team 今年发的那篇《AI Agent 系统故障模式分类》里就专门点过这种新型威胁——记忆中毒、间接提示注入、控制流劫持。当时还停留在实验室 PoC,现在已经在生产环境真刀真枪打起来了。
与上一轮 Shai-Hulud 是不是同一伙
从代码指纹看,大概率是。Ars Technica 引用的研究人员指出,这次 73 个包用的 stealer 模块跟 9 月以来活跃的 Shai-Hulud 行动高度同源:
- 同样的 "避开俄语系统" 判断逻辑
- 同样对位于以色列、伊朗的部分系统会执行随机删除文件的破坏操作
- 同样的 C2 通信回调结构
差别在于,这一轮把触发条件换成了 "AI Agent 解析",明显是针对最近半年 agentic dev workflow 大规模普及做的迭代。攻击者也在跟着行业风口走。
受影响范围与应对
微软方面已经做的事:
- 禁用了涉事的 73 个仓库
- 撤销了相关 npm 发布权限
- 向 GitHub Security Advisory Database 提交了 CVE 条目
- 建议过去 30 天内通过 AI Agent 接触过
durabletask生态包的团队立即轮换所有云凭证
如果你是开发团队,短期内能做的事大致有几条:
- 凭证最小化:给 Agent 用的 token 不要直接用个人 PAT,至少要走 short-lived OIDC token。
- 网络出口管控:在 Agent 容器层面限制能往哪些域名发请求,stealer 类攻击对外联依赖很重。
- 包来源审查:即便是官方组织发布的包,也要看签名、看发布时间是否反常。这次的污染版本都是在原版发布几小时内 push 的 patch 版本。
- Agent 上下文隔离:让 Agent 读包文档时跑在沙箱里,不要直接共享主机的 keyring。
一个不太舒服的判断
NPM 生态的供应链问题不是新闻,但 "AI Agent 当跳板" 这条路径目前还没有成熟的防御范式。npm audit 查不出来——因为代码本身没有调用 child_process、没有读 .env,它只是返回一段字符串,由 LLM 决定要不要执行。这把球踢给了模型厂商和 Agent 框架开发者,而这一层目前几乎是裸奔的。
微软这次反应算快,但接下来几个月类似事件大概率会按月计发生。开发者得开始把 "AI Agent 可信边界" 当成跟 OS 权限一样严肃的事来设计了。
参考来源
- NPM 投毒让微软73个仓库被禁用,4月的供应链蠕虫病毒到现在还在扩散 - 知乎:中文社区对本轮事件的技术拆解与时间线梳理



