近日,网络安全领域再度拉响警报。一支由多家安全厂商组成的联合研究团队披露了一种针对JavaScript生态系统的复杂供应链攻击手法,该攻击同时瞄准了最流行的包管理器NPM和持续集成/持续部署平台GitHub Actions。研究人员指出,攻击者利用NPM包的隐蔽后门与GitHub Actions工作流中的权限漏洞,构建了一条“自动传播、持续感染”的威胁链条,已对数千个开源项目构成潜在风险。
攻击手法:从“依赖投毒”到“行动劫持”
研究团队在报告中详细还原了攻击路径。攻击者首先在NPM上发布看似无害的辅助性包,例如日志记录工具或日期格式化函数,这些包通常拥有较高的下载量,以降低使用者警惕。随后,攻击者通过向这些包中注入混淆后的恶意代码,实现“依赖投毒”。与以往不同的是,该恶意代码并不立即执行破坏动作,而是设计为在特定环境下触发——当包被引入含有GitHub Actions工作流的仓库时,恶意代码会检测CI/CD环境变量,进而窃取工作流中暴露的GITHUB_TOKEN等凭证。
更危险的一步在于“行动劫持”。一旦凭证被窃,攻击者便利用GitHub Actions的pull_request_target触发机制,通过伪造的PR评论或分支合并请求,在合法仓库中执行任意工作流。这允许攻击者绕过代码审查,直接篡改构建产物或植入附加后门。由于GitHub Actions默认的令牌权限可能包含写入仓库的权限,攻击者可对多个下游项目实施“连锁式”污染。
规模与影响:供应链“冰毒”式扩散
据初步统计,已有超过40个NPM包被确认为该攻击链条的组成部分,其中部分包的累计下载量超过10万次。受影响的项目覆盖前端框架、CLI工具、甚至部分DevOps脚本库。更令人担忧的是,由于GitHub Actions的缓存机制,即便被污染的包被删除,旧版本仍可能在未更新的工作流中持续运行,形成“残留威胁”。
安全公司Snyk的漏洞研究员指出:“这种攻击不再是简单的挖矿或勒索,而是一种‘冰毒’式的供应链渗透——它让受害者自身成为传播工具。一个被攻陷的CI/CD流水线,可能成为攻击者向整个依赖树投放后门的跳板。” 多位开发者反映,其仓库中出现了未经授权的Actions运行记录,但最初被误认为是正常的自动化测试。
业界反应与防御升级
事件曝光后,GitHub安全团队迅速响应,已临时封禁了确认被污染的NPM包及其相关账户,并更新了Actions的令牌权限策略——要求使用更细粒度的读写分离权限,同时默认禁用pull_request_target对复刻仓库的信任。NPM方面则加强了发布包的静态分析扫描,特别是针对可疑的CI环境检测代码。
不过,安全专家提醒,单纯依靠平台方的修复不够。企业级用户应立刻检查自己的GitHub Actions工作流,确认是否使用了高权限的GITHUB_TOKEN,并建议将敏感令牌替换为短期有效的、最小权限的OIDC令牌。对于开源维护者,建议启用“代码签名验证”和“工作流审批门”,对任何包含pull_request_target的变更进行人工审核。
长期建议:构建“零信任”供应链
本次攻击再次凸显了软件供应链安全的脆弱性。尽管NPM和GitHub Actions为开发效率做出了巨大贡献,但彼此之间缺乏标准化的安全互认机制。安全社区呼吁建立“包行为证书”和“CI/CD运行时签名”标准,让每一次依赖安装和流水线执行都可追溯、可验证。同时,开发者应定期使用npm audit和GitHub安全警报,并考虑引入Dependabot的自动更新策略,但需注意对更新来源的校验。
在数字化转型加速的今天,供应链攻击已从“偶发事件”演变为“常态威胁”。只有将安全嵌入每一行代码、每一次构建和每一次部署,才能在这场无硝烟的战争中守住数字世界的根基。