文章摘要
2025年9月8日,npm上的18个热门包被发现包含恶意代码,这些包每周下载量超过20亿次。恶意代码会在客户端执行,悄无声息地拦截并操纵浏览器中的加密和Web3活动,尤其是钱包交互。受影响的包包括chalk、debug等高使用率工具。
文章总结
npm 包 debug 和 chalk 被恶意代码入侵
发布日期:2025年9月8日
主要内容:
2025年9月8日,Aikido 的安全团队发现 npm 上多个热门包被植入了恶意代码。这些包包括 debug、chalk 等,每周下载量总计超过20亿次。恶意代码会在用户访问网站时在浏览器中执行,悄无声息地拦截加密货币和 Web3 活动,篡改钱包交互,并将支付目的地重定向到攻击者控制的账户,用户几乎无法察觉。
受影响的包:
backslash(每周下载量:0.26m)chalk-template(3.9m)supports-hyperlinks(19.2m)has-ansi(12.1m)simple-swizzle(26.26m)color-string(27.48m)error-ex(47.17m)color-name(191.71m)is-arrayish(73.8m)slice-ansi(59.8m)color-convert(193.5m)wrap-ansi(197.99m)ansi-regex(243.64m)supports-color(287.1m)strip-ansi(261.17m)chalk(299.99m)debug(357.6m)ansi-styles(371.41m)
恶意代码的工作原理:
- 注入浏览器:恶意代码通过修改
fetch、XMLHttpRequest和钱包 API(如window.ethereum、Solana 等)来拦截网络流量和钱包活动。 - 监控敏感数据:扫描网络响应和交易负载,识别钱包地址或转账信息。
- 篡改目标地址:将合法的支付地址替换为攻击者控制的地址,并使用“相似”地址来掩盖篡改行为。
- 劫持交易:在用户签署交易前篡改以太坊和 Solana 的交易参数,即使界面显示正确,实际交易也会将资金转移到攻击者账户。
- 保持隐蔽:如果检测到加密货币钱包,恶意代码会避免在界面上进行明显的篡改,以减少用户的怀疑。
应对措施:
Aikido 建议开发者使用 safe-chain 工具来避免此类攻击。此外,开发者应定期检查依赖包的安全性,确保没有使用受感染的版本。
事件后续:
在 Aikido 通知维护者后,维护者表示已经意识到账户被入侵,并开始清理受感染的包。截至发稿时,simple-swizzle 包仍然存在恶意代码。维护者还透露,钓鱼邮件来自 support@npmjs.help,并提供了邮件的截图。
入侵指标:
- 钓鱼域名:
npmjs.help - 受影响的包版本:包括
backslash0.2.1、chalk-template1.1.1、debug4.4.2 等。
总结:
此次事件再次提醒开发者,依赖包的安全性至关重要。恶意代码可以通过篡改交易地址和拦截网络流量,悄无声息地窃取用户的资金。开发者应保持警惕,定期检查依赖包,并使用安全工具来防范此类攻击。
评论总结
评论主要围绕以下几个观点展开:
钓鱼攻击与账户被黑:
- 作者junon承认自己因钓鱼邮件导致账户被黑,并提供了相关链接和受影响包的列表。他表示这是一次有针对性的攻击,且NPM账户目前无法访问。
- 引用:"Hi, yep I got pwned. Sorry everyone, very embarrassing."
- 引用:"It looks and feels a bit like a targeted attack."
钓鱼攻击的普遍性与防范:
- 多位评论者提到钓鱼邮件的真实性,强调即使是有经验的开发者也可能中招。建议使用密码管理器和双因素认证(2FA)来增强安全性。
- 引用:"It was a 2FA reset email that looked shockingly authentic."
- 引用:"A 2FA phishing email sending me to some unknown domain wouldn’t show my password manager on the site."
供应链攻击与NPM生态系统的脆弱性:
- 评论者指出NPM生态系统中的依赖包过多,导致供应链攻击的风险增加。建议NPM引入延迟安装机制,避免立即安装新发布的包。
- 引用:"Why do js people import someone else’s npm module for every little trivial thing?"
- 引用:"NPM should implement a feature where it doesn’t install/upgrade packages newer than 3 days."
恶意代码的具体行为:
- 恶意代码通过替换加密货币地址来窃取资金,且选择与原始地址视觉上最相似的地址进行替换,增加了用户识别的难度。
- 引用:"It actually calculates the Levenshtein distance between the legitimate address and every address in its own list."
- 引用:"The malware steals crypto in end-user browsers."
开发者与用户的应对措施:
- 建议开发者使用
npm audit来检测漏洞,并考虑使用本地镜像或直接从Git仓库导入包,以减少供应链攻击的风险。 - 引用:"As of this morning,
npm auditwill catch this." - 引用:"The alternative is to import packages directly from the (git) repository."
- 建议开发者使用
总结:评论者普遍认为钓鱼攻击和供应链攻击是NPM生态系统中的重大威胁,建议通过加强认证、延迟安装、使用审计工具等方式来降低风险。同时,恶意代码的复杂性和针对性也引发了广泛关注。