在宣布漏洞赏金计划后,我下载了浏览器并开始寻找漏洞,利用我的逆向工程技能,我查看了浏览器二进制文件
我发现了一些有趣的端点
在浏览器中打开 URL
这是一个用于创建 boost 的漂亮 UI,它只是带有一些自定义配置的扩展,您可以在其中创建和编辑多种类型的 boost,boost 也将作为扩展自动安装,现在让我们看看里面的任何代码和可用路径
/play 端点很有趣,所以我开始研究它,让我们访问 arc://boost/play/test
查看代码
该值取自 URL,然后使用 decompressFromEncodedURIComponent() 函数对其进行解压缩(假设它就像 Base64 一样),然后传递给 JSON.parse() ,稍后它将加载 boost
幸运的是,压缩机制还具有 compressToEncodedURIComponent() 函数来测试我们的有效载荷,现在让我们创建一个简单的对象来测试
我们遇到另一个问题,JSON 必须首先是一个数组,让我们修复它 u='[{“x”:”y”}]'
最后我们终于开始工作了,这看起来需要做很多工作来创建一个 boost 配置让我们从 UI 创建一个 boost 并在代码上添加一个断点来查看配置
替换 boost 的配置由 3 个对象组成,它们是 3 个文件,content.js 是扩展的典型内容脚本,boost.config.json 是 boost 的设置,其中包含 boost 的信息,例如名称、范围和描述,这些信息稍后会被 UI 使用,最后 manifest.json 就是Manifest。让我们制作第一个 boost
很好,我们成功了,点击 Install Boost
boost 将会被安装,并且在我们的库文件中会创建一个包含所有 3 个文件的新文件夹,使用参数我发现文件 boost.config.json 仅由 UI 和 Arc 使用来显示有关 boost 的信息,并且每个权限和访问都在 manifest.json 中声明,这意味着我们可以欺骗 UI 来显示一个看似无害的 boost,它只会改变 example.com 的背景颜色,并且在清单中我们声明所有权限并可以访问所有内容。
这本身就是一个很大的漏洞,它允许我们欺骗 boosts UI 并安装恶意 boosts,从而可以访问所有内容,甚至是 file:// URI,这意味着不仅仅是 UXSS,还可以读取本地文件,这是普通扩展无法做到的,但我发现,当我们安装一个具有所有 URL 完全权限的扩展时,它将可以访问系统上的所有文件
我仍然想展示更多的影响力并在机器上获得 RCE,所以让我们稍微倒回去看看其他的东西。
当我们设置配置数组时,每个对象内部都有 2 个有趣的值,即名称和路径,作为攻击者,我们首先想到的就是尝试路径遍历,所以让我们尝试一下,并同时更改 ../styles.css 并安装 boost
你看到我看到的了吗:)我们的文件是在扩展文件夹的父目录中创建的,这意味着使用 ../ 该文件被反向遍历,我们可以创建具有任意内容和路径的任意文件。
通过这个操作,我发现我们还可以覆盖文件并显示完整内容,例如覆盖 /etc/passwd 来破坏机器或覆盖二进制可执行文件以在运行时执行代码或覆盖其他程序使用的 .py 和 .js 文件
我不想在测试时损坏我的机器,所以我使用了更安全的路径,即LaunchAgent,它是一个包含一堆 plist 配置的文件夹,它将在用户登录或系统启动时运行,现在让我们创建恶意 plist 文件,它将下载图像,将其设置为受害者墙纸,打开终端,其中包含一堆命令和经典的计算器
将压缩和其他内容以及路径遍历插入到 UI 中,以便将其插入到 LaunchAgents 文件夹中
点击安装
很好,我们已经插入了恶意 plist,当系统重新启动时,我们就可以执行代码了
我们得到了我们想要的,但是仍然存在一个问题,即如何将 arc:// uri 发送给受害者并且他单击“安装”,该 URI 很特殊,无法通过常规 HTTP 导航导航到它,用户必须将其粘贴到地址栏中并按下 Enter 或浏览器内具有更高权限的任何其他组件。
我们可以创建一个扩展程序并将其上传到具有标签权限的 Chrome 网上应用店,并使用 chrome.tabs.create 导航到 URI,然后当用户单击安装时,我们就会执行代码,这也需要大量的用户交互,我不喜欢这样。
在浏览 Arc 时,我看到了一个名为 Easels 的不错功能,它允许我们将其他网站嵌入白板并与其他人共享,嵌入功能在某种程度上类似于 iframe,但它允许我们嵌入每个页面,包括 arc:// 让我们尝试一下
我们可以分享类似这样的 URL https://arc.net/e/ED548B06-...。受害者点击框架,然后安装 boost,这意味着只需点击 2 次,并在 UI 内部提到,它会说这个 boost 只会更改 example.com 的内容,而不知道它具有完全权限。此图总结了我们的攻击
视频POC:
https://youtu.be/c5ewNitNufE
后来我发现这个端点 arc://boost 用于在第一个版本中创建和安装 boosts 但是 /play 端点没有在任何地方提及,也许它已被弃用或从未打算公开使用。
我还发现了一种更简单的方法,可以在受害者浏览器中打开特殊 URI,这将使我们的攻击最小化到一次单击用户交互,受害者访问attacker.com -> 重定向到arc://boost/play/… -> 单击安装 -> pwn
10 月 7 日——报告已发送
10 月 10 日——通过删除旧版 boost 构建器进行修补
10 月 10 日——颁发 10,000 奖金
谢谢
連和
原文始发于微信公众号(OSINT研习社):Arc 浏览器 UXSS、本地文件读取、任意文件创建和路径遍历到 RCE
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论