TanStack 遭 NPM 供应链攻击:42个包84个版本被注入恶意代码,三重漏洞链详解

事件概述

2026年5月11日,流行的 JavaScript 生态系统 TanStack(React Query、React Table、TanStack Router 等库的维护者)遭遇了一次精心策划的 NPM 供应链攻击。攻击者利用 GitHub Actions 缓存投毒、pull_request_target 工作流漏洞和 OIDC 令牌内存提取的三重漏洞链,成功向 NPM 发布了 42 个包的 84 个恶意版本

这次攻击之所以引起广泛关注,不仅因为 TanStack 是前端生态的核心依赖,更因为它展示了现代 CI/CD 供应链攻击的复杂程度——三个漏洞单独都不足以完成攻击,但被巧妙地串联在一起。

攻击链详解:三步串联

第一步:pull_request_target 工作流漏洞

攻击者在 TanStack/router 仓库创建了一个看似正常的 PR(标题为”WIP: simplify history build”),利用 bundle-size.yml 工作流中使用的 pull_request_target 触发器。这个触发器会在 fork PR 上运行,但具有主仓库的权限上下文。

关键问题在于:actions/cache@v5 的 post-job 缓存保存操作不受 permissions: 配置限制,它使用 runner 内部令牌而非 workflow GITHUB_TOKEN。即使设置了 permissions: contents: read,缓存修改仍然可以进行。

第二步:GitHub Actions 缓存投毒

攻击者提交了一个恶意的 vite_setup.mjs 文件(约 30,000 行混淆 JS),在构建过程中将恶意数据写入 pnpm-store 目录,并使用与 release.yml 发布工作流完全匹配的缓存键。

当维护者合并其他正常 PR 触发 release.yml 时,GitHub Actions 自动恢复了被投毒的缓存——这是缓存机制的正常行为,却成了攻击的入口。

第三步:OIDC 令牌内存提取

