Cloudflare CDN 严重漏洞复盘:一次可能影响全球12.7%网站的攻击链
近日,Cloudflare 修复了其开源 CDN 服务 CDNJS 中的一个高危漏洞。该漏洞若被恶意利用,可能导致其核心基础设施被完全攻陷,并波及全球 12.7% 的网站。这起事件再次为软件供应链安全敲响了警钟。一、 攻击目标:互联网的“公共图书馆”
CDNJS 是什么?
它是全球第二大 JavaScript 内容分发网络,由 Cloudflare 免费运营。其作用就像一个巨大的“公共软件仓库”,为全球数百万网站提供超过 4000 个常用的 JavaScript 和 CSS 库(如 jQuery、Bootstrap)。网站通过引用 CDNJS 上的链接,就能快速加载这些通用组件,无需自行托管。
为什么它成为高价值目标?
攻击一个主流 CDN,等同于污染了水源。一旦成功,攻击者可以篡改所有使用该 CDN 的网站加载的脚本,从而大规模植入恶意代码,发起供应链攻击,影响范围将呈几何级数扩大。
二、 漏洞根源:自动化更新机制的“信任危机”
漏洞的核心在于 CDNJS 的自动化更新流程。其工作机制如下:
开发者提交:开发者可以通过 GitHub 向 CDNJS 提交新的开源库。
机器人接管:CDNJS 使用一个自动化的“机器人”程序来维护这些库。该机器人会定期检查 npm(JavaScript 包管理平台)上库的新版本。
自动拉取与部署:一旦发现新版本,机器人会自动从 npm 下载压缩包(.tgz格式),解压后发布到 CDN 全球网络上。
问题就出在这个“自动”上:系统过于信任从 npm 下载的包内容,未对压缩包内部结构进行严格的安全检查。
三、 攻击链条:三步实现“从提交到掌控”
攻击者模拟了一次完整的供应链攻击,过程精巧而致命:
第一步:埋下“探路石”——符号链接读取敏感文件
攻击者没有直接进行破坏,而是先进行侦察。
他向 CDNJS 提交了一个名为 hey-sven 的普通测试库。
随后,他在 npm 上发布了该库的“新版本”。在这个版本的压缩包中,他利用 Git 对符号链接的支持,嵌入了一个指向服务器上敏感配置文件的符号链接。
当 CDNJS 的更新机器人解压这个包时,它没有将符号链接视为危险,而是按照链接读取了系统文件。
通过精心构造,攻击者成功将文件内容(包含 API 密钥和令牌)输出到了最终公开的 CDN 脚本中,从而窃取了这些机密信息。
窃取的关键凭证包括:
GITHUB_REPO_API_KEY:拥有向 CDNJS 官方 GitHub 仓库写入的权限。
WORKERS_KV_API_TOKEN:拥有修改 Cloudflare 边缘缓存数据的权限。
第二步:升级攻击——“ZIP Slip”路径遍历漏洞
在获得初步信息后,攻击者准备了真正的攻击载荷。他利用了安全界熟知的 “ZIP Slip” 漏洞。
他制作了一个特殊的 npm 压缩包,其中的文件路径被恶意构造,例如 ../../../../etc/cron.daily/evil-script。
当更新机器人解压这个包时,由于未校验路径,恶意文件会被提取并覆盖到服务器文件系统的任意位置,例如系统定时任务目录。
一旦被覆盖的脚本(如 evil-script)被系统执行,攻击者就能在服务器上远程执行任意代码,完全控制该节点。
第三步:组合权限,实现完全掌控
凭借第一步窃取的凭证,攻击者可以:
使用 GitHub API 密钥 直接篡改 CDNJS 仓库中的任何库文件,甚至修改 cdnjs.com 官网。
使用 KV API 令牌 篡改全球边缘节点缓存的内容,使攻击效果瞬时覆盖全球用户。
至此,攻击者获得了对 CDNJS 基础设施的最高控制权,可以实施大规模、持久性的供应链攻击。
四、 Cloudflare 的应急修复与纵深防御
Cloudflare 在接到报告后反应迅速,在数小时内便开始了修复,并采取了多层防御措施:
立即阻断:首先修复了允许通过符号链接读取任意文件的漏洞,堵住了信息泄露的口子。
权限隔离:重新设计自动化机器人,将高风险操作与其他功能隔离,遵循最小权限原则。
行为限制:为更新机器人等关键进程加载 AppArmor 安全配置文件。这就像给程序套上“紧身衣”,严格规定它只能访问哪些文件和目录,即使被入侵也难以逾越。
流程加固:对整个库更新流程进行安全审查,增强对压缩包内容的验证。
五、 事件启示:供应链安全的脆弱一环
这起未遂的攻击事件揭示了现代软件供应链中一个关键弱点:
对自动化流程的过度信任:高度自动化的 DevOps 流程在提升效率的同时,也扩大了攻击面。一旦某个被自动信任的环节(如 npm 包)被污染,整个系统就可能沦陷。
开源基础设施的风险:像 CDNJS 这样的公共基础服务,其安全性影响深远。它们既是互联网的基石,也可能成为“单点故障”。
漏洞的连锁效应:一个看似微小的路径遍历漏洞,与自动化流程、权限配置相结合,就能衍生出足以颠覆全局的致命攻击链。
结论:Cloudflare CDNJS 漏洞的案例是一次经典的供应链攻击推演。它提醒所有依赖第三方服务和开源组件的组织,必须对自动化供应链实施严格的代码审计、最小权限控制和运行时监控。在数字世界高度互联的今天,保护自身安全,也必须时刻审视所依赖的“上游”是否坚固。
页:
[1]