Cloudflare已修复其免费开源CDNJS中的一个严重漏洞,该漏洞可能影响互联网上12.7%的网站。CDNJS服务于数百万个网站,在GitHub上公开存储了4000多个JavaScript和CSS库,使其成为第二大JavaScriptCDN。该漏洞利用涉及使用GitHub和npm将数据包发布到Cloudflare的CDNJS以触发路径遍历漏洞并最终远程执行代码。如果被利用,该漏洞将导致对CDNJS基础设施的全面攻击。从“ZIPSlip”到远程代码执行本周,安全研究员RyotaK解释了他如何在研究供应链攻击时找到一种完全攻击Cloudflare的CDNJS网络的方法。CDN的全称是ContentDeliveryNetwork,即内容分发网络。其基本思路是尽可能避开互联网上可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输更快更稳定。在维护互联网的安全性、完整性和可用性方面发挥着关键作用,因为绝大多数网站都依赖这些服务来加载流行的JavaScript库和CSS脚本。CDN可能成为攻击者选择的目标,因为如果遭到破坏,攻击可能会对许多网站、在线商店及其客户产生深远影响。在浏览cdnjs.com时,RyotaK注意到对于CDNJS中尚不存在的库,他可以建议通过CDNJS的GitHub存储库添加一个新库。用户可以请求将包发布到CDNJS的GitHub存储库。在探索了这个GitHub存储库和共同构成CDNJS生态系统的相邻存储库之后,RyotaK找到了一种诱使服务器执行任意代码的方法。特别是,研究人员查看了cdnjs/bot-ansible和cdnjs/tools中存在的脚本,包括帮助自动检索库更新的自动更新脚本。这些脚本会定期使用其开发人员在相应的npm注册表上发布的较新版本的存储库更新CDNJS服务器。换句话说,对于发布到CDNJS的GitHub存储库的每个库,其更新版本将从链接的npm注册表下载,并且npm版本也由库开发人员维护。RyotaK想知道如果他发布到CDNJS的库在相应的npm版本中包含路径遍历漏洞会发生什么。请注意,npm包以TGZ(.tar.gz)存档的形式分发,可以很容易地制作出隐藏在其中的路径遍历漏洞。研究人员首先使用GitHub向CDNJS发布了一个名为hey-sven的测试库,然后开始在npm注册表上发布“hey-sven”的更新版本。在发布到npm的较新的“hey-sven”版本中,研究人员将Bash脚本注入到看起来很奇怪的路径上,最终将由CDNJS的更新机器人处理。这些不同的路径只不过是隐藏在ZIP/TGZ档案中的路径遍历漏洞,这个概念在2018年随着“ZIPSlip”爆发。2018年6月5日,Snky安全团队宣布了一个名为ZipSlip的漏洞。这是一个广泛存在的文件覆盖漏洞。通过该漏洞,攻击者可以通过路径遍历利用特制的Zip压缩文件覆盖任意文件,进而远程执行命令发起攻击。Zip滑动是一种目录遍历形式,它通过从档案中提取文件来工作。目录遍历漏洞产生的前提是攻击者可以访问文件系统中本应驻留的目标文件夹以外的部分文件系统。然后攻击者可以覆盖可执行文件并远程调用它们,或者等待系统或用户调用它们,从而在受害机器上启用远程命令执行。此漏洞还可能通过覆盖配置文件或其他敏感资源造成损害,并可能在客户端(用户)计算机和服务器上被利用。攻击者主要可以利用特制的归档文件(如../../evil.sh)保存目录遍历文件名来触发ZipSlip漏洞。该漏洞影响了许多存档格式,包括tar、jar、war、cpio、apk、rar和7z,以及其他大量压缩文件。目前,ZipSlip漏洞已经影响了阿里巴巴、Google、Oracle、Eclipse、HP、Amazon、Apache、Pivo??tal、Linkedin等数千个项目,以及Java、Ruby、.Net、Go等多语言生态等。其中,Java受到的攻击尤为严重,主要是因为它没有中央仓库来提供高级归档(如Zip)文件处理。缺少此类库导致易受攻击的代码片段被手工制作并在StackOverflow等开发人员社区中共享。npm1.0.1和1.0.2版本的“hey-sven”库存在路径遍历漏洞一旦CDNJS服务器处理了精心制作的“hey-sven”npm归档文件,这些Bash脚本的内容将在服务器。然而,研究人员不想不小心覆盖现有脚本,因此在概念验证(PoC)测试期间,他首先使用符号链接漏洞来读取他即将覆盖的文件的内容。由于Git默认支持符号链接,因此可以通过向Git存储库添加符号链接来从cdnjs存储库更新服务器读取任意文件。如果定期执行的脚本文件被覆盖以执行任意命令,自动更新功能可能会受到攻击,因此研究人员决定首先检查任意文件读取。一旦攻击者精心制作的PoC攻击了服务器,RyotaK就能够意外地将GITHUB_REPO_API_KEY和WORKERS_KV_API_TOKEN等敏感机密转储到CDN服务的脚本中,网址为https://cdnjs.cloudflare.com/...initial符号链接PoC的输出提供了具有密钥GITHUB_REPO_API_KEY的研究人员,这是一个授予写访问权限的API密钥,允许攻击者修改CDNJS上的任何库,甚至篡改cdnjs.com网站本身。另一方面,WORKERS_KV_API_TOKEN秘密可用于篡改CloudflareWorkers缓存中存在的库。通过结合这些权限,CDNJS的核心部分,如CDNJS原始数据、KV缓存,甚至CDNJS网站,都可以被完全篡改。Cloudflare发布了多个修复程序来修复该漏洞研究人员于2021年4月6日通过HackerOne的漏洞披露计划向Cloudflare报告了此漏洞,并看到Cloudflare的团队在数小时内应用了间歇性修复程序。BleepingComputer看到的初始修复旨在解决符号链接漏洞:InitialfixappliedbyCloudflare'sCDNJS(GitHub)然而,据研究人员称,由于CDNJS生态系统的复杂性,不同的存储库应用了一系列更具体的修复.RyotaK与BleepingComputer分享了第一个以拒绝Git存储库中的符号链接为中心的修复,但它只修复了部分问题。修复者首先尝试拒绝符号链接,但注意到机器人当前的设计太危险了。所以他们隔离了最危险的功能。对于其他功能,修复者应用了AppArmors。ApplicationArmor或AppArmor是一种安全功能,它使用预定义的配置文件来限制在基于Unix的环境中运行的程序的功能,以便程序不会无意中超出其预期访问权限。研究人员还与Cloudflare的BleepingComputer部署共享了一组修复程序,以保护自动机器人处理更新的库:Cloudflare对CDNJS进行了多项更改以解决该漏洞,尽管该漏洞无需任何特殊处理即可被利用,但它可能会影响许多站点。鉴于供应链中存在许多漏洞,这些漏洞很容易被利用,但影响很大。正如BleepingComputer先前报道的那样,影响数千家在线商店的Magecart供应链攻击源于对Volusion的CDN基础设施的攻击。本文翻译自:https://www.bleepingcomputer.com/news/security/critical-cloudflare-cdn-flaw-allowed-compromise-of-12-percent-of-all-sites/
