2026年5月13日,OpenAI官方发布安全公告,回应其遭受TanStack npm供应链攻击一事。这家全球领先的AI公司确认,两台员工设备在此次攻击中受到影响,但未发现用户数据泄露、生产系统入侵或软件被篡改的证据。尽管如此,出于谨慎考虑,OpenAI正在全面轮换其代码签名证书,并要求所有macOS用户在2026年6月12日前更新应用至最新版本。这是继今年3月Axios供应链攻击后,OpenAI在不到三个月内遭遇的第二起重大开源安全事件,再次将开源供应链安全问题推至风口浪尖。

事件概述:Mini Shai-Hulud蠕虫攻击波及OpenAI
此次安全事件源于2026年5月11日发生的TanStack npm供应链攻击。TanStack是一套广受欢迎的开源React工具库集合,包括React Router、TanStack Query、TanStack Table等多个核心项目,每周下载量达数千万次。攻击者利用GitHub Actions工作流中的配置缺陷,成功劫持了TanStack的发布管道,在6分钟内发布了84个恶意版本,波及42个@tanstack/*命名空间下的npm包。
OpenAI在公告中披露,该公司有两台员工设备在此次攻击中受到影响。这些设备位于OpenAI的企业环境中,能够访问部分内部源代码仓库。攻击者通过恶意npm包获取了这些仓库中的凭证材料,包括用于iOS、macOS、Windows和Android平台的代码签名证书。值得注意的是,OpenAI强调被泄露的凭证材料"有限",且未观察到用户数据、知识产权受到影响,也未发现凭证被滥用或攻击者进行后续访问的证据。
攻击技术解析:三重漏洞链式利用
根据TanStack官方发布的事后分析报告,此次攻击展示了极高的技术 sophistication。攻击者成功串联利用了三个独立漏洞,实现了对CI/CD管道的完全控制。
第一重:pull_request_target "Pwn Request"模式
攻击始于2026年5月10日,攻击者创建了TanStack/router的分支仓库,并提交了包含恶意代码的PR。TanStack的bundle-size.yml工作流使用了pull_request_target触发器,该触发器在基础仓库的安全上下文中运行,但却检出并执行了来自fork的合并代码。这种配置缺陷最早由安全研究员Adnan Khan在2024年5月记录,被称为"Pwn Request"攻击模式。
第二重:GitHub Actions缓存投毒
恶意代码并未立即执行数据窃取,而是将payload注入到pnpm store目录中。当benchmark-pr作业结束时,actions/cache@v5自动将已被投毒的缓存保存到GitHub Actions缓存中。由于缓存作用域是按仓库划分的,且pull_request_target运行使用基础仓库的缓存作用域,这意味着来自fork的PR可以污染将被生产工作流使用的缓存条目。
第三重:运行时OIDC令牌提取
当TanStack的release.yml工作流在后续推送中运行时,它从被投毒的缓存中恢复了恶意二进制文件。这些二进制文件在构建阶段被执行,利用工作流声明的id-token: write权限,从GitHub Actions runner的内存中提取OIDC令牌,然后直接向registry.npmjs.org发送POST请求发布恶意包。整个过程使用了TanStack合法的OIDC可信发布身份,使得这些恶意包在npm registry中看起来完全合法。
OpenAI的应急响应与防护措施
OpenAI在发现恶意活动后迅速采取了多项措施:
即时遏制措施:隔离受影响系统和身份、撤销用户会话、轮换受影响仓库的所有凭证、暂时限制代码部署工作流,并对用户和凭证行为进行彻底审查。
证书轮换计划:由于受影响的源代码仓库包含产品签名证书,OpenAI正在轮换代码签名证书。macOS用户需在2026年6月12日前更新ChatGPT Desktop、Codex App、Codex CLI和Atlas等应用至最新版本。Windows和iOS用户无需采取任何行动。
平台协调:OpenAI正在与平台提供商协调,阻止使用受影响证书进行新的公证,并审查所有使用先前证书进行的软件公证,以确认没有发生意外的软件签名。
安全加固:继Axios事件后,OpenAI已加速部署特定安全控制和技术以减少供应链攻击影响。此次事件发生在这些控制的分阶段部署期间,两台受影响的员工设备尚未获得可防止下载新观察到的恶意包的更新配置。
蠕虫传播与次生影响
TanStack攻击并非孤立事件,而是被称为"Mini Shai-Hulud"的供应链蠕虫攻击系列的最新一波。该蠕虫具有自我传播能力:在安装阶段枚举受害者维护的其他包,并通过相同的注入机制重新发布它们。这种机制导致攻击迅速扩散至多个组织。
根据Snyk的安全报告,次生受害者包括:
- Mistral AI:@mistralai命名空间下的多个包受到影响
- UiPath:40多个包被波及
- DraftLab/DraftAuth:认证和数据库相关包
- Squawk:19个航空数据包
- 其他:safe-action、cmux-agent-mcp、nextmove-mcp等
截至5月11日当日,Snyk安全数据库已记录至少170个受影响包。值得注意的是,这是首个携带有效SLSA(Supply-chain Levels for Software Artifacts)来源证明的恶意npm包案例。SLSA来源证明是由Sigstore生成的加密证书,用于验证包是否来自可信来源。由于蠕虫劫持了合法的构建管道本身,Sigstore正确验证了构建过程,但SLSA并不能保证被构建代码的安全性。
业界反应与安全建议
CISA警报:美国网络安全与基础设施安全局(CISA)已发布供应链攻击警报,建议所有使用GitHub Actions的组织审查其工作流配置。
开发者行动指南:
- 如果在2026年5月11日安装了任何@tanstack/*版本,应将安装主机视为可能已受感染
- 轮换所有可从该主机访问的凭证:AWS、GCP、Kubernetes、Vault、GitHub、npm、SSH密钥
- 检查~/.npmrc、环境变量、gh CLI配置中的敏感信息
- 审查GitHub Actions工作流,确保使用固定commit hash而非浮动标签
- 配置minimumReleaseAge等包管理器控制措施
供应链安全最佳实践:
- 避免在pull_request_target工作流中检出并执行fork代码
- 使用actions/cache时理解其安全边界和作用域规则
- 为敏感工作流配置最小权限原则,谨慎使用id-token: write权限
- 实施依赖项固定和自动化漏洞扫描
- 建立软件物料清单(SBOM)以追踪依赖关系
OpenAI在公告中指出,此次事件反映了威胁格局的更广泛转变:攻击者越来越多地将目标对准共享软件依赖和开发工具,而非单一公司。现代软件建立在深度互联的开源库、包管理器和CI/CD基础设施生态系统之上,这意味着上游引入的漏洞可以快速、广泛地跨组织传播。
对于OpenAI而言,三个月内遭遇两起重大供应链攻击(Axios和TanStack)敲响了警钟。尽管公司声称正在"继续投资于验证第三方组件完整性和来源的控制措施",但攻击者显然已经找到了利用开源生态固有信任模型的有效方法。
这次事件也凸显了开源维护者面临的巨大压力。TanStack作为一个由志愿者维护的开源项目,其安全事件影响了全球数以万计的开发者。如何在资源有限的情况下保障供应链安全,已成为整个开源社区必须面对的系统性挑战。
参考来源:
- OpenAI官方公告: https://openai.com/index/our-response-to-the-tanstack-npm-supply-chain-attack/
- TanStack事后分析报告: https://tanstack.com/blog/npm-supply-chain-compromise-postmortem
- 路透社报道: https://www.reuters.com/business/openai-says-no-user-data-breached-after-security-issue-with-open-source-library-2026-05-14/
- Snyk安全分析: https://snyk.io/blog/tanstack-npm-packages-compromised/
- StepSecurity技术分析: https://www.stepsecurity.io/blog/mini-shai-hulud-is-back-a-self-spreading-supply-chain-attack-hits-the-npm-ecosystem
- GitHub Security Advisory: https://github.com/TanStack/router/security/advisories/GHSA-g7cv-rxg3-hmpx