MrBruh's Epic Blog Home Music

华硕预装驱动软件中的一键 RCE 漏洞 (One-Click RCE in ASUS’s Preinstalled Driver Software)

引言

这个故事始于一次关于新 PC 零件的对话。 dms.avif 在忽略了朋友的建议后,我为我的 PC 购买了一块新的 ASUS 主板。我有点担心我的 BIOS 会在后台默默地将软件安装到我的操作系统中。但这个功能可以关闭,所以我打算这样做。 bios.avif 登录 Windows 后,我立即收到了一个通知,要求管理员权限以完成 ASUS DriverHub 的安装,因为我忘记更改 BIOS 选项。由于我无论如何都需要获得主板的 WiFi 驱动程序,所以我很好奇并安装了它。 admin_prompt.avif 我没有 DriverHub 的截图,但它在屏幕右下角显示了一个完全像这样的弹出窗口

DriverHub

driverhub_ui.avif DriverHub 是一个有趣的驱动程序软件,因为它没有任何 GUI。相反,它只是一个后台进程,与网站 driverhub.asus.com 通信,并告诉你应该为你的系统安装哪些驱动程序以及哪些需要更新。自然地,我想更多地了解这个网站如何知道我的系统需要什么驱动程序以及它是如何安装它们的,所以我打开了 Firefox 的网络选项卡。 正如我所预料的,该网站使用 RPC 与在我系统上运行的后台进程进行通信。在这里,后台进程在本地托管一个 HTTP 或 Websocket 服务,网站或服务可以通过将 API 请求发送到预定义端口上的 127.0.0.1 来连接到该服务,在本例中是 53000。 就在这时,我精英黑客的直觉开始蠢蠢欲动。 joey-gibson.gif 这是一种非常草率的驱动程序管理软件设计方式。如果 RPC 没有得到适当的保护,它可能会被攻击者武器化以安装恶意应用程序。

寻找漏洞

下一步是看看我是否可以从任何网站调用 RPC,这是通过将浏览器中的请求复制为 curl 命令并将其粘贴到我的终端中来完成的。 copyascurl.avif 在摆弄了一段时间的命令变体后,我的假设得到了证实。DriverHub 只响应源 (origin) 标头设置为 “driverhub.asus.com” 的请求。所以至少这个软件没有完全崩溃,邪恶的黑客不能随意向 DriverHub 发送请求。 然而,我还没有完成,大概该程序会检查源是否为 driverhub.asus.hub,如果是,它将接受 RPC 请求。接下来我做的是看看程序是否进行了直接比较,例如 origin == driverhub.asus.hub,或者它是否是一个通配符匹配,例如 origin.includes("driverhub.asus.com")。 当我将源切换到 driverhub.asus.com.mrbruh.com 时,它允许了我的请求。 现在很明显存在严重的威胁。下一步是确定可能造成的损害程度。

损害的程度

通过在网站上搜索 JavaScript,以及该 exe 产生的约 70 万行反编译代码,我设法创建了一个可调用端点的列表,包括一些位于 exe 中的未使用端点。

Your browser does not support the video lmao

实现 RCE

我出于显而易见的原因而专注于 UpdateApp 端点。因此,我花了几个小时在 ghidra 中探索代码,并使用各种 curl 请求来了解它的行为的复杂性。 对端点的请求如下所示:

curl "http://127.0.0.1:53000/asus/v1.0/UpdateApp" -X POST --data-raw '{"List": [{"Url": "https://driverhub.asus.com/<app.exe>"}]}'

以下是我当时对 UpdateApp 函数的观察。

当我得知 DriverHub 验证可执行文件的签名时,我怀疑 RCE 可能不再可行,但我仍然坚持了下来。 我的第一个想法可能是 时序攻击,我告诉 DriverHub 安装一个有效的可执行文件,在它验证签名之后,但在它安装 exe 之前,我用一个恶意可执行文件替换它。我推测这可以通过并行发出两个 UpdateApp 请求来实现,恶意更新紧随合法更新之后。 然而,时序攻击需要非常精确,并且需要下载文件才能影响时序,这使得它成为一个非常不可靠的选择。鉴于此,我决定退一步,思考是否有其他选择。 最终,我又回到了我一直要安装的独立 WiFi 驱动程序。该驱动程序以下面的 zip 文件分发。 Zip Contents 这里重要的文件是 AsusSetup.exeAsusSetup.iniSilentInstall.cmd。执行 AsusSetup.exe 时,它首先从 AsusSetup.ini 读取,其中包含有关驱动程序的元数据。我对文件中的一个属性 SilentInstallRun 产生了兴趣。 当你双击 AsusSetup.exe 时,它会启动一个简单的 GUI 安装程序。但是,如果你使用 -s 标志运行 AsusSetup.exe(DriverHub 使用它来进行静默安装),它将执行 任何 在 SilentInstallRun 中指定的内容。在这种情况下,ini 文件指定了一个 cmd 脚本,该脚本执行驱动程序的自动化无头安装,但它可以运行任何东西

这是完整的漏洞利用链

  1. 访问带有 driverhub.asus.com.* 子域的网站
  2. 站点为 PoC 可执行文件 “calc.exe” 发出 UpdateApp 请求

“calc.exe” 将被下载,但未能通过签名检查,因此不会被执行

  1. 站点为自定义 AsusSetup.ini 发出 UpdateApp 请求

这也将被下载,但不会被执行

  [InstallInfo]
  SilentInstallPath=.\
  SilentInstallRun=calc.exe

  1. 站点为已签名的 ASUS 二进制文件 “AsusSetup.exe” 发出 UpdateApp 请求

这将被下载并以管理员权限执行,并使用 -s 进行静默安装,这将导致它读取 AsusSetup.ini 文件并运行 “SilentInstallRun” 中指定的 “calc.exe”,也 以管理员权限

PoC 演示: Your browser does not support the video lmao

报告时间线 (DD/MM/YYYY)

评估损害

几乎在向 ASUS 报告 RCE 后,我立即编写了一个脚本来跟踪我的 VPS 上的 证书透明度 更新,这样我就可以看到是否还有其他人注册了带有 driverhub.asus.com.* 的域名。通过查看其他网站的证书透明度日志,我可以看到域名和子域名通常会在一个月内出现在日志中。 经过一个月的等待,我很高兴地说我的测试域名是唯一符合正则表达式的网站,这意味着在我报告之前不太可能被积极利用

Bug Bounty

我问 ASUS 是否提供漏洞赏金。他们回答说他们不提供,但他们会将我的名字放在他们的 “名人堂” 中。这是可以理解的,因为 ASUS 只是一个 小型创业公司,可能没有资金来支付赏金。

有趣的说明

联系我

使用 Hugo Bear 制作。由 Privex 托管。