基于公共CDN的npm供应链投毒攻击研究——以UNPKG托管钓鱼基础设施为例

摘要:

近年来,随着开源生态的快速发展,第三方软件包管理器成为网络攻击的重要跳板。本文聚焦于一起大规模恶意npm包滥用事件,分析攻击者如何利用UNPKG内容分发网络(CDN)实现钓鱼基础设施的快速部署与隐蔽分发。研究发现,至少175个恶意npm包通过拼写劫持(typosquatting)和名称投毒等手段累计获得超2.6万次下载,其内部静态资源经由UNPKG CDN缓存后被用于托管伪造的SaaS登录页、重定向脚本及用户跟踪组件。该模式有效规避了传统基于域名信誉与托管平台黑名单的安全检测机制,显著提升攻击存活时间与投递效率。本文系统梳理了攻击技术链路,揭示其在开发环境信任模型、CDN内容传播机制及终端用户行为认知上的多重利用逻辑,并从组织防护、开发实践与平台治理三个层面提出综合防御建议,包括私有镜像部署、URL解包检测、子路径监控、内容安全策略(CSP)强化及FIDO2无密码认证推广。本研究为识别和应对基于可信公共资源的供应链中间层攻击提供了实证案例与技术参考。

关键词: npm;供应链攻击;UNPKG;CDN滥用;钓鱼基础设施;拼写劫持;内容安全策略;FIDO2

一、引言

开源软件已成为现代信息技术体系的核心支撑,Node Package Manager(npm)作为JavaScript生态系统中最广泛使用的包管理平台,截至2025年已收录超过300万个公开软件包,月均下载量逾百亿次。然而,其开放性与自动化特性也为恶意行为者提供了可乘之机。近年来,针对软件供应链的攻击事件频发,其中以依赖混淆(dependency confusion)、拼写劫家住持(typosquatting)为代表的包投毒攻击持续增长,严重威胁企业开发环境与终端用户安全。

现有研究多集中于恶意代码注入、构建过程篡改或直接远程代码执行(RCE)等攻击路径,但对攻击者如何利用可信第三方服务作为内容分发载体的研究仍显不足。近期披露的一起大规模npm供应链滥用事件显示,攻击者并未试图在客户端执行复杂恶意逻辑,而是将npm包作为“静态资源容器”,借助UNPKG等公共CDN实现钓鱼页面的高可用、低延迟托管,从而绕过传统安全检测体系。

本文以该事件为研究对象,深入剖析此类“轻代码+重分发”型攻击的技术架构、传播机制与防御盲区,旨在揭示现代钓鱼攻击向供应链中游迁移的趋势,并提出具备可操作性的缓解措施。研究不仅有助于提升组织对非传统攻击面的认知,也为CDN服务提供商优化内容审核机制提供决策依据。

二、背景与相关工作

2.1 npm 生态与安全挑战

npm是Node.js官方包管理工具,开发者可通过npm install命令从中央仓库下载并集成第三方库。由于注册机制开放且缺乏严格审查,攻击者常通过以下方式实施投毒:

拼写劫持(Typosquatting):发布与知名包名称相似的恶意包(如lodash-sorted冒充lodash),诱导开发者因输入错误而安装;

名称抢注(Name Squatting):抢占未注册的潜在高价值包名,等待误用;

版本劫持(Version Hijacking):接管废弃维护的合法包,注入恶意代码。

已有研究表明,此类攻击可导致敏感信息泄露、构建污染甚至横向渗透[1]。

2.2 内容分发网络(CDN)的信任模型