release.yml 声明了 id-token: write 权限用于 NPM OIDC 可信发布。被投毒的缓存中包含攻击者控制的二进制文件,它通过 /proc/*/cmdline 定位 GitHub Actions Runner.Worker 进程,读取 /proc/<pid>/maps/proc/<pid>/mem 从内存中提取 OIDC 令牌,然后直接向 registry.npmjs.org 发送发布请求。

受影响范围

42 个 TanStack 包被发布恶意版本,每个包两个版本(间隔约 6 分钟)。恶意软件安装后会:

  • 窃取凭证:AWS IMDS/Secrets Manager、GCP 元数据、Kubernetes 服务账户令牌、Vault 令牌、~/.npmrc、GitHub 令牌、SSH 私钥
  • 外传数据:通过 Session/Oxen 加密信使网络(filev2.getsession.org)传输,端到端加密使得 IP/域名封锁成为唯一的网络层防御
  • 自我传播:枚举受害者维护的其他包,以相同方式注入并重新发布

已确认未受影响的包族包括:@tanstack/query*@tanstack/table*@tanstack/form*@tanstack/virtual*@tanstack/store@tanstack/start(元包)。

时间线

5月10日 17:16 UTC:攻击者创建 fork 仓库(重命名为 configuration 以规避 fork 列表搜索)

5月10日 23:29 UTC:提交恶意代码,使用伪造身份 claude <claude@users.noreply.github.com>

5月11日 10:49 UTC:PR 被提交,pull_request_target 自动运行

5月11日 11:29 UTC:1.1GB 投毒缓存被保存

5月11日 19:15 UTC:维护者合并正常 PR,触发 release.yml,恶意包被发布

5月11日 ~19:50 UTC:外部研究员 ashishkurmi(StepSecurity)发现并报告——距恶意发布仅约 20 分钟

5月11日 21:00 UTC:确认影响范围,所有恶意版本被标记为 deprecated

修复与加固措施

TanStack 团队在事后采取了以下措施:

  • 禁用发布流水线中的 pnpm 缓存
  • 清除所有 GitHub Actions 缓存条目
  • 将所有第三方 action 固定到 commit SHA(不再使用浮动标签)
  • 移除所有 pull_request_target,替换为 workflow_run + 沙箱化 pull_request 工件
  • 强制非短信 2FA(npm 和 GitHub)
  • 升级到 pnpm 11
  • 引入 zizmor(GitHub Actions 工作流静态分析器)作为必需的 PR 检查
  • .github 文件夹添加 CODEOWNERS
  • 考虑关闭外部贡献者 PR,改为”欢迎 Issue 和 Discussion,PR 仅限邀请”

对站长和开发者的启示

1. 审计你的 GitHub Actions 工作流:检查是否使用了 pull_request_target,这是已知的危险模式。

2. 固定依赖版本和 Action SHA:不要使用 @main@v6 等浮动引用。

3. 关注依赖安全告警:如果你的项目依赖 TanStack,务必检查是否使用了受影响版本。

4. 使用 npm audit 定期检查:供应链攻击越来越复杂,自动化安全检查必不可少。

5. 了解你的 CI/CD 安全边界:缓存投毒、OIDC 令牌提取等高级攻击手法正在变得越来越普遍。

本文参考来源:

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
相关推荐
<p>GitHub本周最火的项目之一,TradingAgents在短短时间内获得了超过7万星标,成为多Agent AI应用领域的标杆项目。这个基于大语言模型的多Agent金融交易框架,让”AI炒股”从概念走向了可实验的开源工具。</p>

<h2>项目简介</h2>

<p>TradingAgents是一个开源的多Agent金融交易分析框架,核心思路是让多个AI Agent各司其职,协同完成金融市场的分析和交易决策。项目地址:<a href=GitHub – TauricResearch/TradingAgents

架构设计

TradingAgents的设计借鉴了真实金融交易团队的分工模式,将不同职责分配给不同的Agent:

  • 分析师Agent:负责分析市场数据、财报、新闻等信息,产出分析报告。
  • 研究员Agent:深入研究特定行业或公司,提供基本面分析。
  • 交易员Agent:根据分析结果制定交易策略和执行计划。
  • 风控Agent:评估交易风险,设置止损和仓位控制。
  • 决策Agent:综合各方意见,做出最终交易决策。

这种多Agent协作的模式,模拟了真实对冲基金的决策流程。每个Agent可以使用不同的LLM模型,甚至可以使用同一模型的不同温度参数来产生多样化的观点。

使用场景

学术研究

TradingAgents是研究多Agent系统在金融领域应用的优秀平台。研究人员可以修改Agent的提示词、调整协作机制、测试不同的决策算法。

策略回测

框架支持接入历史市场数据,可以用来回测AI交易策略的表现。这对于量化交易团队评估AI辅助决策的价值很有帮助。

学习和教育

对于想了解AI在金融领域应用的开发者,TradingAgents是一个很好的学习项目。代码结构清晰,文档完善,适合上手研究。

安装和运行

# 克隆项目
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents

# 安装依赖
pip install -r requirements.txt

# 配置API密钥
cp .env.example .env
# 编辑 .env 文件,填入 OpenAI API key

重要风险提示

⚠️ 以下几点需要特别注意:

  • 不要用真金白银:TradingAgents是一个研究和实验框架,不是成熟的交易系统。绝对不要用它来做实盘交易。
  • AI不是万能的:金融市场受到无数因素影响,AI模型无法预测黑天鹅事件、政策变化、市场情绪等非理性因素。
  • 回测不等于实盘:在历史数据上表现好的策略,在真实交易中可能完全失败(过拟合问题)。
  • 合规风险:在某些司法管辖区,使用AI进行自动化交易可能受到监管限制。

同类项目参考

如果你对AI+金融感兴趣,还可以关注以下项目:

  • FinRL:深度强化学习金融交易框架
  • Qlib:微软开源的量化投资平台
  • GPT-Financial-Analyst:基于GPT的财务分析工具

来源:

-枫选">

GitHub本周最火的项目之一,TradingAgents在短短时间内获得了超过7万星标,成为多Agent AI应用领域的标杆项目。这个基于大语言模型的多Agent金融交易框架,让”AI炒股”从概念走向了可实验的开源工具。

项目简介

TradingAgents是一个开源的多Agent金融交易分析框架,核心思路是让多个AI Agent各司其职,协同完成金融市场的分析和交易决策。项目地址:GitHub – TauricResearch/TradingAgents

架构设计

TradingAgents的设计借鉴了真实金融交易团队的分工模式,将不同职责分配给不同的Agent:

  • 分析师Agent:负责分析市场数据、财报、新闻等信息,产出分析报告。
  • 研究员Agent:深入研究特定行业或公司,提供基本面分析。
  • 交易员Agent:根据分析结果制定交易策略和执行计划。
  • 风控Agent:评估交易风险,设置止损和仓位控制。
  • 决策Agent:综合各方意见,做出最终交易决策。

这种多Agent协作的模式,模拟了真实对冲基金的决策流程。每个Agent可以使用不同的LLM模型,甚至可以使用同一模型的不同温度参数来产生多样化的观点。

使用场景

学术研究

TradingAgents是研究多Agent系统在金融领域应用的优秀平台。研究人员可以修改Agent的提示词、调整协作机制、测试不同的决策算法。

策略回测

框架支持接入历史市场数据,可以用来回测AI交易策略的表现。这对于量化交易团队评估AI辅助决策的价值很有帮助。

学习和教育

对于想了解AI在金融领域应用的开发者,TradingAgents是一个很好的学习项目。代码结构清晰,文档完善,适合上手研究。

安装和运行

# 克隆项目
git clone https://github.com/TauricResearch/TradingAgents.git
cd TradingAgents

# 安装依赖
pip install -r requirements.txt

# 配置API密钥
cp .env.example .env
# 编辑 .env 文件,填入 OpenAI API key

重要风险提示

⚠️ 以下几点需要特别注意:

  • 不要用真金白银:TradingAgents是一个研究和实验框架,不是成熟的交易系统。绝对不要用它来做实盘交易。
  • AI不是万能的:金融市场受到无数因素影响,AI模型无法预测黑天鹅事件、政策变化、市场情绪等非理性因素。
  • 回测不等于实盘:在历史数据上表现好的策略,在真实交易中可能完全失败(过拟合问题)。
  • 合规风险:在某些司法管辖区,使用AI进行自动化交易可能受到监管限制。

同类项目参考

如果你对AI+金融感兴趣,还可以关注以下项目:

  • FinRL:深度强化学习金融交易框架
  • Qlib:微软开源的量化投资平台
  • GPT-Financial-Analyst:基于GPT的财务分析工具

来源:

GitHub本周最火的项目之一,TradingAgents在短短时间内获得了超过7万星标,成为多Agent AI应...

5天前 50
评论 抢沙发

请登录后发表评论

    暂无评论内容