Hacker News 中文摘要

RSS订阅

Keyv及其友人在活跃的Shai-Hulud供应链攻击中遭入侵 -- Keyv and friends compromised in active Shai-Hulud supply chain attack

文章摘要

2026年8月4日,攻击者入侵了npm库keyv维护者的GitHub账户,向多个广泛使用的缓存库注入凭证窃取蠕虫,并发布恶意版本,导致整个包家族被感染,社区传播活跃。

文章总结

2026年8月4日,攻击者入侵了npm库keyv维护者的GitHub账户,并向整个软件包家族注入了窃取凭证的蠕虫病毒。keyv是一个键值存储库,每周下载量约1.27亿次。同一维护者还拥有cacheable(月下载量2900万)、flat-cache(月下载量5.65亿)、file-entry-cache(月下载量5.57亿)等多个广泛使用的缓存工具,这些工具均在此次攻击中受到影响。

攻击者直接将恶意文件推送至main分支并立即发布新版本,因此受污染的版本通过GitHub Actions签名的有效来源发布到了npm。受影响的软件包包括keyv 6.0.0、flat-cache 6.1.24、file-entry-cache 11.1.6、cacheable-request 13.0.20、cacheable 2.5.1等。截至2026年8月4日13:37(欧洲中部夏令时间),至少有868个软件包(涉及1381个版本)被该蠕虫感染,月总安装量超过20亿次。

每个受影响的软件包都新增了两个文件:setup.mjsMath_Symbol.js,并在package.json中添加了"preinstall": "node setup.mjs"条目。任何运行npm install的用户都会在安装完成前自动执行setup.mjssetup.mjs是一个高度混淆的投放器,其唯一作用是静默下载Bun JavaScript运行时,并用它执行真正的有效载荷Math_Symbol.jsMath_Symbol.js是一个728KB的高度混淆JavaScript文件,包含窃取凭证的功能:从受害者环境中收集机密信息,加密后外泄至一个描述为“Shai-Hulud: Here We Go Again”的公共GitHub仓库。该有效载荷还具备类似蠕虫的传播功能,可感染其他维护者的软件包。

Math_Symbol.js实现了多组凭证提取器,针对受害者机器上的不同机密存储: - npm令牌:读取~/.npmrc并扫描文件系统中的其他.npmrc文件,提取authToken值,并在外泄前向registry.npmjs.org/-/whoami验证每个令牌。 - GitHub令牌:针对经典PAT(ghp_...)、OAuth令牌(gho_...)、GitHub App服务器到服务器令牌(ghs_...)和JWT OIDC令牌。来源包括~/.config/gh/hosts.yml、环境变量和文件系统扫描。在GitHub Actions运行器上,有效载荷还会执行shell命令,直接从运行器进程内存中读取整个机密存储,并窃取用于npm发布的OIDC令牌。 - AWS凭证:从~/.aws/credentials~/.aws/config解析所有命名配置文件,检查环境变量,尝试EC2实例元数据服务(先IMDSv2后IMDSv1),访问ECS容器元数据端点,并调用AWS Secrets Manager跨多个区域枚举和窃取所有机密。 - Kubernetes机密:读取服务账户令牌、CA证书和命名空间,使用服务账户令牌直接查询Kubernetes API以检索命名空间中的所有机密,同时针对KUBECONFIG~/.kube/config。 - HashiCorp Vault令牌:按优先级顺序检查六个来源,包括VAULT_TOKEN环境变量、~/.vault-token、GitHub Actions运行器路径、容器路径、Kubernetes认证登录和Vault的AWS IAM认证端点。获取令牌后,枚举所有KV存储并读取每个机密。 - Stripe和Slack令牌:扫描Stripe API密钥和Slack令牌。 - 通用文件系统扫描:跨平台扫描器(macOS vs Linux)运行约200个glob模式,针对.env文件、私钥文件、SSH密钥和配置、Terraform状态文件、Docker注册表凭证文件、KeePass数据库、VPN配置、IDE配置文件等。超过5MB的文件被跳过,最多使用64个并发读取。还对所有扫描文件应用通用正则表达式引擎,标记PEM私钥、SSH公钥、Azure存储密钥、带嵌入式凭证的数据库连接字符串等。

