恶意CDN仍潜伏GitHub Pages,AI让情况恶化

Berkeley RDI:Blog(AI 安全与评测)·2026-06-24 00:00·62天前
AI 导读

UC Berkeley研究人员发现,近2000个GitHub Pages站点(18000+页面,累计530K+星标)仍在加载来自polyfill.io及其关联恶意CDN的脚本。这些CDN由已被OFAC制裁的Funnull Technology Inc.(现更名Triad Nexus)运营,2024年被出售后开始条件性注入恶意载荷,劫持移动用户、跳转欺诈站点、伪造认证弹窗窃取凭证。扫描12000+站点确认786个加载polyfill.io,1191个加载其他Funnull CDN。更严峻的是,所有测试的大语言模型在生成前端代码时仍推荐这些被污染的CDN URL,包括CyC2018/CS-Notes(184K⭐)、microsoft/AirSim(18K⭐)等知名项目及多所大学课程页面。

Berkeley RDI:Blog(AI 安全与评测)
精选
82AI 编辑部评分,满分 100

恶意CDN仍潜伏GitHub Pages,AI让情况恶化

2026-06-24 00:00· 62天前
AI 导读

UC Berkeley研究人员发现,近2000个GitHub Pages站点(18000+页面,累计530K+星标)仍在加载来自polyfill.io及其关联恶意CDN的脚本。这些CDN由已被OFAC制裁的Funnull Technology Inc.(现更名Triad Nexus)运营,2024年被出售后开始条件性注入恶意载荷,劫持移动用户、跳转欺诈站点、伪造认证弹窗窃取凭证。扫描12000+站点确认786个加载polyfill.io,1191个加载其他Funnull CDN。更严峻的是,所有测试的大语言模型在生成前端代码时仍推荐这些被污染的CDN URL,包括CyC2018/CS-Notes(184K⭐)、microsoft/AirSim(18K⭐)等知名项目及多所大学课程页面。

推荐理由

polyfill.io等恶意CDN仍在GitHub Pages上感染近2000个站点,更可怕的是所有测试的AI模型都还会推荐这些链接,AI编码的便利正在变成供应链投毒的加速器。

正文 · AI 翻译

你的 AI 编程助手正在悄悄植入一条供应链后门。在 polyfill.io 被出售给一个后来受到制裁的运营方并沦为恶意软件 CDN 一年后,仍有近 2000 个活跃的 GitHub Pages 站点(超过 18000 个页面、合计 53 万以上的 Star)从该网络加载脚本。而 AI 让情况变得更糟:我们测试过的每一个大语言模型在生成前端代码时,仍然会推荐这些已被攻陷的 CDN 链接。


某天下午,我打开了自己的个人网站(我知道,这很随机)。一件意想不到的事情发生了:一个灰色弹窗出现,要求输入用户名和密码。这是 nginx 的认证对话框,按理说也算正常——但我的网站根本没有配置 nginx 认证。那么,这个弹窗是从哪里来的?

困惑了几分钟后,我找到了罪魁祸首。HTML 深处藏着一个我甚至不知道存在的 `<script src="https://polyfill.io/...">` 标签。修复方法很简单:删除这个标签,重新构建,然后推送。问题解决了。

一周后,我在浏览一位顶级 AI 研究员的个人网站。你猜怎么着——同样的灰色弹窗又出现了。同样的认证窗口,同样的 polyfill.io 指纹。

我们俩对此都毫不知情。我们正在从一个 CDN 运营商那里运行代码,而该运营商早在几个月前就因一起臭名昭著的恶意软件事件被美国外国资产控制办公室列入了制裁名单。幸运的是,这个脚本已经不再注入任何恶意内容。如果当时存在恶意代码,只要在本地打开一次网站,或者点击一次该网站,就可能导致我们或其他研究人员的计算机出现难以估量的安全问题。

这引发了一个我无法放下的问题:还有多少人受到了影响却毫不知情?为什么连安全研究员都会在毫无察觉的情况下落入这个陷阱?


一个合法服务如何沦为恶意软件分发网络

要理解这些问题,我们得先知道 polyfill.io 是什么。

近十年来,polyfill.io 一直是一项备受推崇的前端开发服务。只需一个 polyfill 脚本标签,就能让使用旧版浏览器的访客正常渲染你的网站。它出现在教程、样板仓库和 Stack Overflow 的回答中,次数高达数百万次。

2024 年初,该域名被出售给 Funnull Technology Inc.。数周内,该服务开始有条件地向其提供的脚本中注入恶意载荷——针对移动端用户,重定向至诈骗网站,并覆盖虚假身份验证提示以窃取凭证。由于注入仅在特定条件下触发(错误的浏览器、错误的时间段、首次访问),许多网站所有者从未察觉。

Polyfill.io 实际上只是更大规模网络中最显眼的一环。Sansec 和 Censys 的安全研究人员发现,Funnull 使用相同的 Cloudflare 账户凭证运营着多个流行的 CDN——相同的基础设施,相同的运营者:

域名 证据
bootcss.com 直接证据:恶意重定向载荷已被解码并公布(2023 年 6 月)
polyfill.io 直接证据:恶意载荷已在真实环境中被捕获(2024 年)
bootcdn.net 间接证据:相同的 Cloudflare 账户;被 Google 在广告商警告中提及
staticfile.org / .net 间接证据:相同的 Cloudflare 账户;相同的运营者

