红帽成 npm 安全漏洞受害者
红帽(Red Hat)成为 npm 安全漏洞的受害者,该公司已移除受影响的软件包,使用者需检查是否使用了 `@redhat - cloud - services` npm 命名空间。
npm 仓库命名空间(JavaScript 运行时环境 Node.js 的包管理器)因安全漏洞而声名狼藉。刚与 IBM 共同宣布“Project Lightwell”(一项由人工智能驱动、旨在发现并修复开源软件漏洞的计划)的红帽,自身也遭遇了 npm 问题。此外,开源安全状况混乱,IBM 和红帽押注 50 亿美元和 2 万名工程师解决这一问题。
红帽公司 `@redhat - cloud - services` 命名空间中的数十个 JavaScript 软件包被植入窃取凭证的恶意软件,目标是红帽开发者以及持续集成和持续部署(CI/CD)系统中的机密信息。安全研究公司 Aikido 报告称,该命名空间“被一个窃取凭证的蠕虫病毒入侵。总计 32 个软件包的 96 个版本受到影响,每周累计下载量达 116,991 次”。据红帽安全团队称,有人利用被入侵的 GitHub 账户,将恶意代码注入红帽 GitHub 组织维护的软件包中。受影响的软件包是前端库,在红帽产品构建过程中被编译并打包到容器镜像中。
具体发生了什么?
恶意软件似乎通过 npm 预安装钩子添加:每当开发者或构建系统为受影响的软件包运行“npm install”命令时,恶意代码就会自动执行。据微软威胁情报团队称,每个受影响的软件包都添加了预安装脚本,该脚本会运行臃肿且高度混淆的 `index.js` 加载器,然后下载并执行有效负载,该负载旨在从 npm、GitHub、AWS、SSH 等环境中窃取机密信息。
研究人员很快将此次攻击与基于 Mini Shai - Hulud 恶意软件的更广泛攻击活动联系起来。Mini Shai - Hulud 是早期供应链事件中使用的通过 npm 传播的蠕虫病毒。在红帽此次事件中,多份报告将该有效负载称为名为 Miasma 的新变种,它保留了 Mini Shai - Hulud 的自我传播行为,同时增加了更多混淆和多阶段加载设计。
这种蠕虫病毒危害不止于窃取凭证。一旦它在可访问其他 npm 软件包的机器上运行,就会识别当前用户可发布的每个软件包,并使用相同的恶意预安装有效负载重新发布这些软件包。也就是说,每个受害者都会变成新的攻击者。安全公司表示,这种“可传播”行为使与红帽相关的命名空间迅速受到污染。一些估计显示,几分钟内就有超过 30 个软件包被植入后门。
虽然红帽尚未发布详细的事后分析报告,但独立分析指出,被入侵的 GitHub 基础设施是初始攻击途径。Semgrep 等安全研究公司报告称,恶意的红帽范围软件包是使用与 `RedHatInsights/javascript - clients` 仓库关联的 GitHub Actions OpenID Connect(OIDC)令牌推送的。攻击者进入系统后,将预安装钩子注入多个软件包和版本中,且通常在公共源代码仓库中没有相应更改,这是构建管道被入侵的典型特征。
被执行的代码会扫描并试图窃取以下信息:
- GitHub Actions 机密信息和访问令牌
- GitHub SSH 密钥和个人访问令牌
- AWS、GCP 和 Azure 云凭证
- Kubernetes 配置和令牌
- HashiCorp Vault 令牌和其他秘密管理器数据
- npm 和 CircleCI 令牌,以及存储在环境变量或配置文件中的其他 CI/CD 机密信息
安全供应商警告称,任何在开发者工作站、构建代理或 CI 运行器上安装了受影响版本的用户,都应假定该环境中所有可访问的令牌和凭证可能已落入攻击者手中。
开发者应对建议
对于开发者而言,多家公司给出的建议很明确:
- 立即轮换机密信息。
- 审计 GitHub 和云活动,排查可疑访问。
- 从已知良好的基线重新构建任何可能受污染的环境。
红帽方面表示:“我们立即展开了调查,并从 npm 注册表中移除了这些软件包。这些软件包仅限于内部开发使用,恶意代码从未通过 `console.redhat.com` 系统向客户发布。虽然调查仍在进行中,但我们尚未发现对客户或合作伙伴环境以及红帽生产系统造成影响。”简而言之,情况本可能更糟。
红帽产品安全部门此前在关于 npm 供应链攻击的更一般性指导中指出,其产品严重依赖严格的版本锁定和内部镜像,且之前受影响的 npm 软件包从未被纳入受支持的红帽软件中。然而,在近期事件发生后,安全研究人员敦促各组织不要仅仅因为使用红帽产品就认为自己是安全的。他们认为,任何涉及被植入后门软件包的构建或开发工作流程都应被视为可能已被入侵。
你现在应该怎么做?
尽管红帽向大家保证恶意代码没有进入公共领域,但仍需保持警惕。如果你依赖红帽云服务工具,或者曾经在构建过程中引入过 `@redhat - cloud - services` 软件包,建议你扫描依赖树,查找受影响的版本,阻止已知的不良版本,并在必要时降级或用可信版本替换它们。同时,建议你假定安装了这些软件包的任何环境中的机密信息可能已被泄露,并轮换所有相关凭证,例如 GitHub 个人访问令牌(PATs)、SSH 密钥、云提供商 API 密钥和 CI 令牌。
从长远来看,红帽的 npm 事件再次表明,npm 仓库并非完全值得信赖。如今,即使是重量级的 Linux 和云服务供应商也明显容易受到可传播的 npm 恶意软件的攻击,这给 npm 的管理者和主要软件供应商带来了更大的压力,要求他们为其软件包的来源和安全性提供更有力的保证。换句话说,尽管红帽此次事件可能让其有些难堪,但它也凸显了 Project Lightwell 以及类似努力(如 Chainguard 为改善开源安全所做的努力)的重要性。 ”