
一场复杂且影响广泛的供应链攻击已波及NPM生态系统,导致广受欢迎的@ctrl/tinycolor包受到影响,该包每周的下载量超过200万次。
此次攻击还影响了来自不同维护者的40多个其他软件包,植入了一种危险的自传播恶意软件,该软件旨在窃取开发者的凭证并在软件领域内自行扩散。
这一事件是在用户发现GitHub上的可疑活动并迅速向开源社区发出警报后才曝光的。
被识别为@ctrl/tinycolor的4.1.1和4.1.2版本的恶意软件很快就从NPM注册表中被移除,但在此之前它们已经被传播出去了。

StepSecurity的安全分析师随后提供了一份关于此次攻击的详细技术分析,证实了其严重性和独特的传播方式。
自我传播的恶意软件感染NPM包
这种攻击的独特之处在于其自动化的、类似蠕虫的行为。该恶意软件包含一个“自我传播引擎”,能够主动寻找并感染其他软件包。
一旦开发者的电脑遭到入侵,恶意软件就会利用一个名为NpmModule.updatePackage的函数,将其恶意代码注入到同一作者维护的其他项目中。
这会产生一种级联效应,使得威胁能够在相互关联的软件依赖网络中迅速传播,而无需攻击者进行进一步的手动干预。
该恶意软件的主要目标是恶意窃取凭证。攻击者重新利用了一款合法的秘密扫描工具TruffleHog,在受感染的系统上搜寻敏感信息。它专门针对多种有价值的开发者秘密,包括:
- NPM 身份验证令牌
- GitHub 个人访问令牌
- 亚马逊云服务(AWS)访问密钥
- 谷歌云平台(GCP)服务凭证
- 微软Azure凭据
为确保自身持续存在,该恶意软件会创建一个名为.github/workflows/shai-hulud-workflow.yml的恶意GitHub Actions工作流文件。
这个文件使攻击者能够维持对已受攻击仓库的访问权限,可能会随着时间的推移再次感染这些仓库或窃取更多数据。所有被盗数据都被输送到webhook.site服务上一个公开暴露的端点。
缓解措施
针对这一严重威胁,安全专家正敦促开发人员和组织立即采取行动。
第一步是检查所有项目中是否存在受感染的包及其恶意版本。如果发现,应立即将其移除或降级到安全版本。
鉴于该恶意软件具有强大的凭证窃取能力,轮换所有可能暴露的机密信息至关重要。这包括NPM令牌、GitHub访问令牌,以及可能存在于开发系统或持续集成/持续部署系统(CI/CD系统)上的所有云服务提供商凭证(AWS、Azure、GCP)。
最后,建议对基础设施进行全面审计。开发人员应扫描其代码仓库,查找恶意的shai-hulud-workflow.yml文件,检查近期的NPM发布活动,确认是否存在未授权的包发布,并监控出站网络流量,留意是否有连接到已知数据泄露端点的情况。
根据提供的信息,以下是受影响的软件包及其受影响版本的列表。
| 受影响的包 | 恶意版本 |
|---|---|
| @ctrl/tinycolor | 4.1.1,4.1.2 |
| @ctrl/deluge | 7.2.2 |
| angulartics2 | 14.1.2 |
| @ctrl/ golang模板 | 1.4.3 |
| @ctrl/磁力链接 | 4.0.4 |
| @ctrl/ngx-codemirror | 7.0.2 |
| @ctrl/ngx-csv | 6.0.2 |
| @ctrl/ngx-emoji-mart | 9.2.2 |
| @ctrl/ngx-rightclick | 4.0.2 |
| @ctrl/qbittorrent | 9.7.2 |
| @ctrl/react-adsense | 2.0.2 |
| @ctrl/shared-torrent | 6.3.2 |
| @ctrl/种子文件 | 4.1.2 |
| @ctrl/transmission | 7.3.1 |
| @ctrl/ts-base32 | 4.0.2 |
| 相遇游乐场 | 0.0.5 |
| json-rules-engine-简化版 | 0.2.4 |
| @nativescript-community/gesturehandler | 2.0.35 |
| @nativescript-community/sentry | 4.6.43 |
| @nativescript-community/text | 1.6.13 |
| @nativescript-community/ui-collectionview | 6.0.6 |
| @nativescript-community/ui-drawer | 0.1.30 |
| @nativescript-community/ui-image | 4.5.6 |
| @nativescript-community/ui-material-bottomsheet | 7.2.72 |
| @nativescript-community/ui-material-core | 7.2.76 |
| @nativescript-community/ui-material-core-tabs | 7.2.76 |
| ngx-color | 10.0.2 |
| ngx-吐司 | 1.9.0.2 |
| ngx-trend | 8.0.1 |
| react-complaint-image | 0.0.35 |
| react-jsonschema-form-条件语句 | 0.3.21 |
| react-jsonschema-form-附加组件 | 1.0.4 |
| rxnt认证 | 0.0.6 |
| rxnt-healthchecks-nestjs | 1.0.5 |
| rxnt-kue | 1.0.7 |
| swc插件-组件标注 | 1.9.2 |
| ts-高斯 | 3.0.6 |
1. 本版块文章内容及资料部分来源于网络,不代表本站观点,不对其真实性负责,也不构成任何建议。
2. 部分内容由网友自主投稿、编辑整理上传,本站仅提供交流平台,不为该类内容的版权负责。
3. 本版块提供的信息仅作参考,不保证信息的准确性、有效性、及时性和完整性。
4. 若您发现本版块有侵犯您知识产权的内容,请及时与我们联系,我们会尽快修改或删除。
5. 使用者违规、不可抗力(如黑客攻击)或第三方擅自转载引发的争议,联盟不承担责任。
6. 联盟可修订本声明,官网发布即生效,继续使用视为接受新条款。