2025 年 5 月,OFAC 对 Funnull Technology Inc. 实施制裁,该公司随即更名为 Triad Nexus。这些 CDN 域名仍保持运行。研究人员此后发现了一批新的伪装站点——cdn1.ai、bolecnd.com、yunray.ai——据评估,这些是 Funnull 自 2025 年 6 月起启用的别名。

结论:这五个 CDN 均不可信任。

扫描 12,000 多个 GitHub Pages 站点后的发现

为什么选择 GitHub Pages?

GitHub Pages 已成为学术个人网站、课程页面、开源文档、项目演示和开发者作品集的默认托管地之一。它免费、易于搭建、与 GitHub 仓库紧密集成,并提供便捷的 github.io 域名,用户无需自行管理托管基础设施。正是这种便利性,使其在学术界和开源社区中得到如此广泛的应用。

但同样的便利性也造成了安全盲区。网站一旦部署,便可在几乎无需维护的情况下持续运行多年。一个最后更新于 2021 年的仓库,可能在 2026 年仍托管着活跃网站——而每一位访问者都会加载原始开发者嵌入的所有脚本标签。

我们的搜索内容

我们对 polyfill.io、bootcss.com、bootcdn.net、staticfile.org 和 staticfile.net 进行了扫描,覆盖了已识别的整个 Funnull CDN 家族。

我们搜索了从 GitHub Code Search 和 Sourcegraph 获取的 GitHub 页面。我们通过源代码确认了感染情况,并通过实时爬取网站上的所有页面验证了恶意 CDN 的存在。

我们的发现

指标 Polyfill 其他 Funnell CDN
提及相关内容的网站 4,634 7,955
源代码被感染的网站 3,000 2,306
正在活跃加载恶意软件的网站 786 1,191
活跃网站中受感染的页面总数 4,228 14,156

触目惊心。仍有 1,960 个网站和 18,384 个页面处于感染状态。受害者并非只是不知名的个人作品集。平均而言,受影响的页面拥有 271 颗星标,其中有 66 个仓库的星标数超过 1,000。受影响页面的星标总数超过 53 万。

这些受影响的页面包括

  • CyC2018/CS-Notes(184K ⭐):一份技术面试参考资料
  • hollischuang/toBeTopJavaer(25K ⭐):一份 Java 职业发展指南
  • microsoft/AirSim(18K ⭐):微软开源的一款无人机和自动驾驶模拟器
  • 加州大学伯克利分校、哈佛大学、鲁汶大学的课程页面
  • 以及更多其他页面

该存档中的每一个页面都指向同一个恶意域名。

为什么情况会因 AI 而变得更糟

如今,每个人都在使用 AI 来处理前端工作。然而,每个大语言模型或多或少都学到了 `https://cdn.polyfill.io/v3/polyfill.min.js` 是加载浏览器 polyfill 的标准方式。这个推荐出现在数百万个 Stack Overflow 答案、博客文章和教程仓库中。它作为正确做法被融入了训练数据。

我们直接对此进行了测试。我们向四个模型发送了四个真实的代码生成提示词:Moonshot Kimi K2.7 Code、Meta Llama 3.3 70B、Qwen 2.5 7B 以及通过 Claude Code CLI 使用的 Opus4.8。这四个提示词涵盖了开发者实际工作流程中可能出现的情景:构建一个使用 MathJax 的学术页面、修复浏览器兼容性问题、生成一个作品集页面,以及编写一个使用 CDN 镜像的页面。

模型 不安全 出现的域名
Llama 3.3 70B 4 / 4 polyfill.io, staticfile.org
Kimi K2.7 Code 3 / 4 polyfill.io, bootcdn.net, staticfile.org
Qwen 2.5 7B 1 / 4 polyfill.io
Opus 4.8 1 / 4 bootcdn.net

最引人注目的数字是:所有模型都至少返回了一个由 Funnull 运营的域名。

这并非单纯的模型幻觉问题。这些 URL 是真实存在的,代码也能正常运行,生成的页面可能正确渲染。从模型的角度来看,它给出了一个看似合理的答案。

问题在于,训练数据所对应的世界已经发生了变化。2019 年安全的依赖项,到了 2024 年可能变得危险;出现在数千个教程中的 CDN,其所有权日后可能变更;曾经代表兼容性的脚本标签,后来可能成为每个访问者浏览器中远程代码执行的突破口。

AI 编程助手尤其容易放大这类缺陷,因为其输出看起来毫无异常。没有语法错误,没有测试失败,也没有构建中断。审查生成 HTML 的开发者可能会看到一个熟悉的 CDN URL 就直接跳过。在很多情况下,开发者甚至根本不知道模型添加了这个依赖项。

软件供应链风险不仅关乎你安装的软件包,也关乎你代码所信任的 URL。静态网站看似静止不动,但其依赖项却是实时生效的。

应对措施与后续步骤

我们建议在你的源代码和生成的网站输出中搜索已识别的 CDN URL。一个快速示例如下:

grep -RInE 'polyfill\.io|polyfill\.com|polyfill\.cn|bootcss\.com|bootcdn\.net|staticfile\.org|staticfile\.net' .

如果发现匹配项,不要只修补你碰巧注意到的那个源文件。请检查你的模板、主题、生成的 HTML、归档页面、供应商资源以及文档构建产物。静态网站生成器可能会在你从一个页面删除该标签后,又在其他地方重新引入它。

来源:Berkeley RDI:Blog(AI 安全与评测)· rdi.berkeley.edu