![](https://blog.cloudflare.com/content/images/2024/06/BLOG_2464-1.png)
polyfill.io 是一个流行的 JavaScript 库服务,现在已不再受信任,应将其从网站上删除。
多个报告与我们自己的客户端安全系统看到的数据相吻合, 页面屏蔽,表明 polyfill 服务已被使用,并可能再次被使用,将恶意 JavaScript 代码注入用户的浏览器。鉴于该库的流行程度,这对整个互联网来说是一个真正的威胁。
在过去 24 小时内,我们发布了一项自动 JavaScript URL 重写服务,该服务将重写 Cloudflare 代理的网站中发现的任何指向 polyfill.io 的链接 到 cdnjs 下的镜像链接.这将避免破坏网站功能,同时降低供应链攻击的风险。
现在,所有免费计划的网站都会自动激活此功能。所有付费计划的网站只需单击一下即可启用此功能。
您可以在下面找到此新功能 安全⇒设置 在任何使用 Cloudflare 的区域上。
与 polyfill.io 网站上的声明相反,Cloudflare 从未推荐过 polyfill.io 服务,也从未授权在其网站上使用 Cloudflare 的名称。我们已要求他们删除虚假声明,但他们至今仍无视我们的要求。这再次表明他们不可信任。
如果您现在不使用 Cloudflare,我们仍然强烈建议您删除 polyfill.io 的任何使用和/或寻找替代解决方案。此外,虽然自动替换功能可以处理大多数情况,但最佳做法是从您的项目中删除 polyfill.io 并将其替换为像 Cloudflare 这样的安全替代镜像,即使您是客户也是如此。
您可以通过在代码存储库中搜索 polyfill.io 实例并将其替换为 cdnjs.cloudflare.com/polyfill/ (Cloudflare 的镜像)。这是一项非重大更改,因为这两个 URL 将提供相同的 polyfill 内容。所有网站所有者(无论哪个网站使用 Cloudflare)现在都应该这样做。
我们是如何做出这个决定的
今年 2 月,托管流行 JavaScript 库的域名 polyfill.io 被出售给了新所有者:一家名不见经传的公司 Funnull。当时,我们担心这会造成供应链风险。这促使我们创建了自己的 polyfill.io 代码镜像,托管在 cdnjs 下,cdnjs 是一个由 Cloudflare 赞助的 JavaScript 库存储库。
新东家在业内并不知名,也没有管理 polyfill.io 等项目的信誉记录。 甚至原作者也强调了的问题是,如果他们滥用 polyfill.io,向库中注入额外的代码,则可能会在互联网上造成深远的安全问题,影响数十万个网站。或者它可能被用来对特定网站进行有针对性的供应链攻击。
不幸的是,这种担心在 2024 年 6 月 25 日变成了现实,因为 polyfill.io 服务被用来注入恶意代码,在某些情况下,会将用户重定向到其他网站。
我们采取了特殊措施,利用我们动态修改 HTML 的能力,将客户网站中对 polyfill.io CDN 的引用替换为我们自己在二月份创建的安全镜像的链接。
与此同时,其他威胁源提供商也决定 将域名标记为恶意。我们尚未通过任何现有机制完全封锁该域名,因为我们担心,鉴于 polyfill.io 的使用范围非常广泛,这可能会导致大面积的网络中断,一些估计表明 在所有网站上使用率接近 4%。
使用 Page Shield 验证数据
原始报告表明,恶意代码被注入,在某些情况下,会将用户重定向到博彩网站。它通过在一组可视为入侵指标 (IoC) 的其他域下加载执行重定向的其他 JavaScript 来实现这一点:
(请注意 Google Analytics 的拼写错误)
Page Shield 是我们的客户端安全解决方案,适用于所有付费计划。启用后,它会收集有关访问您网站的最终用户浏览器加载的 JavaScript 文件的信息。
通过查看检测到的 JavaScript 文件的数据库,我们立即发现了与上面提供的 IoC 相匹配的文件,最早可以追溯到 2024-06-08 15:23:51(Page Shield 检测到的 JavaScript 文件上首次出现的时间戳)。这清楚地表明恶意活动正在进行并且与 polyfill.io 有关。
将不安全的 JavaScript 链接替换为 polyfill.io
为了实现高性能 HTML 重写,我们需要在响应流经 Cloudflare 网络时以极快的速度更改 HTML。这可以通过利用 ROFL(FL 的响应监督器)实现。ROFL 为需要在流式传输 HTML 时更改 HTML 的各种 Cloudflare 产品提供支持,例如 Cloudflare 字体, 电子邮件混淆 和 火箭装载机
ROFL 完全用 Rust 开发。Rust 的内存安全功能对于确保在处理每秒数百万的大量请求时防止内存泄漏是必不可少的。Rust 的编译特性使我们能够针对特定硬件配置精细优化代码,与解释型语言相比,性能有所提升。
ROFL 的性能使我们能够即时重写 HTML 并快速、安全、高效地修改 polyfill.io 链接。这种速度有助于我们减少处理 HTML 文件所增加的任何额外延迟。
如果启用此功能,对于任何具有 HTML Content-Type 的 HTTP 响应,我们将解析所有 JavaScript 脚本标记源属性。如果发现任何链接到 polyfill.io 的属性,我们将重写 src 属性以链接到我们的镜像。我们映射到正确版本的 polyfill 服务,而查询字符串保持不变。
如果在响应中发现内容安全策略 (CSP) 标头,则不会激活该逻辑。这确保我们不会在违反 CSP 策略的情况下替换链接,从而可能破坏网站。
免费客户默认开启,其他客户可选开启
Cloudflare 代理了数百万个网站,其中很大一部分网站都使用我们的免费计划。免费计划客户往往使用较简单的应用程序,同时又没有足够的资源来更新和快速应对安全问题。因此,我们决定默认为使用免费计划的网站启用该功能,因为这样可以降低出现问题的可能性,同时还有助于确保使用 polyfill.io 的大部分应用程序的安全。
另一方面,付费计划客户拥有更复杂的应用程序,对安全通知的反应更快。我们相信,大多数使用 polyfill.io 和 Cloudflare 的付费客户都会喜欢只需单击一下即可虚拟修补问题的功能,同时控制何时修补。
所有客户可以随时关闭该功能。
这不是我们第一次认为安全问题如此普遍和严重,以至于我们会为所有客户提供保护,无论他们是否是付费客户。早在 2014 年,我们就为所有人启用了 Shellshock 保护。2021 年,当 log4j 漏洞被披露时,我们为所有客户推出了保护措施。
不要使用 polyfill.io
如果您正在使用 Cloudflare,则可以在 Cloudflare 仪表板上单击一下,前往以下位置删除 polyfill.io 你的区域 ⇒ 安全 ⇒ 设置。如果您是免费客户,重写将自动激活。我们希望此功能能帮助您快速修复问题。
尽管如此,你最终还是应该在代码存储库中搜索 polyfill.io 的实例,并将其替换为其他提供商,例如 cdnjs 下的 Cloudflare 安全镜像(https://cdnjs.cloudflare.com/polyfill/)。未使用 Cloudflare 的网站所有者也应执行这些步骤。
您应该使用的底层捆绑链接是:
对于最小化: https://cdnjs.cloudflare.com/polyfill/v3/polyfill.min.js
对于未最小化的: https://cdnjs.cloudflare.com/polyfill/v3/polyfill.js
这样做可确保您的网站不再依赖 polyfill.io。
1719434384
#使用 #Cloudflare #镜像自动替换 #polyfill.io #链接打造更安全的互联网
2024-06-26 20:35:17