PyPI/npm 已公开披露的供应链事件复盘合辑(2018–2026)
面向蓝队与安全架构师的事后教训汇编。本文所有事件均已被生态平台修复并被业内多次复盘多年,全部资料来自 CISA 公告、GHSA、PyPI/npm 官方博客、Mandiant、Microsoft、Volexity、Krebs on Security、Schneier on Security 等公开权威源。本文不复述攻击代码、不提供 IOC 哈希、不给出 payload 字符串与命令行示例,只做防御视角的事件总结。
Lede(200 字摘要)
从 2018 年 event-stream 第一次让业界意识到「自愿转交维护权」可以是攻击向量,到 2025 年 9 月 Shai-Hulud 自传播蠕虫把单点 ATO 放大到生态级别,PyPI 与 npm 这两个语言包仓库经历了八年时间从「偶发恶意包」演进到「连续告警」的过程。其间 CISA 对 npm 生态破天荒地连续发布两次行业级告警(2025-03 tj-actions、2025-09 Shai-Hulud),PyPI 对 Ultralytics 出具事件分析专文,npm 推动维护者 2FA、OIDC 可信发布、删除经典 token 等一系列治理改革。本文按时间顺序重排公开披露的 12 类典型事件,对每件事按「公开披露概要 / 影响范围 / 防御方应对 / 留下的教训 / 公开来源」统一描述,把 8 年生态防御经验沉淀给企业蓝队、应急响应团队与 SCA 工具评估者,作为下一阶段架构治理的参考底稿。
时间轴速览
| 年份 | 事件名 | 一句话定性 |
|---|---|---|
| 2018-11 | event-stream | 自愿转交维护权后被植入针对 Copay 钱包的定向加密 payload |
| 2021-10 | ua-parser-js | 周下载 800 万包的维护者账户被劫持,CISA 罕见对单个 npm 包发警 |
| 2022-01 | colors.js / faker.js | 维护者本人主动破坏自家代码的 Protestware 事件 |
| 2022-05 | ctx (PyPI) + phpass | 维护者邮箱所属域名过期被抢注后接管账号 |
| 2022-12 | torchtriton(PyTorch nightly) | 经典依赖混淆,PyPI 公共名优先于私有 index 取包 |
| 2023-03 | 3CX 桌面应用 | 史上首例公开的「双重供应链」事件 |
| 2024-03 | XZ utils(关联) | 长达两年社工渗透换取共维护者权后引入 sshd 后门 |
| 2024-10 | Lottie Player | 维护者私人邮箱遭定向钓鱼,前端 CDN 化外溢到终端 |
| 2024-12 | Ultralytics YOLO | GitHub Actions pull_request_target 链路被滥用,PyPI 出具事件分析 |
| 2025-03 | tj-actions/changed-files | 通过 retag 把历史版本指向恶意 commit,CISA 发布 KEV 级告警 |
| 2025-08 | Nx s1ngularity | 首批被研判 LLM 协同攻击案例,被视为 9 月蠕虫前导 |
| 2025-09 | Shai-Hulud(v1)+ Great NPM Heist + chalk/debug | 自传播蠕虫与 20 亿周下载量级巨型节点 ATO 同月叠加 |
| 2025-12 | Shai-Hulud 2.0 | 执行点前移到 preinstall,CI 触发面扩大,破坏性 fallback |
| 2026-03~04 | axios / TeamPCP 12 天 5 起 / SAP worm | 朝鲜 Sapphire Sleet 归因,蠕虫化与 AI 基础设施定向并行 |
1. event-stream(2018-11)
公开披露概要
2018 年 11 月 20 日,GitHub 用户 Ayrton Sparling 在 event-stream 仓库提交 issue #116,质疑该包新近添加的 flatmap-stream 依赖含有可疑的加密代码。npm 安全团队在 2018-11-26 介入并下架受影响版本,npm 官方博客同日发布事件细节通告,明确说明原维护者 Dominic Tarr 此前已通过 GitHub 用户 right9ctrl 的「自愿接管请求」转让了 publish 权[1]。Snyk 与 Intrinsic 在事后陆续发布技术 post-mortem,确认整条潜伏期约 2.5 个月(2018-09-09 接管 → 2018-10-05 恶意依赖发布 → 2018-11-20 社区披露)[2]。
影响范围
event-stream 当年周下载约 200 万次,作为间接依赖被数千项目包含。攻击 payload 实际命中目标是 BitPay 旗下 Copay 钱包(5.0.2–5.1.0 版),仅在该构建上下文中解密——使用 Copay 的 npm 包 ID 作为 AES 解密 key,对其他下游静默不触发。Copay 在桌面端与移动端跨平台累计有数十万安装量,其中持有较高余额(≥100 BTC 或 ≥1000 BCH)的钱包是窃币目标[2][3]。
防御方的应对
- 平台层:npm 在公告中推动后续两项治理改进——一是逐步铺开高影响维护者强制 2FA,二是改进「权限转交」流程,引入接收方主动同意机制。
- 下游层:BitPay 在事件曝光后数日内发布 Copay 5.2.0+ 修复版本,并对潜在受害用户广播迁移指引。
- 学术界响应:东京大学等机构发表了系统化分析论文 A Systematic Analysis of the Event-Stream Incident,把这次事件作为后续供应链研究的基准案例[3]。
留下的教训
- 开源治理盲区:npm 不要求「实质控制人变更」KYC,社交工程成本极低。"维护无力"的求接管邮件成为后续多起类似攻击的剧本。
- 加密 + 目标定向(target-fence)payload 让普通静态扫描器无法触发,必须构建「上下文敏感」的动态分析。
- 测试 fixture 是绝佳藏匿点——攻击者把加密二进制隐藏在测试数据内,而典型 SCA 不会把
test/目录纳入扫描重点。 - 维护者切换是开源项目的常态,但下游对「维护者更替」无可视化告警;这一缺口直到多年后才由部分 SCA 厂商通过「maintainer change」字段补上。
公开来源
- npm 官方 post-mortem:https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident
- 学术系统化论文:https://es-incident.github.io/paper.html
- Snyk 详尽技术分析:https://snyk.io/blog/a-post-mortem-of-the-malicious-event-stream-backdoor/
2. ua-parser-js(2021-10)
公开披露概要
2021 年 10 月 22 日 12:15 GMT,恶意版本 0.7.29 出现在 npm;维护者 Faisal Salman 在数小时内(约 16:16–16:26 GMT)发现账号被劫持并主动下架,整个攻击窗口约 4 小时。同日,CISA 对单个 npm 包罕见地直接发布告警,体现该事件的影响级别已经溢出常规漏洞通告的范围[4]。Sonatype 当日发布详细的恶意行为分析[5],BleepingComputer 跟进事件流程[6],JetBrains 在 10-25 对 Kotlin/JS 用户发布缓解指引。
影响范围
ua-parser-js 当年周下载量在 800 万次以上,CrowdStrike、Mandiant 等厂商在事件后的客户公告中先后列出依赖该包的下游名单——Facebook、Microsoft、Apple、Reddit、IBM、Slack、Disney、Verizon、Yahoo、Box、HPE、Bitwarden、Salesforce 等多家头部厂商均直接或间接依赖该包[7]。Windows 受害者会被植入跨浏览器、邮件、FTP、IM、VPN 与 Windows 凭据的窃取木马;Linux 受害者被植入 XMRig 矿机。
防御方的应对
- 平台层:本次事件被普遍视作 npm 在 2022 年全面铺开「高影响维护者强制 2FA」与后续 token 治理改革的关键触发点。
- 企业层:受影响下游各自发布客户告警,CrowdStrike、Mandiant 等 EDR 厂商发布 IOC 与缓解配置。
- 生态层:CISA 把单个 npm 包列入告警,是 CISA 对开源仓库治理介入的早期信号。
留下的教训
- Account Takeover 几小时内即可造成跨大厂全行业波及——证明「维护者账户安全」事实上等同于「上游基础设施安全」。
- 即使包仓库快速下架,企业内网的私有 mirror、CDN 缓存、Dockerfile 锁定的 build 仍会拉取到坏版本数日。MTTD/MTTR 的瓶颈不在中央 registry,而在企业自身的镜像与构建链。
- 普通 2FA(TOTP)在 AitM 钓鱼面前并不可靠——这一教训直到 2024 年 LottieFiles 与 2025 年 chalk/debug 事件后才迫使生态走向 WebAuthn / passkey。
公开来源
- Snyk 漏洞数据库:https://security.snyk.io/vuln/SNYK-JS-UAPARSERJS-1766952
- Sonatype 分析:https://blog.sonatype.com/npm-project-used-by-millions-hijacked-in-supply-chain-attack
- Mandiant 综述:https://cloud.google.com/blog/topics/threat-intelligence/supply-chain-node-js
- CrowdStrike 客户公告:https://www.crowdstrike.com/en-us/blog/crowdstrike-customers-protected-from-compromised-npm-package-in-supply-chain-attack/
3. colors.js / faker.js(2022-01,Protestware)
公开披露概要
2022 年 1 月 4 日前后,开源作者 Marak Squires 主动向 colors.js 推送 v1.4.44-liberty-2,引入 ASCII 艺术 + 死循环导致所有引入此版本的应用控制台输出被破坏;同期作者把 faker.js 6.6.6 仓库清空发布,让所有依赖该包的项目构建中断[8]。GitHub 在 1 月 8 日前后暂停作者账号,npm 回滚到稳定版,社区随后 fork 出 @faker-js/faker 接管维护[9]。
影响范围
colors.js 周下载约 2300 万次,作为间接依赖出现在约 19,000 个其他 npm 包中;faker.js 周下载约 240 万、被 2500+ 包依赖。AWS Amplify CLI、PyTorch 元数据脚本等多个广泛使用的项目在事件期间均报错,下游服务可用性受到直接波及[8]。
防御方的应对
- 平台层:GitHub 暂停作者账号、npm 回滚 latest tag——但这一动作在社区引发对「作者代码删除权 / 版权归属 / 治理边界」的长期争论。
- 生态层:直接催生了
@faker-js/faker等社区接管 fork,并加速 OpenSSF、Tidelift 等关于「OSS 维护者商业支持」的讨论。 - 企业层:多家公司在事后正式把「可用性」写入对开源依赖的风险模型,建立内网镜像 + 版本 pin 作为标准防线。
留下的教训
- 暴露了 OSS 维护者激励机制问题:免费维护者可能会反扑,下游必须假设「可用性」是攻击面而非默认前提。
- SCA 角度上,版本号
1.4.44-liberty-2的非常规命名以及 commit message "very sorry but I am not able to continue" 是文本特征 + 异常版本号双信号可联动检测的线索。 - Protestware 模糊了「恶意」与「合法」的边界,传统恶意签名扫描无法覆盖,必须依赖行为差异(无故进入死循环、清空仓库、版本号语义异常)。
- 此事件让「维护者激励 + 治理」首次成为企业架构层议题,多年后由 OpenSSF Alpha-Omega、Sovereign Tech Fund 等资助计划尝试解决。
公开来源
- Sonatype:https://www.sonatype.com/blog/npm-libraries-colors-and-faker-sabotaged-in-protest-by-their-maintainer-what-to-do-now
- BleepingComputer:https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/
- The Register:https://www.theregister.com/2022/01/10/npm_fakerjs_colorsjs/
4. ctx (PyPI) 与 phpass(2022-05)
公开披露概要
2022 年 5 月 14 日左右,研究员发现 PyPI 包 ctx 的维护者邮箱所属域名已经过期,遂购买并接管该域名,于次日通过邮箱重置 PyPI 密码,并发布 ctx 0.1.2 / 0.2.2 等含外发逻辑的版本,同期对 PHP Packagist phpass 实施了同样的接管手法[10]。开发者社区在 5 月 21–22 日开始在 Reddit / Twitter 警示,PyPI 在 5 月 23 日删除恶意版本,研究员公开声明这是白帽 PoC[11]。Sonatype 同步发布事件分析[12]。
影响范围
ctx 自 2014 年起未更新,但累计下载量已达数百万次,仍被许多旧项目引用。phpass 是 WordPress 等大量 PHP 项目使用的密码哈希库,潜在影响巨大。攻击 payload 抓取 os.environ 中的环境变量并外发到 Heroku 端点;phpass 案中针对性提取 AWS_ACCESS_KEY 与 AWS_SECRET_KEY。
防御方的应对
- 平台层:PyPI 此后引入了对邮箱域名 MX 变更的额外验证(落地范围有限),并加强对长期沉睡包的接管检测。
- 企业层:行业开始把「abandoned dependency」作为 SBOM 风险标签的一部分,对超过特定时长未更新但仍被依赖的包给出警告。
- 生态层:维护者邮箱二次验证、过期域名巡检成为各大托管平台的隐形治理项。
留下的教训
- 「废弃但仍有流量」的包是攻击窗口——OSS 仓库需要把「过期域名」与「长期沉睡」纳入审计。
- 邮箱域名作为账户恢复信道的唯一性是历史遗留问题,但在缺少强 KYC 的开源治理结构中难以彻底替换。
- 即便研究员声称为白帽行为,「上传带数据外发功能的包」已超出授权研究边界,业界由此就 OSS 安全研究伦理展开多轮讨论。
公开来源
- Orca Security:https://orca.security/resources/blog/python-supply-chain-attack-ctx-phpass/
- The Hacker News:https://thehackernews.com/2022/05/pypi-package-ctx-and-php-library-phpass.html
- Sonatype:https://www.sonatype.com/blog/pypi-package-ctx-compromised-are-you-at-risk
5. PyTorch nightly torchtriton 依赖混淆(2022-12)
公开披露概要
2022 年 12 月 25 日至 30 日间,pip 在解析 PyTorch nightly Linux 版的依赖时,因默认 public-first 策略,从公共 PyPI 取到了攻击者抢注的同名 torchtriton 包,而非 PyTorch 官方私有 index 中的同名内部包。PyTorch 团队在 12-30 16:40 GMT 收到漏洞披露,当日发布官方公告并把内部依赖改名为 pytorch-triton,请求 PyPI 通过 namespace 占位拦截[13]。BleepingComputer 在 12-31 报道整个时间线[14],Aqua Security 与 Wiz 随后发布技术分析[15][16]。
影响范围
恶意 torchtriton 在被下架前累计被拉取 3000+ 次。PyTorch nightly 是 ML 研究人员、企业 ML 平台、大学实验室广泛使用的版本通道,Google Colab、Kaggle、HuggingFace Spaces 等环境曾因 nightly 自动升级而受波及。攻击 payload 收集 nameserver、hostname、用户名、环境变量、/etc/hosts、/etc/passwd、$HOME 文件、.gitconfig、.ssh/(含私钥)等敏感数据,外发渠道为 DNS 子域[15][13]。
防御方的应对
- PyTorch 项目:rename 内部依赖(torchtriton → pytorch-triton),并对私有 index 与公共 PyPI 同名包做永久占位。
- PyPI 平台:在事件后探索 namespace reservation 机制,让组织可预占内部包名。
- pip 工具:23.x 起逐步推动
--index-strategy unsafe-best-match/safe-first-match选项,让用户显式选择解析策略。 - 企业层:行业全面重审
--index-urlvs--extra-index-url的差异,企业内部私服镜像默认配置由 fail-open 改为 fail-closed。
留下的教训
- 依赖解析策略是供应链安全的隐形配置面——大多数包管理器都有「公共优先」的默认行为,企业必须显式覆盖。
- PyTorch nightly 事件证明「研究环境」与「生产环境」的边界正在消失:研究员的 GPU 工作站、CI builder、Colab 临时机器同样持有 SSH key 与 Git credential。
- 攻击者声称是「安全研究」,但 payload 实际外发个人凭据,已远超授权研究边界。事件成为后来多次「白帽边界」讨论的引用案例。
公开来源
- PyTorch 官方公告:https://pytorch.org/blog/compromised-nightly-dependency/
- Aqua Security 深度分析:https://www.aquasec.com/blog/pytorch-dependency-confusion-administered-malware/
- Wiz:https://www.wiz.io/blog/malicious-pytorch-dependency-torchtriton-on-pypi-everything-you-need-to-know
- BleepingComputer:https://www.bleepingcomputer.com/news/security/pytorch-discloses-malicious-dependency-chain-compromise-over-holidays/
6. 3CX 桌面应用供应链事件(2023-03)
公开披露概要
2023 年 3 月 22 日起,多家 EDR 厂商陆续报告对 3CXDesktopApp 的「行为异常告警」;3 月 29 日 3CX 公开披露事件,Volexity、SentinelOne、CrowdStrike、Sophos 同日发布技术分析;CISA 在 3 月 30 日发布 AA23-089A 警告。Mandiant 在 4 月 11 日给出初步结论,4 月 20 日给出终报告——3CX 是「另一供应链攻击的二次下游」:朝鲜 Lazarus 先入侵 Trading Technologies 的 X_TRADER 软件,借此渗透 3CX 内网,使用合法 3CX 代码签名证书签出木马化 Electron 应用,通过自动更新分发到全球 60 万 + 客户[17][18]。Krebs on Security 把这次事件命名为「双重供应链」[17]。
影响范围
3CX 公开数据为 60 万家客户组织、1200 万日活终端,覆盖政府、能源、医疗、金融等行业。Mandiant 分析显示真正高价值目标是加密货币与金融机构,二阶 payload ICONICSTEALER 主要窃取浏览器中的加密钱包数据[18]。ESET 后续披露 Lazarus 在 Linux 平台亦有同源样本投放[19]。严格说本次事件不在 PyPI/npm 范畴,但其「商业代码签名 + 受信发行商 + 自动更新」三件套被滥用的模式,对包仓库生态有强警示价值。
防御方的应对
- 平台层:CISA 发布 KEV 级告警,要求美国联邦机构盘点 3CX 安装面。
- 3CX 公司:紧急回滚自动更新,吊销签名证书,开放 incident-response 渠道给客户。
- 生态层:本次事件直接推动 SBOM 强制化、build provenance(SLSA 1/2/3 等级化)、reproducible build 等议题加速进入主流。
- EDR/XDR 行业:从 3CX 事件起,行为侧告警(而非签名匹配)被普遍提升优先级——因为合法签名也可能签出木马。
留下的教训
- 「双重供应链」打破了「我们只用大厂商品就安全」的天真假设;信任传递路径必须显式建模。
- 商业代码签名 + 自动更新 = 完美下行通道;下游一旦默认信任,就是零交互中招。
- EDR 客户的「行为异常误报」最终被证实是真阳性,但在事件初期被下游运维当作噪声忽略——告警分诊流程与「同一异常多客户聚合」的能力是关键防线。
公开来源
- Krebs on Security:https://krebsonsecurity.com/2023/04/3cx-breach-was-a-double-supply-chain-compromise/
- Mandiant:https://cloud.google.com/blog/topics/threat-intelligence/3cx-software-supply-chain-compromise
- Volexity:https://www.volexity.com/blog/2023/03/30/3cx-supply-chain-compromise-leads-to-iconic-incident/
- ESET WeLiveSecurity:https://www.welivesecurity.com/2023/04/20/linux-malware-strengthens-links-lazarus-3cx-supply-chain-attack/
7. Lottie Player(2024-10)
公开披露概要
2024 年 10 月 30 日 19:00–20:00 UTC,攻击者直接以合法 LottieFiles 维护者账号在 npm 发布 @lottiefiles/lottie-player 2.0.5 / 2.0.6 / 2.0.7。社区在 10-31 发现异常 popup 行为,LottieFiles 公开告警,npm 同日下架;LottieFiles 在 11-01 发布安全版 2.0.8(实为 2.0.4 的重发)[20]。Wiz、The Hacker News、Sonatype 均发布事件分析[21][22][23]。
影响范围
lottie-player 周下载约 9.4 万、累计 400 万 + 次。事件特殊之处在于:除 npm 通道外,包通过 unpkg / jsDelivr 等 CDN 在大量未做版本 pin 的 Web 站点上自动升级,因此外溢到普通终端用户的浏览器。至少一名用户公开自报损失约 $723k BTC(该数字仅来自单方自报,未见交易所或链上分析公司核数)[21]。
防御方的应对
- 平台层:npm 下架恶意版本;LottieFiles 立即发布安全版并广播到所有 CDN 入口。
- CDN 服务商:unpkg / jsDelivr 等服务在事件后开始提供「版本 pin + 哈希校验」开关。
- 企业层:Web3 / DeFi 站点开始把第三方前端依赖纳入「Subresource Integrity(SRI)」治理,并建立对
window.ethereumhook 的运行时监控。
留下的教训
- CDN + 未 pin 版本 = 「前端零交互供应链」,对 Web3 / DeFi 站点尤其致命——攻击 payload 仅在浏览器端运行,开发者本地不会触发,传统 SCA 看不到。
- 维护者私人 Gmail 被定向钓鱼(攻击者获取 npm 凭据 + 2FA OTP)说明 TOTP 不是终点,必须 WebAuthn / passkey。
- 包仓库已不仅是开发者工具,事实上成为面向终端用户的 CDN 节点,「上游单点 = 终端集体损失」是新形态。
公开来源
- Wiz:https://www.wiz.io/blog/lottie-player-supply-chain-attack
- The Hacker News:https://thehackernews.com/2024/10/lottiefiles-issues-warning-about.html
- Sonatype:https://www.sonatype.com/blog/lottie-player-compromised-in-supply-chain-attack-all-you-need-to-know
- BleepingComputer:https://www.bleepingcomputer.com/news/security/lottiefiles-hacked-in-supply-chain-attack-to-steal-users-crypto/
8. Ultralytics YOLO(2024-12)
公开披露概要
2024 年 12 月 4 日 20:51 UTC,Ultralytics 8.3.41 通过被劫持的 GitHub Actions build pipeline 发布到 PyPI,约 12 小时后下架。攻击者随后在 12-05、12-07 两天连发 8.3.42、8.3.45、8.3.46,每个版本仅存活 1–8 小时即被下架。PyPI 在 2024-12-11 发布官方事件分析专文,明确指出根因是 pull_request_target workflow 在未转义的 PR 标题模板里执行任意脚本[24]。Snyk、Wiz、ReversingLabs、HiddenLayer 在数日内同步披露技术细节[25][26][27][28],Schneier on Security 撰文评述[29]。
影响范围
Ultralytics 为 YOLOv8 的官方包,PyPI 累计下载 6000 万 +,是 ML/计算机视觉社区使用最广泛的训练框架之一。事件期间 Google Colab、HuggingFace Spaces 等环境因依赖 ultralytics 自动升级而受波及。Payload 是 XMRig Monero 矿机,安装即触发,开发者通常仅能通过 CPU 占用异常发现[27]。
防御方的应对
- PyPI 平台:事件后首次为单个开源项目发布官方事件分析,明确根因,给同生态项目作示范。
- GitHub 平台:加快推动
pull_request_target安全使用规范,强化模板渲染的转义。 - Ultralytics 项目:紧急修复 GitHub Actions workflow,吊销 PyPI token,迁移到 Trusted Publishers / OIDC 发布。
- 企业层:ML/AI 平台普遍重审「研发依赖自动升级」的默认策略,HuggingFace 等社区上线了对训练镜像的扫描通道。
留下的教训
- CI/CD 即代码——
pull_request_target+ 模板表达式 + 持密钥 runner = 零信任链路裸奔。 - AI/ML 生态成为新热点:依赖图大、CI 资源多(GPU)、研究员安全实践弱、自动升级习惯普遍。
- PyPI 事件分析专文与多家厂商分布式应急响应说明开源社区已形成稳定协作范式。
- 第二阶段(12-07)攻击者直接持 PyPI token 发布,说明仅修复 CI 不足以闭环——token 轮换、scope 收敛、寿命缩短同样是必修课。
公开来源
- PyPI 官方:https://blog.pypi.org/posts/2024-12-11-ultralytics-attack-analysis/
- Snyk:https://snyk.io/blog/ultralytics-ai-pwn-request-supply-chain-attack/
- Wiz:https://www.wiz.io/blog/ultralytics-ai-library-hacked-via-github-for-cryptomining
- ReversingLabs:https://www.reversinglabs.com/blog/compromised-ultralytics-pypi-package-delivers-crypto-coinminer
- Schneier on Security:https://www.schneier.com/blog/archives/2024/12/ultralytics-supply-chain-attack.html
9. tj-actions/changed-files(2025-03)
公开披露概要
2025 年 3 月 14 日 16:00 UTC 前后,攻击者推送恶意 commit 并使用 git tag -f 把 tj-actions/changed-files 的多个历史 tag(含 v1、v44 等)retag 到该恶意 commit。GitHub 在 3-15 14:00 UTC 临时下架 Action,同日 22:00 UTC 修复并发布 v46.0.1。CISA 在 3-18 发布告警 AA25-077A,分配 CVE-2025-30066 与关联 reviewdog/action-setup CVE-2025-30154[30]。Wiz、Aqua、StepSecurity、Semgrep、Unit42 在事件期间同步发布 IOC 与缓解配置[31][32][33][34][35]。
影响范围
事件期间约 23,000 个 GitHub 仓库直接消费该 Action;恶意代码在 Runner Worker 中读取子进程的环境变量与 secret 引用,并 echo 到 workflow log。公开仓库的 workflow log 可被任何人读取,导致 AWS、GitHub PAT、npm token、私有 RSA key 大批泄露——理论曝露面达 23,000 仓库,Unit42 估计实际「被读取过 secret」的 repo 在数百量级[35]。
Unit42 后续追加报告把这次事件归因到一次更早的针对 Coinbase 的定向攻击:攻击者通过 spotbugs 链路逐级渗透到 reviewdog → tj-actions,定向行动后才扩散为大规模事件[35]。
防御方的应对
- 平台层:CISA 发布 KEV 级告警,要求美国联邦机构紧急排查;GitHub 迅速修复并加速推动 Immutable Releases、signed tags、required SHA-pin 等治理项进入路线图。
- 企业层:StepSecurity Harden-Runner、Aqua、Wiz 等多家厂商在数小时内提供 IOC 与缓解配置,企业可按 IP / 域名 / 行为指标快速完成自查。
- 生态层:「Action 必须按 commit SHA pin 而非 tag」从此成为 GitHub Actions 安全的默认建议;GHSA 把 retag 行为正式纳入威胁模型。
留下的教训
- GitHub Actions 的「按 tag 引用」是供应链可重写历史的最大软肋——必须按 commit SHA pin。
- 这是 GitHub 生态首次出现「作用域横跨整网」的事件,事实上把 Actions 治理推上 KEV 级响应。
- 公开 repo 的 workflow log 默认对外可读,再小的 secret 写入都意味着永久泄露——事件后许多企业把公开 repo 的 secret 默认改为不可注入。
- CI 安全监控领域(Harden-Runner、Aqua、Wiz、StepSecurity 等)在数小时内完成应急响应,证明 CI 安全工具已成熟成型。
公开来源
- CISA:https://www.cisa.gov/news-events/alerts/2025/03/18/supply-chain-compromise-third-party-tj-actionschanged-files-cve-2025-30066-and-reviewdogaction
- GHSA:https://github.com/advisories/ghsa-mrrh-fwg8-r2c3
- Wiz:https://www.wiz.io/blog/github-action-tj-actions-changed-files-supply-chain-attack-cve-2025-30066
- Unit42:https://unit42.paloaltonetworks.com/github-actions-supply-chain-attack/
- StepSecurity Harden-Runner:https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised
- Semgrep:https://semgrep.dev/blog/2025/popular-github-action-tj-actionschanged-files-is-compromised/
10. Shai-Hulud npm 蠕虫(2025-09,含 v1 与 v2.0)
名称取自《沙丘》的「沙虫」。这是 npm 生态有公开记录以来「自动传播」最成熟、波及最广的供应链事件,也是 2025 年生态级响应的分水岭。本节聚焦平台响应与企业自查方法的演变,不复述 payload 技术细节、不提供 IOC 哈希。
公开披露概要:v1(2025-09)
- 2025-08-26 起:Nx s1ngularity 系列被视为前导事件,AitM 钓鱼模式与 GitHub token 滥用方式与后续高度同源。
- 2025-09-08:Qix-(Josh Junon)账户被钓鱼,
debug/chalk等 18+ 包被注入加密货币 hijack 代码,Check Point 称其为 "The Great NPM Heist",影响周下载 20 亿次量级[36][37]。 - 2025-09-14 17:58 UTC(约):第一只被 Shai-Hulud 蠕虫感染的 npm 包出现(如
@ctrl/tinycolor等被改写)[38]。 - 2025-09-15:Socket Security 公开披露首批 180+ 包;Krebs on Security 同日撰文[38][39]。
- 2025-09-15 至 2025-09-17:48 小时内蔓延趋势已是指数级,受感染包数突破 180。
- 2025-09-23:CISA 发布告警「Widespread Supply Chain Compromise Impacting npm Ecosystem」,要求美国联邦机构(含国防、能源)盘点影响面[40]。
- 2025-09 中下旬:CrowdStrike 维护的至少 25 个 npm 包被波及,迅速由 npm 下架。
- 2025-11 起:Truesec 报告累计感染包超 500 个[41]。
公开披露概要:v2.0(2025-11–12,"The Second Coming")
- 执行点从 postinstall 前移到 preinstall,使
npm ci、Dockerfile build 等更多场景被触发。 - Microsoft 在 2025-12-09 发布详细分析,给出「检测、调查、防御」三段指南;统计影响约 350 个独特用户、超过 2.5 万个相关公开仓库[42]。
- Datadog Security Labs 与 Sysdig 同步发布技术分析,记录蠕虫的版本演化[43][44]。
- 累计感染规模:Sonatype 2026 报告称 v2 共波及 796 个独立包、1092 个版本(与 v1 累加)[45]。
影响范围
- 包数:500+(v1,Truesec 截至 2025-11)→ 累计 796 包 / 1092 版本(v2.0,截至 2026 Q1,Sonatype 数据)。
- 用户面:v2.0 影响约 350 个独特用户、超过 2.5 万个相关公开仓库(Microsoft 数据)。
- 生态层信号:CrowdStrike 等知名安全厂商也被卷入、跨数百个独立维护者命名空间传播,事实上让 npm 治理首次进入 CISA 持续关注名单。
- 与同月的 Great NPM Heist(chalk/debug 等周下载 20 亿次的「巨型节点」)叠加,2025-09 成为公开记录中 npm 生态级影响最大的单月。
防御方的应对
npm 平台层
- 紧急下架受影响包并冻结涉事维护者 token。
- 加速推进 2025 Q4 的治理路线图:删除经典 token、强制 OIDC trusted publishing、推动维护者强 MFA(FIDO2 / passkey)、缩短 token 寿命、强化「发布前异常行为检测」(如同一维护者短时间内对多个包发布同一文件 diff)[46]。
CISA 与官方层
- 2025-09-23 罕见对生态发布广泛 compromise 告警,要求联邦机构系统化排查 npm 依赖[40]。
- CERT/CC 同步发布 VU#534320 警告[47]。
企业自查方法的演变
事件之前,企业常用的自查动作以「包名黑名单 + lockfile 比对」为主;事件之后,自查方法发生了两个层面的演变:
- 从「单包」到「维护者级」:因为 worm 的传播单位是「被感染维护者所拥有的全部包」,企业需要从「我是否依赖了 X 包」升级为「我是否依赖了维护者 M 名下的任何包」。Wiz 等厂商在事件期间提供了按维护者枚举受影响范围的查询能力。
- 从「lockfile 静态比对」到「postinstall/preinstall 行为审计」:因为 v2.0 把执行点提前到 preinstall,企业不能再依赖
--ignore-scripts仅在生产环境生效;CI builder、Dockerfile build、npm ci都需被纳入沙箱化与行为监控范围。Sysdig、Datadog 在事件期间发布的检测规则全部围绕「安装阶段的网络出站行为 + 公开 GitHub repo 写入」组织。
生态长期改进
- 「
--ignore-scripts默认开启」从争议议题进入主流议程。 - GitHub 加速推动「公开 repo 中的可疑 secret 外泄检测」,对名为
Shai-Hulud等明显 IOC 命名的公开仓库进行自动 takedown。 - Sonatype 把 worm / self-propagation 单独列为开源恶意包分类项,在 2026 报告中首次给出独立计量[45]。
留下的教训
- 自传播 worm 把「维护者级 ATO」的影响放大数量级——防御侧的最小响应单位必须从「包」升级到「维护者 + 维护者所有包」。
- 把秘密外泄到公开 GitHub 仓库是 LLM 时代的新模式——任何能写公开 repo 的 token 都成 C2,这要求企业重新评估对 GitHub PAT 的 scope 设计与 repo 写权审计。
- preinstall 的回归证明「
--ignore-scripts默认开启」是行业必走的方向;同时 Dockerfile / CI 的安装阶段必须默认进入沙箱化与出站监控。 - CISA 连续两次(2025-03、2025-09)对 npm 生态发布告警,事实上把开源仓库治理纳入关键基础设施视野,企业 SBOM 与自查节奏需要进入小时级而非月级。
- 对维护者层而言,FIDO2 / passkey 是 2025 之后唯一被实战证明能挡住 AitM 钓鱼的方案;TOTP 已不足以保护高影响包。
公开来源
- Unit42(Palo Alto):https://unit42.paloaltonetworks.com/npm-supply-chain-attack/
- CISA:https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem
- Microsoft Security Blog(v2.0 防御指南):https://www.microsoft.com/en-us/security/blog/2025/12/09/shai-hulud-2-0-guidance-for-detecting-investigating-and-defending-against-the-supply-chain-attack/
- Datadog Security Labs:https://securitylabs.datadoghq.com/articles/shai-hulud-2.0-npm-worm/
- Sysdig:https://www.sysdig.com/blog/shai-hulud-the-novel-self-replicating-worm-infecting-hundreds-of-npm-packages
- Krebs on Security:https://krebsonsecurity.com/2025/09/self-replicating-worm-hits-180-software-packages/
- Truesec:https://www.truesec.com/hub/blog/500-npm-packages-compromised-in-ongoing-supply-chain-attack-shai-hulud
- CERT/CC VU#534320:https://kb.cert.org/vuls/id/534320
- Wiz:https://www.wiz.io/blog/shai-hulud-npm-supply-chain-attack
11. XZ utils(2024-03,关联说明)
严格意义上 XZ 是 Linux distro 级供应链攻击,不在 PyPI/npm 范畴。但其手法(长期维护者社工 + tarball/git 不一致 + 上游构建系统隐写)对 npm/PyPI 生态有强警示价值,本文以「关联说明」纳入。
公开披露概要
2024 年 3 月 29 日,Microsoft PostgreSQL 工程师 Andres Freund 在调查 sshd 性能异常时偶然发现 XZ utils 5.6.0/5.6.1 中的后门,向 oss-security 邮件列表披露,CVE-2024-3094 当日分配 CVSS 10.0。GitHub 暂停 xz repo,Debian sid、Fedora rawhide、openSUSE Tumbleweed、Kali rolling、Arch 等迅速回滚[48]。Datadog Security Labs、JFrog、SentinelOne、Sonatype 在数日内发布详尽分析[49][50][51][52],Wikipedia 编录了完整时间线[53]。
影响范围
XZ utils 5.6.0/5.6.1 后门尚未广泛进入 stable 发行版即被发现;估计未真正被国家级利用。但若进入 Debian/Ubuntu LTS,将影响全球数千万 sshd 节点。Cato Networks 把此事件评为「自 Log4Shell 以来最危险的供应链攻击」[54]。
防御方的应对
- distro 层:所有受影响发行版在数日内回滚到 5.4.x;GitHub 暂停 xz 仓库与维护者账号。
- 生态层:OpenSSF Alpha-Omega、Sovereign Tech Fund、德国主权技术资助等「对关键维护者直接资助」机制加速落地;多家厂商把「关键 OSS 维护者倦怠」作为正式风险类别。
- 构建层:reproducible build、SLSA Level 3+、tarball ↔ git 比对成为 SCA 厂商加速建设的功能。
与 npm/PyPI 的联动思考
- 「信誉建立 → 接管 → 后门」是可平移到 npm/PyPI 维护者社工的模板;XZ 已证明 2 年时间投入对国家级行为体是常态。npm/PyPI 高影响包同样面临这一模式威胁,但目前缺少同等强度的「实质控制人变更」KYC。
- tarball ≠ git:SCA 必须比对发布 artifact 与上游 VCS 内容;npm 包内含的 fixture / sample 也应成为扫描重点。
- 测试 fixture 与 build 脚本(m4、setup.py、postinstall)是绝佳藏匿点——这一教训对 PyPI 的 setup.py / wheel 与 npm 的 install scripts 同样有效。
- XZ 推动了「关键维护者直接资助」议题真正进入资金层;但对企业蓝队来说,更现实的应对是把「依赖链中的 single-maintainer 包」标注为高风险并在 SBOM 中显式标记。
公开来源
- Datadog Security Labs:https://securitylabs.datadoghq.com/articles/xz-backdoor-cve-2024-3094/
- JFrog:https://jfrog.com/blog/xz-backdoor-attack-cve-2024-3094-all-you-need-to-know/
- Wikipedia 全景:https://en.wikipedia.org/wiki/XZ_Utils_backdoor
- SentinelOne:https://www.sentinelone.com/blog/xz-utils-backdoor-threat-actor-planned-to-inject-further-vulnerabilities/
- Sonatype:https://www.sonatype.com/blog/cve-2024-3094-the-targeted-backdoor-supply-chain-attack-against-xz-and-liblzma
12. 2025–2026 事件群(每件事一段公开复盘)
进入 2025 年下半年与 2026 上半年后,npm/PyPI 生态进入「连续告警」状态。以下五起事件构成本节,每件以一段公开复盘形式覆盖。
12.1 Nx s1ngularity(2025-08)
2025-08-26 18:32 EDT,被盗的 npm token 被用于发布恶意版本 nx 与若干 Nx 生态包;恶意 telemetry.js 在 postinstall 中扫描开发机的凭据、SSH key、加密货币钱包文件并外发到攻击者 GitHub 账户。Nx 团队在次日 22:44 EDT 完成 npm 下架,但攻击第二波利用偷到的 GitHub token 把受害者私有仓库改公开并按 s1ngularity-repository-#5letters# 命名,190+ 用户/组织、3000+ repo 暴露[55][56]。事件中 payload 调用 AI CLI(Claude / GPT)协助秘密扫描,被多家厂商研判为「首批 AI 协同攻击」案例之一[57],并被普遍认为铺垫了 9 月的 Shai-Hulud worm。Sonatype 后续披露 s1ngularity 共泄露 2349 条 GitHub / 云 / NPM token 与 2 万 + 文件[58]。
12.2 Great NPM Heist(chalk + debug 等 18+ 包,2025-09-08)
2025-09-08,Qix-(Josh Junon)账户在 support@npmjs.help 仿冒域名钓鱼 + AitM 流程中被拿到 2FA OTP,攻击者随后向 debug、chalk 等 18+ 基础包注入加密货币钱包 hijack 代码(hook fetch / XMLHttpRequest / window.ethereum),合并周下载 20 亿次量级。Check Point 命名为 "The Great NPM Heist",The Hacker News 同日跟进[36][37]。Wiz、Semgrep、StepSecurity 在事件期间披露完整时间线:13:16 UTC 发布 → 15:20 UTC 社区报警 → ~17:00 UTC 维护者撤回,整体响应窗口不到 2 小时[59][60][61]。事件直接强化了一个事实:周下载 20 亿次的「巨型节点」也可能在不到 2 小时内被一封钓鱼邮件接管,FIDO2 / passkey 不是「可选项」而是必须项。
12.3 axios npm compromise(2026-03-31,Sapphire Sleet 归因)
2026-03-31,恶意 axios 版本被发布。axios 周下载 7000 万 +,是 npm 头部 HTTP 客户端。攻击通过维护者账号被盗 → postinstall hook → 跨平台 RAT,覆盖 macOS / Windows / Linux。Microsoft Threat Intelligence 在 4-01 发布缓解指南,并归因到朝鲜国家级行为体 Sapphire Sleet[62];Mandiant、Elastic Security Labs、SANS、Snyk 同步发布技术分析,部分独立分析未明确归因到该子组[63][64]。本次事件标志着朝鲜国家级行为体已实际介入 npm 头部包的 ATO,加上此前 Lazarus、Moonstone Sleet、Stressed Pungsan、Contagious Interview 等多个分组并行活跃,朝鲜在公开记录中事实上「主导」了 2025–2026 npm 攻击叙事中的相当份额。
12.4 SAP / npm self-propagating worm 系列(2026-04)
2026 年 4 月起,多个针对 SAP 命名空间的自传播 worm 在 npm 出现,复用 Shai-Hulud 模式但定向企业 SAP 开发链路;同月 The Hacker News 披露 36 个恶意 npm 包通过 Redis / PostgreSQL 部署做持久化植入[65][66][67]。事件证明蠕虫化已从 Shai-Hulud 一次性事件演变为 npm 生态的常态攻击形态,且攻击者在「自传播」基础上进一步加上「面向企业基础设施持久化」目标。对企业蓝队的含义是:清场不再是「下架包 + 回滚 lockfile」即结束,而要把数据库、Redis、Kubernetes 配置等持久化后端纳入受影响面排查范围。
12.5 TeamPCP 12 天 5 起:Trivy → KICS → LiteLLM → Telnyx → npm(2026-03-19 至 03-31)
在 12 天内,连续 5 起涉及供应链工具或 AI 基础设施的事件被披露: 2026-03-19 Trivy 漏洞扫描器被攻破;2026-03-23 KICS IaC 扫描器被攻破;2026-03-24 LiteLLM PyPI 包(日下载 340 万,是 LLM 代理基础设施核心组件)被注入多阶段 payload;2026-03-27 Telnyx PyPI 通信库被攻破;2026-03-31 axios(与 12.3 同事件)。共同 payload:抓 cloud credentials、SSH key、Kubernetes config、CI/CD secrets[68][69]。这一序列事件显示攻击者已系统化地以「安全工具 + AI 基础设施」为目标——这两类组件本身就有访问云凭据与构建产物的特权,被攻陷后辐射效应远超普通业务依赖。对蓝队来说,「安全工具自身的供应链」需要以最高安全级别治理,而不是默认信任。
公开来源(2025–2026 事件群)
- Nx s1ngularity post-mortem:https://nx.dev/blog/s1ngularity-postmortem
- Wiz s1ngularity 分析:https://www.wiz.io/blog/s1ngularity-supply-chain-attack
- Endor Labs:https://www.endorlabs.com/learn/nx-build-platform-compromised-by-supply-chain-attack---how-attackers-collude-with-ai-code-assistants
- Check Point(Great NPM Heist):https://blog.checkpoint.com/crypto/the-great-npm-heist-september-2025/
- The Hacker News(chalk/debug):https://thehackernews.com/2025/09/20-popular-npm-packages-with-2-billion.html
- Wiz(chalk/debug 影响面):https://www.wiz.io/blog/widespread-npm-supply-chain-attack-breaking-down-impact-scope-across-debug-chalk
- Semgrep(chalk/debug 时间线):https://semgrep.dev/blog/2025/chalk-debug-and-color-on-npm-compromised-in-new-supply-chain-attack/
- Microsoft(axios 缓解指南):https://www.microsoft.com/en-us/security/blog/2026/04/01/mitigating-the-axios-npm-supply-chain-compromise/
- Mandiant / Cloud Blog(axios 北朝鲜归因):https://cloud.google.com/blog/topics/threat-intelligence/north-korea-threat-actor-targets-axios-npm-package
- Elastic Security Labs(axios):https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all
- The Register(SAP worm):https://www.theregister.com/2026/04/30/supply_chain_attacks_sap_npm_packages/
- The Hacker News(36 恶意包持久化):https://thehackernews.com/2026/04/36-malicious-npm-packages-exploited.html
- Dreamfactory(TeamPCP 12 天 5 起):https://blog.dreamfactory.com/five-supply-chain-attacks-in-twelve-days-how-march-2026-broke-open-source-trust-and-what-comes-next
- Zscaler(2026-03 趋势):https://www.zscaler.com/blogs/security-research/supply-chain-attacks-surge-march-2026
总览:八年事件留下的防御共识
把 12 类事件并列比较,可以看出防御侧从 2018 到 2026 形成了几条明确的共识线索:
- 维护者层:从「无 KYC + TOTP 即可发布」演进为「FIDO2 / passkey 强制 + OIDC trusted publishing + 短寿命 token」。
event-stream、ua-parser-js、Lottie Player、chalk/debug、axios串成了同一条逐步收紧的演化线。 - 包仓库层:npm/PyPI 从最初的「事后下架」演进为「事件分析专文 + 维护者级追溯 + 自动 takedown 公开 IOC repo」。
torchtriton、Ultralytics、Shai-Hulud都是这条演化线的代表。 - CI/CD 层:从「
pull_request_target默认信任 PR 上下文」演进为「Action 必须 SHA-pin + 签名 release + Harden-Runner 行为监控」。Ultralytics、tj-actions、s1ngularity把这一层的脆弱性和补救路径完整暴露。 - 企业自查层:从「单包查询」演进为「维护者级 + 安装阶段行为审计」。
Shai-Hulud之后,自查的最小单位事实上从包升级到「维护者 + 其名下全部包」。 - 国家级行为体:朝鲜(Lazarus、Moonstone Sleet、Sapphire Sleet、Stressed Pungsan、Contagious Interview)已在公开记录中主导 2024–2026 npm 攻击叙事。XZ utils 的「Jia Tan」证明 2 年级别的社工渗透是国家级对开源关键节点的常态投入。
- 生态治理层:CISA 在 2025 年内连续两次(tj-actions、Shai-Hulud)对 npm 生态发布行业告警,事实上把开源仓库治理纳入关键基础设施视野;OpenSSF Alpha-Omega、Sovereign Tech Fund 等机制开始把「对关键维护者直接资助」从倡议变为基金。
这些共识不会让企业自动免疫下一次事件,但能为蓝队、应急响应团队与 SCA 工具评估者提供一份与生态演化同步的判断基线。下一步的工作不再是去问「这个包是否安全」,而是把过去八年事件中已经验证有效的治理动作(维护者级 SBOM、SHA-pin、--ignore-scripts、OIDC trusted publishing、安装阶段沙箱、维护者变更告警、token scope 收敛)系统化地嵌入企业自身的研发与构建流水线。
引用与脚注(按文中出现序)
- npm 官方博客 — event-stream 事件细节:https://blog.npmjs.org/post/180565383195/details-about-the-event-stream-incident
- Snyk — event-stream post-mortem:https://snyk.io/blog/a-post-mortem-of-the-malicious-event-stream-backdoor/
- A Systematic Analysis of the Event-Stream Incident:https://es-incident.github.io/paper.html
- Snyk 漏洞数据库 ua-parser-js(CVE-2021-4229):https://security.snyk.io/vuln/SNYK-JS-UAPARSERJS-1766952
- Sonatype — ua-parser-js:https://blog.sonatype.com/npm-project-used-by-millions-hijacked-in-supply-chain-attack
- BleepingComputer — ua-parser-js:https://www.bleepingcomputer.com/news/security/popular-npm-library-hijacked-to-install-password-stealers-miners/
- CrowdStrike 客户公告 — ua-parser-js:https://www.crowdstrike.com/en-us/blog/crowdstrike-customers-protected-from-compromised-npm-package-in-supply-chain-attack/
- BleepingComputer — colors / faker:https://www.bleepingcomputer.com/news/security/dev-corrupts-npm-libs-colors-and-faker-breaking-thousands-of-apps/
- The Register — colors / faker:https://www.theregister.com/2022/01/10/npm_fakerjs_colorsjs/
- Orca Security — ctx / phpass:https://orca.security/resources/blog/python-supply-chain-attack-ctx-phpass/
- The Hacker News — ctx / phpass:https://thehackernews.com/2022/05/pypi-package-ctx-and-php-library-phpass.html
- Sonatype — ctx / phpass:https://www.sonatype.com/blog/pypi-package-ctx-compromised-are-you-at-risk
- PyTorch 官方公告 — torchtriton:https://pytorch.org/blog/compromised-nightly-dependency/
- BleepingComputer — torchtriton:https://www.bleepingcomputer.com/news/security/pytorch-discloses-malicious-dependency-chain-compromise-over-holidays/
- Aqua Security — PyTorch dependency confusion:https://www.aquasec.com/blog/pytorch-dependency-confusion-administered-malware/
- Wiz — torchtriton:https://www.wiz.io/blog/malicious-pytorch-dependency-torchtriton-on-pypi-everything-you-need-to-know
- Krebs on Security — 3CX 双重供应链:https://krebsonsecurity.com/2023/04/3cx-breach-was-a-double-supply-chain-compromise/
- Mandiant — 3CX:https://cloud.google.com/blog/topics/threat-intelligence/3cx-software-supply-chain-compromise
- ESET WeLiveSecurity — 3CX/Lazarus Linux 关联:https://www.welivesecurity.com/2023/04/20/linux-malware-strengthens-links-lazarus-3cx-supply-chain-attack/
- BleepingComputer — Lottie Player:https://www.bleepingcomputer.com/news/security/lottiefiles-hacked-in-supply-chain-attack-to-steal-users-crypto/
- Wiz — Lottie Player:https://www.wiz.io/blog/lottie-player-supply-chain-attack
- The Hacker News — LottieFiles:https://thehackernews.com/2024/10/lottiefiles-issues-warning-about.html
- Sonatype — Lottie Player:https://www.sonatype.com/blog/lottie-player-compromised-in-supply-chain-attack-all-you-need-to-know
- PyPI 官方博客 — Ultralytics 攻击分析:https://blog.pypi.org/posts/2024-12-11-ultralytics-attack-analysis/
- Snyk — Ultralytics pwn-request 链:https://snyk.io/blog/ultralytics-ai-pwn-request-supply-chain-attack/
- Wiz — Ultralytics:https://www.wiz.io/blog/ultralytics-ai-library-hacked-via-github-for-cryptomining
- ReversingLabs — Ultralytics coinminer:https://www.reversinglabs.com/blog/compromised-ultralytics-pypi-package-delivers-crypto-coinminer
- HiddenLayer — Ultralytics:https://hiddenlayer.com/innovation-hub/ultralytics-python-package-compromise-deploys-cryptominer/
- Schneier on Security — Ultralytics:https://www.schneier.com/blog/archives/2024/12/ultralytics-supply-chain-attack.html
- CISA — tj-actions / reviewdog:https://www.cisa.gov/news-events/alerts/2025/03/18/supply-chain-compromise-third-party-tj-actionschanged-files-cve-2025-30066-and-reviewdogaction
- Wiz — tj-actions:https://www.wiz.io/blog/github-action-tj-actions-changed-files-supply-chain-attack-cve-2025-30066
- Aqua — tj-actions:https://www.aquasec.com/blog/github-action-tj-actions-changed-files-compromised/
- StepSecurity Harden-Runner:https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised
- Semgrep — tj-actions:https://semgrep.dev/blog/2025/popular-github-action-tj-actionschanged-files-is-compromised/
- Unit42 — tj-actions(含 Coinbase 定向追溯):https://unit42.paloaltonetworks.com/github-actions-supply-chain-attack/
- Check Point — Great NPM Heist:https://blog.checkpoint.com/crypto/the-great-npm-heist-september-2025/
- The Hacker News — chalk/debug:https://thehackernews.com/2025/09/20-popular-npm-packages-with-2-billion.html
- Krebs on Security — Shai-Hulud:https://krebsonsecurity.com/2025/09/self-replicating-worm-hits-180-software-packages/
- Socket Security — Shai-Hulud (CrowdStrike npm):https://socket.dev/blog/ongoing-supply-chain-attack-targets-crowdstrike-npm-packages
- CISA — Widespread Supply Chain Compromise Impacting npm Ecosystem:https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem
- Truesec — 500+ npm Packages Compromised:https://www.truesec.com/hub/blog/500-npm-packages-compromised-in-ongoing-supply-chain-attack-shai-hulud
- Microsoft Security Blog — Shai-Hulud 2.0 防御指南:https://www.microsoft.com/en-us/security/blog/2025/12/09/shai-hulud-2-0-guidance-for-detecting-investigating-and-defending-against-the-supply-chain-attack/
- Datadog Security Labs — Shai-Hulud 2.0:https://securitylabs.datadoghq.com/articles/shai-hulud-2.0-npm-worm/
- Sysdig — Shai-Hulud 蠕虫技术分析:https://www.sysdig.com/blog/shai-hulud-the-novel-self-replicating-worm-infecting-hundreds-of-npm-packages
- Sonatype — 2026 State of the Software Supply Chain:https://www.sonatype.com/state-of-the-software-supply-chain/2026/open-source-malware
- GitHub Security Blog — Our plan for a more secure npm supply chain:https://github.blog/security/supply-chain-security/our-plan-for-a-more-secure-npm-supply-chain/
- CERT/CC VU#534320:https://kb.cert.org/vuls/id/534320
- Sonatype — XZ utils CVE-2024-3094:https://www.sonatype.com/blog/cve-2024-3094-the-targeted-backdoor-supply-chain-attack-against-xz-and-liblzma
- Datadog Security Labs — XZ utils backdoor:https://securitylabs.datadoghq.com/articles/xz-backdoor-cve-2024-3094/
- JFrog — XZ backdoor:https://jfrog.com/blog/xz-backdoor-attack-cve-2024-3094-all-you-need-to-know/
- SentinelOne — XZ utils:https://www.sentinelone.com/blog/xz-utils-backdoor-threat-actor-planned-to-inject-further-vulnerabilities/
- Sonatype — XZ utils(再次引):https://www.sonatype.com/blog/cve-2024-3094-the-targeted-backdoor-supply-chain-attack-against-xz-and-liblzma
- Wikipedia — XZ Utils backdoor:https://en.wikipedia.org/wiki/XZ_Utils_backdoor
- Cato Networks — XZ backdoor 影响评估:https://www.catonetworks.com/blog/xz-backdoor-rce-cve-2024-3094-is-the-biggest-supply-chain-attack-since-log4j/
- Nx 官方 post-mortem — s1ngularity:https://nx.dev/blog/s1ngularity-postmortem
- Wiz — s1ngularity:https://www.wiz.io/blog/s1ngularity-supply-chain-attack
- Endor Labs — Nx 与 AI 协同攻击:https://www.endorlabs.com/learn/nx-build-platform-compromised-by-supply-chain-attack---how-attackers-collude-with-ai-code-assistants
- The Hacker News — s1ngularity 范围:https://thehackernews.com/2025/08/malicious-nx-packages-in-s1ngularity.html
- Wiz — chalk/debug 影响面:https://www.wiz.io/blog/widespread-npm-supply-chain-attack-breaking-down-impact-scope-across-debug-chalk
- Semgrep — chalk/debug 时间线:https://semgrep.dev/blog/2025/chalk-debug-and-color-on-npm-compromised-in-new-supply-chain-attack/
- StepSecurity — 20 个 npm 包被攻:https://www.stepsecurity.io/blog/20-popular-npm-packages-compromised-chalk-debug-strip-ansi-color-convert-wrap-ansi
- Microsoft Security Blog — axios 缓解:https://www.microsoft.com/en-us/security/blog/2026/04/01/mitigating-the-axios-npm-supply-chain-compromise/
- Mandiant / Google Cloud — 朝鲜定向 axios:https://cloud.google.com/blog/topics/threat-intelligence/north-korea-threat-actor-targets-axios-npm-package
- Elastic Security Labs — axios:https://www.elastic.co/security-labs/axios-one-rat-to-rule-them-all
- The Register — SAP npm worm:https://www.theregister.com/2026/04/30/supply_chain_attacks_sap_npm_packages/
- iSec News — 自传播 worm:https://www.isec.news/2026/04/23/malicious-npm-packages-spread-self-propagating-worm-through-stolen-developer-tokens/
- The Hacker News — 36 恶意 npm 包:https://thehackernews.com/2026/04/36-malicious-npm-packages-exploited.html
- Dreamfactory — 12 天 5 起:https://blog.dreamfactory.com/five-supply-chain-attacks-in-twelve-days-how-march-2026-broke-open-source-trust-and-what-comes-next
- Zscaler — 2026-03 供应链攻击趋势:https://www.zscaler.com/blogs/security-research/supply-chain-attacks-surge-march-2026
全部链接为公开权威源;事件均已被生态平台修复并被业内多次复盘多年。