对于Aikido用户,可在中央信息流中筛选恶意软件问题,这将显示为100/100的严重问题。Aikido每晚重新扫描,但建议立即触发手动重新扫描。非Aikido用户可以创建账户并连接仓库,免费计划中包含恶意软件覆盖。Aikido的设备保护功能可为整个团队提供软件包安装的可见性和控制,涵盖浏览器扩展、代码库、IDE插件和构建依赖。未来防护可考虑Aikido Safe Chain(开源),它拦截npm、npx、yarn、pnpm和pnpx命令,并在安装前检查软件包。

攻击指标包括:文件setup.mjs(SHA-256: 54dc7ea54a1317cca0e890a2770630cf7fa6c97813e0cb9d2caa93012b350668)、社区传播版本(SHA-256: fd3ca4007b225fdf8de7af4345a19179d5efa8c4bb9205f88cda806e5684b1eb)、Math_Symbol.jsmath_init.js(SHA-256: 9fc2570b7cef51c1b8df116d144d11ff4096357be7d2c4c6367cfc2509cf1bcc);网络端点https://npm-cache.com:443/router;以及任何描述包含“Shai-Hulud: Here We Go Again”的公共GitHub仓库。

评论总结

根据评论内容,主要观点和论据总结如下:

1. 对GitHub/NPM安全机制的批评
- 评论1(avaer)指出GitHub未对公开仓库中明显可疑的上传行为(如钓鱼链接)进行主动拦截,认为其AI能力足以快速实现分类器。
- 关键引用:"I am kind of surprised GitHub doesn't seem to have built a simple classifier for public repos... so it can't be used as a rendezvous."
- "Surely Github's software is good enough that an intern can slop the 80/20 together in a day?"
- 评论4(ftlps)批评GitHub仍允许release功能,认为应手动构建tar归档并检查密钥泄露。
- 关键引用:"I don't know why GitHub still allows the release feature. It is complete insanity."

2. 对攻击影响数据的质疑
- 评论2(vlovich123)认为文章引用“每月20亿次安装”是误导性数据,指出高安装量多来自CI环境(无实际密钥),质疑实际受影响用户数。
- 关键引用:"Who cares how many installations there are per month normally? The high install numbers are almost certainly from running in CI where such secrets don't exist."

3. 对预安装/后安装钩子的反对
- 评论3(xnorswap)主张应禁止新增预安装/后安装钩子,并建议立即暂停所有此类功能。
- 关键引用:"any package adding a pre-install hook where there previously was not one should be denied... It's time pre-install / post-install hooks were killed off."

4. 对AI防御能力的期待与讽刺
- 评论6(cute_boi)建议NPM使用ChatGPT/Claude检测恶意包并限制其修改。
- 关键引用:"npm can use chatgpt/claude for each published package to detect these types of attack?"
- 评论8(ethanwillis)讽刺AI公司声称能力强大却未用于防御公共基础设施。
- 关键引用:"with all this AGI swirling around... you think one of these companies would demonstrate just how capable they are by defending public infrastructure."

5. 对开发者行为的批评
- 评论10(Catloafdev)质疑开发者为何仍盲目更新NPM包,认为此类事件应促使他们改变习惯。
- 关键引用:"How many instances of this are required before npm package maintainers learn?"

6. 其他观点
- 评论5(mittermayr)询问是否有grep命令可检查node_modules中是否包含恶意文件。
- 评论9(thinkingemoji)讽刺NPM是唯一频繁发生此类问题的包管理器。

平衡性总结
- 多数评论批评平台(GitHub/NPM)安全机制不足,呼吁技术改进(如AI检测、禁用钩子)。
- 部分评论质疑攻击影响数据的真实性,并反思开发者行为。
- 少数评论对AI防御能力持讽刺态度,认为其未兑现承诺。