近日,安全机构 Sansec 发文称流行前端库 polyfill.js 受到了供应链攻击,受影响的网站超过 10 万个。通过 CDN 使用该库的网站,在特定情况下会跳转到赌 * 和色 * 网站,下面就来看看这是怎么个事!
polyfill.js 是什么?
Polyfill.js 提供的代码用于模拟浏览器中缺失的原生功能。Polyfill.js 会检测浏览器是否原生支持某个特性或 API。如果浏览器不支持该特性,Polyfill.js 会提供一个替代实现,模拟该特性的行为。如果浏览器已经支持该特性,Polyfill.js 不会执行任何操作,而是让浏览器使用其原生实现。
发生了什么?
今年早些时候,一家名为 Funnull 的公司(疑似一家中国公司)收购了 polyfill.io 域名和 Github 账号。而 Polyfill.js 的 CDN 使用的就是这个域名(cdn.polyfill.io)。之后,该公司向 Polyfill.js 中注入了恶意脚本代码,导致在移动端使用时(恶意代码会根据 HTTP 标头动态生成)会跳转到恶意网站。
其实早在今年 2 月,Polyfill.js 的作者就表示,如果网站使用 polyfill.io,请尽快删除,现代浏览器已经不再需要它。并且作者已经不再拥有它,无法保证后续的正常使用。
根据 Cloudflare CEO 的说法,此次受影响的网站超千万个,占所有网站的 4%(不知真假,无从考证)。
目前:
- polyfill.io 的域名注册商已经暂停了该域名的使用,服务已经无法正常访问;
- Google 已经屏蔽了使用 polyfill.io 的网站的广告。
需要做什么?
如果你的项目使用了 polyfill.js,可以这样做:
(1) 所有使用 cdn.polyfill.io 的应用都应立即将其删除。
(2) 如果仍然需要 polyfill,Fastly 和 Cloudflare 都提供了值得信赖的替代方案。
- Fastly:https://polyfill-fastly.io/
- Cloudflare:https://cdnjs.cloudflare.com/polyfill
(3) 还可以自托管 polyfill.js:https://github.com/jakeChampion/polyfill-service-self-hosted/