CVE-2019-13142: Razer Surround 1.1.63.0 EoP
版本: Razer Surround 1.1.63.0
测试操作系统: Windows 10 1803 (x64)
漏洞: Razer Surround 通过不安全的文件夹/文件权限实现权限提升
目的
我希望这篇文章能激励那些认为漏洞研究令人生畏的人开始入门。虽然这个漏洞可能被认为很简单,但本文的主要目的是概述如何开始以及寻找什么的方法论。此外,我想提醒大家不要忽视那些容易发现的漏洞,无论组织规模有多大。
简要描述
Razer Surround 安装了一个名为“RzSurroundVADStreamingService”的服务,该服务以 SYSTEM 权限运行。此服务从“C:\ProgramData\Razer\Synapse\Devices\Razer Surround\Driver”运行“RzSurroundVADStreamingService.exe”。RzSurroundVADStreamingService.exe 和“C:\ProgramData\Razer\Synapse\Devices\Razer Surround\Driver”的权限允许用恶意二进制文件覆盖服务二进制文件,从而导致权限提升至 SYSTEM。
识别与利用
在进行漏洞研究时,选择一个目标可能具有挑战性。在大型软件平台中寻找漏洞可能会令人生畏,因为人们普遍认为所有漏洞都很复杂,需要特殊的技能才能识别。我想以这个漏洞为例,说明寻找漏洞的行为并不像听起来那么难。
你可能会问,为什么选择 Razer?如何识别一个软件开始寻找漏洞?答案很简单:调查你感兴趣的东西。在这种情况下,我拥有各种 Razer 产品。当你每天使用一个产品及其相关软件时,很难忽视查看的冲动。
在寻找漏洞时,一旦安装了感兴趣的软件,我通常会遵循一个常见的工作流程。这个阶段涉及分析目标软件暴露的潜在攻击面。我通常从基础开始,然后在需要时进行动态/静态分析。我最初通常寻找的是:
- 安装的服务(包括服务权限和服务可执行文件/路径权限)
- 命名管道(及其 ACL)
- C:\ProgramData 等文件夹中的日志文件权限
- 网络套接字
- DCOM 服务器和托管接口
就工具而言,我主要使用 Process Monitor 和 James Forshaw 的 NTObjectManager 项目。
在 Razer Surround 的实例中,我首先通过查看进程列表来检查软件使用了哪些特权进程。这显示“RzSurroundVADStreamingService.exe”以“NT AUTHORITY\SYSTEM”运行。下一步是弄清楚该进程是如何启动的。鉴于进程名称中有“service”,这是一个很好的起点。为了验证,在 Powershell 中执行“Get-Service Rz”很容易,它返回了所有名称中包含“Rz”的服务。这引导我找到了“RzSurroundVadStreamingService”系统服务,其 ImagePath 设置为感兴趣的可执行文件。在转储 ImagePath 后,服务可执行文件的位置很突出,因为它从“C:\ProgramData\Razer\Synapse\Devices\Razer Surround\Driver\”运行。
为什么这很有趣?默认情况下,“BUILTIN\Users”对 C:\ProgramData 具有“GenericWrite”访问权限:
软件开发人员常犯的一个错误是没有正确锁定 C:\ProgramData 中任何创建的子文件夹的权限。如果安装程序只是在 C:\ProgramData 中创建一个文件夹,该文件夹及其任何子文件夹将继承 C:\ProgramData 的权限,其中包括“BUILTIN\Users”的“GenericWrite”访问权。
在这种情况下,不正确的文件和文件夹权限是罪魁祸首,因为“Everyone”最终被授予对“C:\ProgramData\Razer\Synapse\Devices\Razer Surround\Driver”中任何文件的“FullControl”。
如前所述,此路径是服务可执行文件的“RzSurroundVADStreamingService”ImagePath 指向的位置。鉴于低权限用户对文件夹和包含的文件具有“FullControl”,可以替换“RzSurroundVADStreamingService”系统服务的服务可执行文件:
一旦有效负载被复制,重新启动主机将导致服务以 SYSTEM 权限启动新的可执行文件。在这种情况下,新的服务可执行文件将以 SYSTEM 权限启动 cmd.exe:
Razer 通过将“RzSurroundVADStreamingService.exe”和相关依赖项移动到“C:\Program Files (x86)\Razer”中的安全位置来修复此漏洞。
披露时间线
尽管 SpecterOps 致力于透明,但我们承认攻击者在新技术公开后会迅速采用。这就是为什么在公开新漏洞或攻击技术之前,我们通常会通知相应的供应商,提供充足的时间来缓解问题,并通知选定的、可信的供应商,以确保检测可以尽快交付给他们的客户。
- 2019年3月20日 — 向 Razer 发送初始报告
- 2019年3月21日 — 收到 Razer 的报告确认
- 2019年4月30日 — 初始报告后30天
- 2019年5月2日 — Razer 提供了修复版本进行测试
- 2019年5月2日 — 修复得到验证
- 2019年5月20日 — 初始报告后60天
- 2019年6月6日 — 联系 Razer 了解公开修复的时间表
- 2019年6月6日 — Razer 通知我修复应该已上线,但需要开发团队的验证
- 2019年6月7日 — 通知 Razer 网站或通过 Surround 的更新机制无法获得修复
- 2019年6月10日 — Razer 通知我存在一些内部混乱,修复将在6月底上线
- 2019年6月11日 — 通知 Razer 我将推迟披露,直到修复上线
- 2019年6月20日 — 初始报告后90天,延期获得批准
- 2019年7月1日 — Razer 通知我已向开发团队发出关于修复何时上线的通知
- 2019年7月5日 — 修复发布
-Matt N.