【威胁情报】供应链安全警报:Red Hat Cloud Services 官方 npm 包遭 CI/CD 注入攻击


前言

2026年6月1日,供应链安全平台 StepSecurity 披露了一起严重的供应链攻击事件:攻击者利用 GitHub Actions OIDC 配置漏洞,成功入侵 Red Hat Cloud Services 官方 npm 作用域(@redhat-cloud-services)的 CI/CD 流水线,在构建过程中向 31 个官方 npm 包 植入了恶意后门。这些受影响的包每周下载量超过 10 万次,潜在影响范围广泛。


事件概览

项目 详情
攻击目标 Red Hat Cloud Services npm 作用域(@redhat-cloud-services)
受影响包数量 31 个官方 npm 包
恶意版本示例 @redhat-cloud-services/[email protected]、@redhat-cloud-services/[email protected]、@redhat-cloud-services/[email protected] 等
攻击向量 上游 GitHub Actions OIDC 配置漏洞,入侵 CI/CD 流水线
触发方式 package.json 中添加 preinstall: "node index.js" 钩子,npm install 即自动执行
恶意负载规模 以 host-inventory-client 为例,index.js 达 4.2 MB(经三层混淆),包体积从正常的约 200 KB 膨胀至 5.27 MB
披露与响应 StepSecurity 已通报 Red Hat 官方(RedHatInsights/javascript-clients#492),双方合作移除恶意版本并调查入侵范围

攻击技术细节

1. 入侵途径:CI/CD 流水线劫持

攻击者利用了 GitHub Actions OIDC(OpenID Connect)信任配置漏洞,获取了 RedHatInsights/javascript-clients 仓库 CI/CD 流水线的过度权限。通过伪造或劫持 OIDC 令牌,攻击者能够在构建阶段注入恶意代码,并利用 [email protected] 身份(OIDC 信任的发布账号)将带后门的包推送到 npm 官方仓库。

此类攻击模式与近期披露的 “Mini Shai-Hulud” 等自传播型供应链攻击一脉相承,凸显了 OIDC 最小权限原则缺失的严重风险。

2. 恶意负载能力

经过三层混淆的 index.js 脚本(单文件达 4.2 MB)是一个多阶段凭证窃取器,具备以下高级能力:

  • 凭证窃取:
    • GitHub Actions Runner 内存中的 masked secrets(运行时脱敏机密)
    • 云服务凭证:AWS、GCP、Azure
    • 基础设施令牌:Kubernetes、HashiCorp Vault
    • 开发平台令牌:npm tokens、CircleCI tokens
  • 自我传播:利用窃取到的 npm 发布令牌,自动重新发布带有后门的包,形成供应链蠕虫。
  • 持久化机制:
    • 劫持 Claude Code 会话
    • 注入恶意 VS Code 任务
  • 对抗检测:明确尝试绕过 StepSecurity Harden-Runner 等运行时防护工具。
  • 隐蔽数据外传:将窃取的凭证伪装成 GitHub API commit 流量进行外传,降低被传统网络监控发现的概率。

3. 触发方式与影响范围

恶意代码并非通过显式 require() 或 import 触发,而是利用 npm 生命周期钩子 preinstall。当开发者执行 npm install 安装受影响版本时,恶意脚本会在安装过程中自动执行,无需任何代码改动。

这意味着任何直接或间接依赖这些受污染包的项目,在安装或更新依赖时即可能触发恶意行为。由于受影响包周下载量超过 10 万次,大量使用 Red Hat Cloud Services 前端工具链的企业和个人开发者均面临凭证泄露风险。


受影响包(部分名单)

根据 StepSecurity 披露及后续修正,以下为被确认植入后门的恶意版本(非完整 31 个包列表,示例):

包名 恶意版本
@redhat-cloud-services/host-inventory-client 5.0.3
@redhat-cloud-services/rbac-client 9.0.3
@redhat-cloud-services/eslint-config-redhat-cloud-services 3.2.1
@redhat-cloud-services/frontend-components-remediations 4.9.2
@redhat-cloud-services/frontend-components-utilities 7.4.1
@redhat-cloud-services/rule-components 4.7.2
@redhat-cloud-services/frontend-components 7.7.2
@redhat-cloud-services/frontend-components-config 6.11.3

建议开发者立即检查项目依赖:

npm ls @redhat-cloud-services/
# 或检查 lockfile (package-lock.json / yarn.lock) 中是否包含上述版本

受影响用户应采取的紧急措施

1. 审计与版本回滚

  • 确认项目中是否引入了上述恶意版本。若存在,立即删除并替换为已知的安全历史版本(如 5.0.2、9.0.2 等)。
  • 若使用 lockfile,检查 preinstall 脚本字段是否异常。

2. 全面轮转凭证

如果任何开发或 CI 环境在受影响时间段内执行过 npm install(包括间接依赖更新),必须立即轮转以下凭证:

  • 所有云服务访问密钥(AWS、GCP、Azure)
  • GitHub、npm、CircleCI 个人访问令牌及 CI secrets
  • Kubernetes 服务账户令牌、Vault 令牌
  • 任何可能被 Runner 内存暴露的机密信息

3. 加固 CI/CD 流水线

  • OIDC 最小权限原则:限制 OIDC 令牌的可信发行方和受众,避免授予过度权限。
  • 启用 Harden-Runner:使用 StepSecurity Harden-Runner 或其他运行时防护工具,监控并阻止异常的 Runner 进程行为。
  • 工作流完整性校验:对构建产物进行签名或哈希校验,确保发布物来自预期的、未被篡改的流水线。
  • 隔离 Runner 环境:敏感作业应在临时、隔离的 Runner 中执行,避免持久化凭证。

4. 建立供应链持续监控机制

  • 监控包体积异常:定期对比依赖包版本的大小变化(如通过 npm pack + 脚本检测)。
  • 审计生命周期脚本:对 preinstall、postinstall、prepublish 等脚本进行自动告警。
  • 使用依赖锁定工具:如 npm ci + 锁文件、pnpm 的 --frozen-lockfile,避免意外引入恶意更新。

总结与行业反思

此次针对 Red Hat Cloud Services 的供应链攻击,是 npm 生态中 CI/CD 流水线劫持 类攻击的典型案例。攻击者不再依赖钓鱼开发者账户或依赖混淆,而是直接渗透了 上游构建基础设施——即官方发布流程本身。

核心教训:

  • OIDC 信任配置不可忽视:过度宽松的 OIDC 权限使流水线成为单点突破口。
  • 生命周期钩子是高风险入口:preinstall 等脚本可绕过代码审查,在安装阶段直接执行任意代码。
  • 凭证环境需深度隔离:Runner 内存中的 masked secrets 并非绝对安全,攻击者仍可通过内存扫描窃取。

行业建议:开源维护者应全面审查其 CI/CD 安全配置,实施构建环境隔离、产物签名、OIDC 最小权限,并采用运行时完整性检测工具。开发者则应强化“零信任”依赖管理意识,对任何自动执行的依赖安装行为保持警惕。


本文基于 StepSecurity 官方博客(2026年6月1日)及后续威胁情报综合整理。完整技术细节(反混淆后的负载、C2 域名、IoC 列表等)请关注 StepSecurity 后续更新。


手机扫码阅读

孚盟云CRM Price_detail.aspx SQL注入漏洞

【威胁情报】智普输入法Windows安装包疑似遭供应链投毒,数字签名异常

评 论