华硕预装驱动软件中的一键 RCE 漏洞 (One-Click RCE in ASUS’s Preinstalled Driver Software)
MrBruh's Epic Blog Home Music
华硕预装驱动软件中的一键 RCE 漏洞 (One-Click RCE in ASUS’s Preinstalled Driver Software)
引言
这个故事始于一次关于新 PC 零件的对话。
在忽略了朋友的建议后,我为我的 PC 购买了一块新的 ASUS 主板。我有点担心我的 BIOS 会在后台默默地将软件安装到我的操作系统中。但这个功能可以关闭,所以我打算这样做。
登录 Windows 后,我立即收到了一个通知,要求管理员权限以完成 ASUS DriverHub 的安装,因为我忘记更改 BIOS 选项。由于我无论如何都需要获得主板的 WiFi 驱动程序,所以我很好奇并安装了它。
我没有 DriverHub 的截图,但它在屏幕右下角显示了一个完全像这样的弹出窗口
DriverHub
DriverHub 是一个有趣的驱动程序软件,因为它没有任何 GUI。相反,它只是一个后台进程,与网站 driverhub.asus.com 通信,并告诉你应该为你的系统安装哪些驱动程序以及哪些需要更新。自然地,我想更多地了解这个网站如何知道我的系统需要什么驱动程序以及它是如何安装它们的,所以我打开了 Firefox 的网络选项卡。
正如我所预料的,该网站使用 RPC 与在我系统上运行的后台进程进行通信。在这里,后台进程在本地托管一个 HTTP 或 Websocket 服务,网站或服务可以通过将 API 请求发送到预定义端口上的
127.0.0.1
来连接到该服务,在本例中是 53000
。
就在这时,我精英黑客的直觉开始蠢蠢欲动。
这是一种非常草率的驱动程序管理软件设计方式。如果 RPC 没有得到适当的保护,它可能会被攻击者武器化以安装恶意应用程序。
寻找漏洞
下一步是看看我是否可以从任何网站调用 RPC,这是通过将浏览器中的请求复制为 curl 命令并将其粘贴到我的终端中来完成的。
在摆弄了一段时间的命令变体后,我的假设得到了证实。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 中的未使用端点。
- Initialize 此命令由网站用于检查软件是否已安装,并返回基本的安装信息。
- DeviceInfo 这会返回所有已安装的 ASUS 软件、所有已安装的 .sys 驱动程序、所有硬件组件以及你的 MAC 地址。
- Reboot 这会立即重新启动目标设备,无需确认。
Your browser does not support the video lmao
- Log 这会返回 DriverHub 所有日志的压缩副本。
- InstallApp 这会按 ID 安装应用程序或驱动程序。所有应用程序的 ID 都硬编码在一个 XML 文件中,该文件由 DriverHub 安装程序提供。
- UpdateApp 这使用提供的文件 URL 下载并运行 DriverHub 来进行自我更新。
实现 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 函数的观察。
- “Url” 参数必须包含 “.asus.com”,但与 RPC 源检查不同,它允许像
example.com/payload.exe?foo=.asus.com
这样的愚蠢行为 - 它使用 URL 结尾处指定的文件名保存文件。
- 可以下载任何扩展名的任何文件
- 如果文件是由 ASUS 签名的可执行文件,它将自动以管理员权限执行
- 它将运行 任何 由 ASUS 签名的可执行文件,而不仅仅是 DriverHub 安装程序。
- 如果下载的文件未能通过签名检查,则不会被删除。
当我得知 DriverHub 验证可执行文件的签名时,我怀疑 RCE 可能不再可行,但我仍然坚持了下来。
我的第一个想法可能是 时序攻击,我告诉 DriverHub 安装一个有效的可执行文件,在它验证签名之后,但在它安装 exe 之前,我用一个恶意可执行文件替换它。我推测这可以通过并行发出两个 UpdateApp 请求来实现,恶意更新紧随合法更新之后。
然而,时序攻击需要非常精确,并且需要下载文件才能影响时序,这使得它成为一个非常不可靠的选择。鉴于此,我决定退一步,思考是否有其他选择。
最终,我又回到了我一直要安装的独立 WiFi 驱动程序。该驱动程序以下面的 zip 文件分发。
这里重要的文件是
AsusSetup.exe
、AsusSetup.ini
和 SilentInstall.cmd
。执行 AsusSetup.exe 时,它首先从 AsusSetup.ini 读取,其中包含有关驱动程序的元数据。我对文件中的一个属性 SilentInstallRun
产生了兴趣。
当你双击 AsusSetup.exe 时,它会启动一个简单的 GUI 安装程序。但是,如果你使用 -s
标志运行 AsusSetup.exe(DriverHub 使用它来进行静默安装),它将执行 任何 在 SilentInstallRun 中指定的内容。在这种情况下,ini 文件指定了一个 cmd 脚本,该脚本执行驱动程序的自动化无头安装,但它可以运行任何东西。
这是完整的漏洞利用链
- 访问带有
driverhub.asus.com.*
子域的网站 - 站点为 PoC 可执行文件 “calc.exe” 发出 UpdateApp 请求
“calc.exe” 将被下载,但未能通过签名检查,因此不会被执行
- 站点为自定义 AsusSetup.ini 发出 UpdateApp 请求
这也将被下载,但不会被执行
[InstallInfo]
SilentInstallPath=.\
SilentInstallRun=calc.exe
- 站点为已签名的 ASUS 二进制文件 “AsusSetup.exe” 发出 UpdateApp 请求
这将被下载并以管理员权限执行,并使用
-s
进行静默安装,这将导致它读取 AsusSetup.ini 文件并运行 “SilentInstallRun” 中指定的 “calc.exe”,也 以管理员权限
PoC 演示: Your browser does not support the video lmao
报告时间线 (DD/MM/YYYY)
- 07/04/2025 - 发现初始漏洞
- 08/04/2025 - 将漏洞升级到 RCE
- 08/04/2025 - 报告漏洞
- 09/04/2025 - 来自 ASUS 的自动回复
- 17/04/2025 - 我跟进并收到了人工回复,告知他们已修复该软件并向我发送了一个版本以进行验证
- 18/04/2025 - ASUS 确认修复已上线
- 09/05/2025 - 发布了 CVE-2025-3462 (8.4) 和 CVE-2025-3463 (9.4)
评估损害
几乎在向 ASUS 报告 RCE 后,我立即编写了一个脚本来跟踪我的 VPS 上的 证书透明度 更新,这样我就可以看到是否还有其他人注册了带有 driverhub.asus.com.*
的域名。通过查看其他网站的证书透明度日志,我可以看到域名和子域名通常会在一个月内出现在日志中。
经过一个月的等待,我很高兴地说我的测试域名是唯一符合正则表达式的网站,这意味着在我报告之前不太可能被积极利用。
Bug Bounty
我问 ASUS 是否提供漏洞赏金。他们回答说他们不提供,但他们会将我的名字放在他们的 “名人堂” 中。这是可以理解的,因为 ASUS 只是一个 小型创业公司,可能没有资金来支付赏金。
有趣的说明
- 通过 ASUS 的 安全咨询表 提交漏洞报告时,Amazon CloudFront 将附加的 PoC 标记为恶意请求 并阻止了提交。所以我不得不剥离一些 PoC 代码并链接视频录像。
- 如果你在 DriverHub 中单击 “全部安装” 而不是手动单击每个推荐驱动程序的安装,它还会安装 ArmouryCrate、ASUS 的自定义 CPU-Z、Norton360 和 WinRAR。
- 他们对 RCE 的 CVE 描述有点误导。他们说 “此问题仅限于主板,不影响笔记本电脑、台式计算机”,但是这会影响任何安装了 DriverHub 的计算机,包括台式机/笔记本电脑。此外,他们没有说它允许任意/远程代码执行,而是说它 “可能允许不受信任的源影响系统行为”。
- 我的板载 WIFI 仍然无法工作,我不得不购买一个外部 USB WiFi 适配器。感谢 DriverHub 的无所作为。
联系我
- 如果你有任何问题,可以通过 Signal(首选)@paul19.84 或通过电子邮件
contact [at] mrbruh.com
与我联系。