高影响SafeDep/Hacker News
Mini Shai-Hulud 再次攻击 npm:317 个包在 22 分钟内被投毒
攻击者在 22 分钟内通过 npm 发布 637 个恶意版本,波及 317 个 npm 包。恶意载荷使用 Bun 脚本、GitHub API 作为 C2 信道、含 Docker 容器逃逸能力,是今年最大规模的供应链攻击之一。
2026年5月19日 · 阅读约 4 分钟
核心结论
2026 年 5 月 19 日,攻击者利用一个此前在 SAP 攻击中使用的同款恶意软件框架,通过 npm 发布了 637 个恶意包版本,波及 317 个 npm 包。攻击全过程仅耗时 22 分钟,采用自动化批量发布的方式。
关键要点
- 事件发生时间:2026 年 5 月 19 日
- 受影响范围:317 个 npm 包,637 个恶意版本,2 波自动化攻击
- 攻击方式:通过 stolen npm token 发布恶意版本,执行 obfuscated Bun 脚本
- 影响对象:所有使用 npm 作为包管理器的 Node.js 开发者、CI/CD 流水线
背景与攻击细节
这是"Shai-Hulud"系列攻击的第二次大规模行动。三周前同一攻击者曾针对 SAP 生态系统发起攻击,本次攻击使用了相同的恶意软件框架:
- 相同 Bun 运行时的要求
- 相同 hex-variable 混淆模式
- 相同扫描器架构(100KB 刷新阈值)
- 相同凭据正则匹配集
攻击链分为两层执行路径。每个被攻陷的版本会在 preinstall 或 postinstall 钩子中嵌入执行代码,触发一个 498KB 的混淆 Bun 脚本。这个脚本在依赖解析时即被执行——npm 的 semver 解析会拉取最新版本,即使只有几个小时前发布。
影响范围:
- 309 个包各收到 2 个恶意版本(每波各 1 个)
- 4 个包收到 3 个恶意版本(可能是早期测试)
- 总计 637 个恶意版本
攻击能力矩阵
| 攻击维度 | 能力 | 风险等级 |
|---|---|---|
| 凭据窃取 | npm tokens, GitHub PATs, AWS/GCP/Azure 全链凭据 | 🔴 极严重 |
| CI/CD 渗透 | GitHub Actions OIDC token 交换为 npm publish token | 🔴 极严重 |
| Docker 逃逸 | 通过 host socket 3 种方式逃逸容器 | 🟠 严重 |
| 持久化 | 5 种机制:shell rc,VS Code extension,Git hooks,systemd/LaunchAgent,GitHub C2 后门 | 🔴 极严重 |
| 数据外泄 | GitHub API 作为 C2 信道,256000 种 Dune 主题命名组合 | 🟠 严重 |
| 签名伪造 | 用窃取的 OIDC token 获取 Sigstore/Fulcio 证书,签名恶意工件 | 🟠 严重 |
五大持久化机制
该恶意软件携带五种不同的持久化机制,逐层深入:
- Shell RC 注入 — 向
.bashrc/.zshrc写入载荷,在每次终端会话时触发 - VS Code Extension — 伪装成一个 VS Code 扩展来重新执行恶意代码
- Git Hooks — 注入到 Git hooks 中,每次 AI session 或 git 操作时激活
- systemd / macOS LaunchAgent — 安装系统级守护进程,确保重启后存活
- GitHub Dead-Drop C2 后门 — Python 守护进程每小时通过 GitHub commit search API 轮询 RSA-PSS 签名命令
自愈与隐蔽机制
攻击者对外泄信道的设计极为精巧——完全不依赖外部攻击者控制的服务器,所有通信均使用 GitHub 自身 API:
- 外泄数据提交到以 Dune 主题命名的公共 GitHub 仓库中(256000 种组合)
- GitHub API 流量与正常开发者工具流量难以区分
- B 批处理sender 以 100KB 为阈值批量外泄
- 在 CI 环境中自清理:删除 workflow run、重置分支、但保留 GitHub Actions artifact
对开发者和 CI/CD 的影响
| 场景 | 风险 | 建议动作 |
|---|---|---|
| 日常 npm install | 新版本可能含恶意载荷 | 设置 npm config set min-release-age=2 |
| CI/CD pipeline | OIDC token 可被交换为 npm publish token | 限制 OIDC 权限范围 |
| Docker 环境 | 恶意包可尝试容器逃逸 | 使用 rootless 容器引擎 |
| AI 编程代理 | 自动安装依赖时可能触发攻击 | 在 AI agent workflow 中加入安全审计步骤 |
| 多个 Node.js 项目 | 攻击自动感染同机其他项目 | 项目间使用隔离环境 |
防范建议
code
# 设置 npm 最小发布年龄(2 天窗口)
npm config set min-release-age=2
# 使用 pnpm 的 allowBuilds 白名单机制
pnpm config set allow-builds="safe-packages-only"
# CI 环境中限制 OIDC 权限
# GitHub Actions: 不授予 id-token: write 给不需要发布的操作工具词条(触发工具悬浮卡)
正文中自然出现的工具与平台词条:GitHub、VS Code、Docker、Node.js、Python
相关阅读
内链引导
- 想了解如何保护你的 AI 自动化流水线?看:如何给 AI 自动化工作流加质量门
- 真实案例:开发者如何用 AI 工具搭建自动化业务:他用Claude + n8n搭建AI自动化系统,6个月从$4,000到$12,000/月
- 自动化流水线中的安全防护:AI Agent 驱动网站自动化运营:30分钟搭建内容全自动流水线
免责声明:本站案例均为知识分享内容,仅供灵感与参考,不构成收益承诺;由此进行的外部执行与结果请自行判断并承担相应责任。