Andrew Betts,作为polyfill服务的创始人,于2月份发表声明,明确表示他并未参与cdn.polyfill.io的官方运营。
2024年6月25日,Sansec安全研究团队揭露了一起严重的网络安全事件:一个广受欢迎的JavaScript polyfill项目被一个据信源自中国的外国行为者所控制。该行为者将恶意代码嵌入了通过cdn.polyfill.io CDN分发的JavaScript资源中。Sansec估计,超过10万个网站受到了这次攻击的影响,包括像Intuit这样的上市公司。
目前Cloudflare会自动用安全镜像替换 polyfill.io 链接。
此外谷歌向广告商发出警告:警告他们他们的登陆页面包含恶意代码,并可能在网站所有者不知情或许可的情况下将访问者重定向到目标网站。
谷歌还警告说,Bootcss、Bootcdn和Staticfile也被发现会导致不必要的重定向,可能会增加数千个(如果不是数十万)受供应链攻击影响的网站。
谷歌的电子邮件中写道,导致这些重定向的代码似乎来自几个不同的第三方网络资源提供商,包括Polyfill.io、Bootcss.com、Bootcdn.net或Staticfile.org。
Polyfill简介
Polyfill是一种浏览器兼容技术,它允许开发者使用现代JavaScript API,同时确保这些代码能在旧版浏览器上正常运行。它像一座桥梁,连接了新旧技术,确保了不同浏览器间的一致性用户体验。
在Web开发的早期,由于浏览器更新速度不一,开发者常常面临代码在不同浏览器上的兼容性问题。Polyfill通过提供缺失的API支持,帮助开发者解决了这一难题。例如,Array.prototype.includes和Promise等现代特性,在一些旧版浏览器如Internet Explorer中并不可用,但通过polyfill库,这些功能得以实现。
CDN在Polyfill中的应用
内容分发网络(CDN)是一个全球性的分布式服务器系统,它根据用户的地理位置提供网络内容,以优化加载速度和性能。在JavaScript polyfill的领域,CDN的作用尤为关键,它确保了polyfill库能够快速且可靠地被全球用户访问。
使用CDN的好处包括减少延迟、加快加载时间,以及避免将JavaScript库打包到应用中。例如,Google Analytics等云服务就推荐用户将它们的脚本通过CDN引入。
CDN托管的安全风险
使用CDN托管polyfill存在显著的安全风险,尤其是执行任意JavaScript代码的可能性,这通常被视为跨站点脚本(XSS)攻击。
当应用依赖于CDN提供的polyfill库时,它就暴露在了CDN的安全性之下。如果CDN或其托管的库遭到破坏,恶意代码就有可能被注入并执行,导致用户被重定向到钓鱼网站、敏感信息被盗或恶意软件的传播。
防范CDN供应链攻击
最近对JavaScript polyfill项目的攻击凸显了维护网络生态系统资源的重要性,尤其是CDN。以下是一些最佳实践,以帮助防范此类攻击:
- 使用信誉良好的CDN提供商,如Cloudflare,它们以强大的安全措施和可靠性著称。
- 定期审计和监控所有第三方脚本和依赖项。
- 利用子资源完整性(SRI)确保CDN提供的内容未被篡改。
- 实施内容安全策略(CSP)限制脚本来源,防止恶意脚本执行。
- 保持所有库和依赖项的最新状态,以修补已知漏洞。
- 评估项目是否真的需要polyfill,随着浏览器的现代化,许多功能已得到原生支持。考虑减少对第三方CDN的依赖,转而使用项目自身的资产。