
IFA 是一个概念验证(PoC),演示了攻击者如何利用主流网页浏览器中的 IndexedDB API 执行磁盘淹没攻击。此攻击特别利用了 IndexedDB 中缺乏限制的特点,允许浏览器在无有效限制的情况下存储数据,从而通过每秒注入数百 MB 的数据快速消耗用户磁盘空间。这可能导致系统性能严重下降、存储耗尽,极端情况下甚至导致系统完全崩溃。
在一个我们越来越依赖 Web 应用进行工作和娱乐的世界里,一个能在几分钟内使设备无法使用的漏洞是一个严重的威胁。IFA 揭示了 IndexedDB 缺乏限制如何被利用,从而通过一个简单的脚本就能使用户失去对系统的控制。
执行 IFA 可能造成以下破坏性影响:
大规模性能下降:IndexedDB 中大量持续的数据存储会导致磁盘输入/输出操作饱和,系统速度显著下降。用户将体验到极慢的响应时间,难以正常使用设备。
存储迅速耗尽:在几分钟内,攻击可能消耗数 GB 的磁盘空间。一旦存储耗尽,系统将无法执行保存文档、安装更新甚至打开新应用等基本操作。
系统不稳定及崩溃:当磁盘完全写满时,操作系统可能变得不稳定甚至崩溃,导致未保存数据丢失,并可能损坏关键系统文件。受影响的用户可能面临系统恢复,甚至需要完全重装操作系统。
IFA 影响大量浏览器:
IFA 采用了精心设计的策略来利用 IndexedDB API 中缺乏限制的特点,最大化攻击效果,同时防止浏览器过早崩溃:
生成唯一标识符:脚本生成多个随机名称的数据库,确保无冲突,且每个数据库可存储大量数据。
注入 8 MB Blob:IFA 使用由重复文本和图像数据组成的 8 MB blob(大数据片段)。选择这个大小至关重要,因为它能高效地存储大量数据,同时避免立即导致浏览器崩溃。通过使用特定大小的 blob,IFA 可以持续稳定地淹没用户磁盘,规避基于浏览器标签页内存缓冲区的安全机制,这些机制可能在检测到过度或过快写入操作时阻止攻击。
数据存储循环:8 MB blob 被反复存储到 IndexedDB 对象中,创建持续的数据流,快速填满磁盘空间。IFA 每秒注入数百 MB 的数据,确保快速消耗用户存储空间,同时避免浏览器立即崩溃。
磁盘饱和:该过程无限持续,直到磁盘空间耗尽,导致一系列可能使系统瘫痪的问题。
IFA 漏洞利用展示了 IndexedDB API 中的一个严重漏洞如何被武器化。以下是一些攻击者可能利用此 PoC 造成重大破坏的场景:
通过跨站脚本(XSS)利用:如果攻击者在合法网站上发现 XSS 漏洞,他们可以将 IFA 脚本注入该网站。当用户访问被篡改的页面时,脚本会在其浏览器中自动执行,快速填满磁盘空间。这可能导致系统严重变慢甚至崩溃,尤其对不知情的用户影响更大。
受损的第三方 JavaScript 库:许多网站和 Web 应用依赖第三方 JavaScript 库。如果攻击者通过注入 IFA 脚本破坏了其中一个库,任何使用受影响库的网站都可能无意中成为攻击载体。这会导致加载了该脚本的任何用户设备上出现广泛的磁盘淹没。
恶意浏览器扩展:攻击者可以开发或破坏浏览器扩展以包含 IFA 脚本。一旦安装,扩展可在后台静默执行脚本,每次用户打开浏览器时填满磁盘空间。此场景尤其危险,因为浏览器扩展通常具有广泛权限。
被感染的网络广告:攻击者可以在合法网站上放置包含 IFA 脚本的恶意广告。当用户加载带有被感染广告的页面时,脚本会执行并开始消耗磁盘空间。此方法可针对大量用户,尤其是在高流量网站上。
网络钓鱼活动:攻击者可以发送钓鱼邮件,将受害者引导至托管 IFA 脚本的网站。一旦目标访问恶意网站,脚本就会执行并开始填满磁盘空间。此方法在针对个人或组织的定向攻击中可能特别有效。
为了帮助你更好地理解 IFA 的影响,我在一个专用网站上创建了演示。此 Web 演示旨在让你轻松看到漏洞利用的实际效果并理解其潜在后果。
探索在线演示:访问 https://ifa.run 与实时演示交互。这将让你亲身体验此攻击如何影响你的浏览器和系统。我创建这个演示是为了确保任何人都能轻松测试并看到漏洞利用的后果。请记住在受控环境中谨慎测试。
隐藏注入演示:如需更隐蔽的演示,请访问 https://ifa.run/hidden.html。此版本隐形操作,直接进行注入,不显示任何图形或用户界面,如主演示那样。
观看 PoC 视频:如果你更喜欢有讲解的演示,我还制作了一个演示视频。在视频中,我引导你了解 IFA 的执行过程并展示它可能造成的效果:PoC 视频。
如果你有兴趣在本地测试 PoC,请按照以下简单步骤操作。我们将引导你包含 IFA.js 脚本并使用自定义数据运行漏洞利用。
首先,你需要在 HTML 文件中包含 IFA.js 脚本。你有两个选择:
<script src="IFA.js"></script>
<script src="https://cdn.jsdelivr.net/gh/jofpin/IFA/IFA.js"></script>
使用 CDN 链接对于测试不同网站或 Web 应用上的漏洞利用特别有用,无需自行托管脚本。
包含脚本后,你就可以运行漏洞利用了。IFA 脚本允许你自定义将要注入的数据。方法如下:
插入你的 Base64 图像:将图像转换为 Base64 格式并插入到 img 字段中。
插入你的自定义文本:在 txt 字段中输入你希望使用的任何文本。
以下是一个如何运行漏洞利用的示例:
IFA.run({
img: "data:image/webp;base64,UklGRpZBAwBXRUJQV...", // 在此处插入你的 Base64 图像
txt: "IFA" // 在此处插入你的自定义文本
});
img:这是放置 Base64 编码图像的位置。图像将被直接注入,确保漏洞利用运行更快、更高效,避免外部服务器请求。
txt:在这里输入将存储在数据库中的文本。你可以自定义此文本以测试不同场景。
执行脚本后,观察漏洞利用的行为。你应该注意到:
磁盘空间使用:随着脚本持续向 IndexedDB 写入数据,磁盘空间应快速填满。
系统性能:你可能会观察到系统性能显著下降,响应时间变慢,可能出现不稳定。
浏览器行为:漏洞利用应避免立即导致浏览器崩溃,而是保持持续攻击,最终导致磁盘完全填满。
使用受控环境:确保在受控环境中测试,因为此 PoC 可能导致系统不稳定。
Base64 编码:通过对图像使用 Base64 编码,注入在本地处理,这可以防止潜在错误并使漏洞利用更有效。
此漏洞的暴露应成为浏览器开发者的行动号召。以下是可以实施以防止此类攻击的一些措施:
实施配额限制:浏览器应建立严格的限制,规定 Web 应用通过 IndexedDB 可使用的存储量。这将防止恶意脚本消耗所有磁盘空间。
检测异常行为:浏览器应开发机制来检测和阻止异常行为,例如大规模创建数据库或在短时间内存储大量数据。
用户警报:当检测到异常存储使用时,浏览器应提醒用户,并提供阻止试图利用此漏洞的应用的选项。
创建 IFA 是为了展示如果不采取必要措施来保护我们日常使用的 Web 技术,可能会发生什么。IFA 不仅仅是一次技术演示,更是对整个科技行业的警告:在追求创新的过程中,我们绝不能牺牲安全。
代码具有建设或破坏的力量。让我们确保我们的遗产是建设,而非破坏。 - Jose Pino
此 PoC 仅供教育和研究目的使用。应在受控环境中执行,不得用于生产系统或包含重要数据的设备。滥用此 PoC 可能导致重大损害,用户有责任确保其得到道德使用。
本项目内容本身采用 Creative Commons Attribution 3.0 license 许可,用于格式化和显示内容的底层源代码采用 MIT license 许可。
版权所有 (c) 2024 Jose Pino