Miasma 蠕虫攻击红帽的 npm 软件包:检测、轮换、替换
一种自我传播的 npm 蠕虫于 2026 年 5 月 29 日攻击了 7 个 @redhat-cloud-services 软件包。它隐藏了 Claude Code 和 VS Code 中的持久性。 60 秒的检测脚本、轮换过程和结构修复。
2026 年 6 月 1 日,研究人员发现了一种自传播的 npm 蠕虫病毒,该蠕虫自 5 月 29 日起就一直存在。
它的名片是一条提交消息:“瘴气:蔓延的枯萎病”。 受损的红帽
员工 GitHub 帐户将恶意孤儿提交直接推送到 RedHatInsights
存储库、绕过代码审查和七个 @redhat-cloud-services 包
向所有安装它们的人发送了窃取凭据的有效负载。
有两件事让瘴气值得一本新的操作手册。 它运行在 preinstall 钩子,所以它
之前发生火灾 postinstall 即使取消安装也可能会出错。 并且它种植了
persistence inside your developer tools: a SessionStart hook in Claude Code and a
tasks.json 和 "runOn": "folderOpen" 在 VS Code 项目中。 正在删除
node_modules 对那些没有任何作用。 这是检测、旋转、替换剧本。
七个受损的软件包
每一个都在 @redhat-cloud-services 范围:
vulnerabilities-clienttsc-transform-importstopological-inventory-clientsources-clientrule-componentsremediations-clientrbac-client
第 1 步:60 秒内检测
三个信号:树中的受损包、Claude Code 或 VS 中的持久性工件
代码,并伪装成调用的 exfil 流量 api.anthropic[.]com:443/v1/api。 运行
这来自任何主机 npm 和 git:
任何点击都意味着您跳到第 2 步。在您读完之前,蠕虫就完成了收获 建议,因此单个信号足以开始旋转。
持久性技巧是对清理速度太快的团队造成影响的部分。 您可以删除
包坏了,重建 node_modules,并且仍然有一个 SessionStart 挂钩
~/.claude/settings.json that re-runs the payload the next time you open Claude
代码。 审计 ~/.claude/settings.json, .vscode/tasks.json, 和
.github/workflows 在你叫主人干净之前用手。
第 2 步:使用 npm API 确认发布窗口
在固定“安全”版本之前,请检查其发布时间。 恶意版本登陆
5 月 29 日,因此当天或之后发布的任何内容都是可疑的。 botoi npm 端点返回
修改了时间戳和维护者列表,没有 npm install:
一个 modified 时间戳于或之后 2026-05-29 意味着固定到最后一个已知的
在此日期之前发布的好版本,而不是最新版本。 GET 形状缓存在 CDN 上,因此您
可以将其折叠到对每个拉取请求运行的依赖项批准检查中。
第 3 步:旋转,然后擦洗日志
Miasma 收获 GitHub Actions 秘密、npm 令牌、云凭证、Kubernetes 和 Vault 材料、SSH 密钥和 Git 凭据。 按该顺序轮换:npm 令牌停止新发布, GitHub PAT 停止存储库写入,云 IAM 密钥停止数据泄露,然后是 Vault 和 SSH。 不 首先调查; 旋转,然后调查。
有效负载将这些秘密转储到日志中,这些日志流入 Datadog、Sentry 和您的票务中 系统。 通过秘密探测器输送高风险区域,并在它们到达目标之前失败关闭 可查询索引:
第 4 步:用 CI 守卫阻止下一波攻击
Miasma 在你的运行器上需要三样东西:一个妥协的版本,一个运行的生命周期钩子,以及 它可以写入的持久性文件。 打破任何一个。 此 GitHub Actions 检查禁用生命周期 作业的脚本、Miasma 持久性标记失败、标记 Red Hat 范围包,以及 需要运行时依赖的签名出处:
保持 ignore-scripts 默认情况下打开,并为以下软件包维护一个简短的允许列表
合法构建(TypeScript、esbuild、Sharp)。 从未运行的预安装钩子无法收获
任何东西。
第五步:缩小可容纳蠕虫的表面
2026 浪潮中最常中毒的软件包包含单个网络调用:API 客户端、 验证助手和小型实用程序。 每个都是可以删除并替换为的候选者 不运行本地代码的可撤销 HTTPS 调用。
| 类别 | 典型的 npm 依赖 | HTTP 替换 | 突破时的爆炸半径 |
|---|---|---|---|
| 秘密和 PII 扫描 | Secretlint,PII 检测器 | /v1/pii/detect |
轮换一个 API 密钥 |
| 包元数据 | npm 注册表客户端包装器 | /v1/npm/{package} |
轮换一个 API 密钥 |
| 电子邮件验证 | 验证器、深度电子邮件验证器 | /v1/email/validate |
轮换一个 API 密钥 |
| 违规检查 | hibp 客户端包 | /v1/breach/check |
轮换一个 API 密钥 |
要点
-
检查开发工具持久性文件。 瘴气隐藏在
~/.claude/settings.json和.vscode/tasks.json。 拆除包装 不移除挂钩。 -
按发布日期固定。 日期为 当天或之后的七个包裹中的任何内容
2026-05-29 可疑。 使用
/v1/npm/{package}确认。 - 在调查之前先旋转一下。 npm 令牌、GitHub PAT、云密钥、Vault、SSH。 Exfil 在几秒钟内即可完成。
- 默认情况下禁用生命周期脚本。 从未运行的预安装挂钩不能 偷任何东西。
- 缩小表面。 用可撤销的 HTTP 替换单调用 npm 包 端点。 被破坏的密钥在一次请求中失效。
波托伊展品 /v1/npm/{package}, /v1/pii/detect,
/v1/breach/check,以及一个 API 密钥背后大约 200 个其他单一用途端点
5 请求/分钟免费。 将它们连接到您的事件操作手册中,或连接
MCP服务器 致克劳德
编写代码,以便您的助手为您运行检测脚本。 从
交互式文档。
FAQ
- 什么是瘴气供应链攻击?
- Miasma 是一种自我传播的 npm 蠕虫,于 2026 年 6 月 1 日发现,其第一个“Miasma: The Spreading Blight”提交日期为 2026 年 5 月 29 日。受感染的 Red Hat 员工 GitHub 帐户将恶意孤儿提交推送到 RedHatInsights 存储库,绕过代码审查,并发布了 7 个 @redhat-cloud-services npm 软件包,其中包含一个模糊的预安装挂钩,该挂钩会收集凭证和传播 到新的主机。
- 哪些软件包受到损害?
- @redhat-cloud-services 范围下的七个软件包:vulnerability-client、tsc-transform-imports、topological-inventory-client、sources-client、rule-components、remediations-client 和 rbac-client。 如果您的锁定文件在 2026 年 5 月 29 日之后提取了其中任何一个,请将主机视为已受到威胁,并轮换其接触的每个凭据。
- Miasma 与早期的 npm 蠕虫有何不同?
- Miasma 在预安装挂钩中运行,因此它会在安装后触发,甚至取消的安装也可以触发它,并且它会在开发人员工具(而不仅仅是 CI)中植入持久性。 它将 SessionStart 挂钩注入 Claude Code,将带有 runOnfolderOpen 的tasks.json 写入 VS Code 项目,并为每次感染生成唯一加密的有效负载以躲避签名扫描。 删除node_modules并不会将其删除。
- 蠕虫窃取什么并将其发送到哪里?
- GitHub Actions 机密、npm 令牌、云凭证、Kubernetes 和 Vault 材料、SSH 密钥和 Git 凭证。 它将渗漏伪装成端口 443 上的 api.anthropic[.]com 流量,并回退到 GitHub 作为辅助通道,因此仅对未知域进行出口过滤无法捕获它。
- 单一用途的 HTTP API 如何降低这种风险?
- 带有预安装钩子的包可以在每台安装它的机器上运行任意代码。 对单一用途 API 的 HTTPS 调用在本地不运行任何内容,并由可撤销密钥控制。 如果 API 提供商遭到破坏,您可以轮换一把密钥。 如果树中的某个包被破坏,则恶意软件已经执行。 交易的代价是很小的延迟成本和微小的爆炸半径和即时撤销。
开始使用 botoi 构建
150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。