AI News HubLIVE
站内改写

大规模NPM供应链攻击波及TanStack、Mistral AI及170个软件包

2026年5月12日,安全团队SafeDep披露了一起针对npm和PyPI生态系统的供应链攻击,超过170个软件包被植入恶意代码,其中包括TanStack和Mistral AI的热门库。攻击者通过篡改软件包构建流程,植入依赖下载器并利用Session协议进行凭证窃取。此外,恶意载荷还包含IDE和AI代理投毒机制,能够自我复制并自动提交恶意配置文件到受害者的仓库中,形成持续感染循环。

文章情报

工程师中级

要点

  • 攻击波及TanStack、Mistral AI等170多个软件包,通过篡改package.json和添加恶意脚本来实现。
  • 恶意载荷使用AES加密和Bun运行时执行,具备模块化凭证窃取框架,专门针对AWS、HashiCorp Vault、GitHub令牌等。
  • 采用Session协议和Oxen网络进行数据外传,具有动态节点路由,难以通过固定域名进行拦截。
  • 攻击者利用IDE配置文件和GitHub GraphQL API自动提交恶意文件到分支,使得开发者一旦拉取代码即被感染。

为什么重要

这条新闻值得关注,因为攻击波及TanStack、Mistral AI等170多个软件包,通过篡改package.json和添加恶意脚本来实现。

技术影响

可能影响模型选型、推理成本、产品能力和评测基准。

2026年5月12日,安全研究团队SafeDep发布报告,揭露了一起针对npm和PyPI软件包生态系统的重大供应链攻击。该攻击共影响超过170个软件包,其中包括前端框架TanStack和AI公司Mistral AI的官方包。攻击者通过多种手段实现恶意代码注入,不仅窃取凭证,还试图通过污染开发者环境中的IDE和AI代理设置来扩大攻击范围。

攻击者篡改了软件包的构建脚本,例如在Mistral AI的包中,他们将原有的构建命令替换为一个预安装钩子(preinstall hook),并添加了两个恶意文件:setup.mjs和router_init.js。setup.mjs负责下载特定平台的Bun运行时,并执行经过高度混淆的router_init.js负载。该负载采用AES加密和字符串混淆技术,使得静态分析变得困难。值得注意的是,由于攻击者复用了针对TanStack包的模板,导致Mistral包中的文件命名不一致(实际文件为router_init.js,而setup.mjs中引用的是tanstack_runner.js),这导致了执行错误。

而对于TanStack包,攻击者采用了更为隐蔽的方式。他们利用npm的optionalDependencies字段,引入了一个指向GitHub仓库中恶意提交的依赖。该依赖在安装时会触发prepare脚本,直接执行恶意负载,并且通过exit 1强制脚本失败以隐藏后续输出。此外,攻击者还获得了TanStack GitHub仓库的写权限,表明其GitHub凭证和npm发布令牌均已被攻陷。

router_init.js负载是一个2.2MB的单行JavaScript文件,内部实现了模块化的凭证窃取框架。该框架包含多个专门针对不同目标的服务类,例如AWS凭证(通过IMDS端点)、HashiCorp Vault令牌、GitHub Actions令牌以及npm令牌等。负载利用正则表达式匹配并收集各种令牌,并通过嵌入的Session客户端将数据外传。Session是一个基于Oxen网络的开源加密通信协议,支持洋葱路由和端到端加密。负载通过连接Session的种子节点获取服务节点列表,然后通过动态解析的节点将加密消息路由到攻击者的Session ID。由于路由信息是动态获取的,传统的基于固定域名或IP的拦截策略难以生效。

除了凭证窃取,该负载还具有自我复制和传播的能力。它定义了一系列文件映射,包括VS Code和Claude Code的配置文件,以及一个自我副本。当负载在受害者的CI/CD环境(如GitHub Actions)中运行时,它会读取环境变量GITHUB_REPOSITORY,并利用GitHub的GraphQL API查询当前仓库的分支。然后,它会过滤掉主分支(main、master等),选择功能分支作为目标,并通过createCommitOnBranch变异向这些分支提交恶意配置文件。这些配置文件会配置IDE或AI代理在项目加载时执行setup.mjs,从而形成完整的感染循环:任何开发者克隆或拉取被污染的分支后,打开项目便会触发负载,进而窃取其凭证并继续传播。

SafeDep团队在报告发布后已向npm和GitHub安全团队报告了相关情况,目前恶意版本已被下架。然而,由于攻击者使用了Session协议和GitHub的内置功能,这种攻击的追踪和清除难度较高。建议开发者立即检查项目依赖中@tanstack/router版本是否在1.169.5以及@mistralai/mistral版本是否在0.0.297范围内,并轮换所有可能暴露的令牌。此外,建议加强GitHub账户的多因素认证,并定期审计GitHub仓库的提交记录。