CDN通过在全球部署边缘节点,加速静态资源加载,广泛应用于前端开发。UNPKG作为一个无需认证即可访问的公共CDN服务,允许用户通过标准URL格式(https://unpkg.com/<package-name>@<version>/<file>)直接引用任意npm包中的文件。

由于UNPKG域名本身被列入多数企业防火墙白名单,其托管的内容常被视为“可信”。然而,这种信任并未延伸至具体路径层级,形成了“域级信任、路径失控”的安全缺口。

三、攻击模式分析

3.1 攻击总体架构

本次事件中,攻击者构建了一个模块化、自动化的攻击流水线,整体流程如下:

恶意包创建:批量生成具有迷惑性名称的npm包(如@core/update-notifier、react-auth-ui),内部仅包含HTML、CSS、JavaScript等静态资产;

资源上传:将伪造的Microsoft 365、Okta、Salesforce等企业SSO登录页及相关JS脚本打包提交至npm;

CDN托管触发:利用UNPKG的即时解析机制,使外部可通过HTTPS直接访问这些静态资源;

钓鱼投放:将UNPKG链接嵌入鱼叉式钓鱼邮件,诱骗目标访问;

凭证收集与二次攻击:用户输入凭据后,数据被回传至攻击服务器,并可能触发电话社工引导“重新登录”。

3.2 技术特征详析

(1)包命名策略:拼写劫持与语义伪装

通过对175个恶意包的命名统计发现,83%采用拼写变体(如log4js-core vs log4j),12%模仿主流UI框架(material-login-form),其余则伪装成更新通知类工具。此类命名极大增加了开发者在依赖管理中误引入的风险。

(2)UNPKG 利用机制

UNPKG的设计初衷是方便前端开发者快速引入库文件,例如:

https://unpkg.com/react@18.2.0/umd/react.production.min.js

攻击者利用此机制,构造如下链接:

https://unpkg.com/microsoft-login-fake@1.0.3/dist/index.html

该页面一经请求即被CDN缓存,具备高可用性与地理加速能力,且因主域名可信,多数Web代理不会进行深度内容检查。

(3)规避检测设计

无运行时恶意代码:包本身不包含preinstall或postinstall钩子,避免触发npm审计告警;

动态路径生成:使用版本号和哈希值随机化URL路径,降低IOC复现可能性;

短期存活策略:单个包平均存活时间为72小时,在被举报下架前已完成主要分发任务;

自动化上架:通过脚本批量注册账号、生成包元数据并发布,形成“打地鼠”式对抗。

3.3 攻击影响范围

据npm官方数据接口统计,这175个包总下载量达26,148次,主要集中在亚太与北美地区。受害者多为中小型科技公司及初创企业的开发人员,其本地开发环境通常未配置严格的包源控制策略。部分案例显示,攻击者成功窃取企业邮箱凭证后,进一步实施商务邮件欺诈(BEC),造成财务损失。

此外,UNPKG作为公共服务,因频繁托管恶意内容而面临声誉风险,平台方不得不加强内容扫描与人工审核投入,间接抬高运营成本。

四、攻防机理探讨

4.1 信任链断裂点分析

该攻击暴露了当前安全模型中的三个关键断裂点:

层级

信任假设

实际风险

包管理器

npm官方仓库经过基础校验

恶意包可通过合规流程发布

网络传输

UNPKG为知名CDN,IP/域名信誉良好

子路径内容不可控

终端用户

浏览器地址栏显示“https://unpkg.com”

忽视具体路径指向钓鱼页

这一“逐层信任累积”现象使得最终页面虽具高度欺骗性,却能在多个环节顺利通行。

4.2 检测难点

传统安全机制对此类攻击响应滞后,原因如下:

静态IOC失效:每次攻击使用新包名与版本,IP与URL难以归一;

沙箱逃逸:恶意内容仅在浏览器渲染时激活,安装阶段无异常行为;

CDN缓存干扰:边缘节点返回内容可能与源站不同步,增加取证难度。

五、防御对策建议

5.1 组织级防护

部署私有包镜像与许可名单

企业应建立内部npm镜像(如Verdaccio、Nexus Repository),仅允许从预审清单中安装依赖。结合SCA(Software Composition Analysis)工具定期扫描项目依赖树。

安全网关增强检测能力

在Web代理或SWG(Secure Web Gateway)中引入URL解包机制,对形如unpkg.com/*/@*/*的请求提取实际包名与文件路径,并查询威胁情报库。同时支持对CDN二级路径实施行为沙箱分析。

启用内容完整性校验(SRI)与CSP

对所有引入的第三方资源,前端页面应配置Subresource Integrity(SRI)哈希值,防止内容被篡改。同时实施严格的Content Security Policy(CSP),限制脚本仅能从可信来源加载:

Content-Security-Policy: script-src 'self' https://trusted-cdn.example.com;

5.2 开发者实践

避免直接在生产环境中使用npm install <unknown-package>;

定期审查package.json依赖项,移除未使用或来源不明的包;

对收到的“包更新提醒”邮件保持警惕,通过官方文档或社区渠道核实,而非点击邮件链接。

5.3 平台治理建议

UNPKG及其他类似服务可采取以下措施:

引入机器学习模型对新发布包的内容类型进行分类,识别纯静态资源包的异常聚集;

对高频访问的非主流包实施延迟缓存或人工审核;

提供API供安全厂商订阅新包发布事件,提升威胁共享效率。

5.4 认证机制升级

即便凭证被盗,若系统采用FIDO2标准的无密码认证(Passkey)或一次性设备绑定密钥,则攻击者无法复用所获用户名/密码登录。企业应逐步推进MFA尤其是硬件密钥的普及,从根本上降低凭证盗窃的价值。

六、结论

本文通过对一起涉及175个恶意npm包、利用UNPKG CDN托管钓鱼页面的大规模攻击事件进行系统分析,揭示了一种新型供应链中间层滥用模式。攻击者不再追求在目标系统中持久驻留,而是将开源生态与公共CDN结合,构建出高效、隐蔽且具备抗打击能力的攻击基础设施。

该模式的成功源于对现有安全边界划分的精准把握:npm包审核机制侧重运行时行为,而CDN服务则关注可用性而非内容语义,两者之间的协同空白被充分利用。研究结果表明,未来防御策略需超越传统的“黑白名单”思维,转向细粒度的内容可见性、跨层级的行为关联分析以及主动的信任降级机制。

尽管当前事件已被部分遏制,但其所代表的技术路径具有高度可复制性。建议组织尽快评估自身在开发供应链与第三方资源引用方面的暴露面,并结合技术、流程与人员培训构建纵深防御体系。同时呼吁公共CDN服务商加强内容治理责任,共同维护开源生态的健康运行。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芦熙霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值