CVE-2019-13142:Razer Surround 1.1.63.0 EoP
版本:Razer Surround 1.1.63.0
测试操作系统:Windows 10 1803 (x64)
漏洞类型:通过不安全的文件夹/文件权限实现权限提升
目的
我希望这篇文章能够激励那些认为漏洞研究令人生畏的初学者。虽然这个漏洞可能被认为很简单,但本文的主要目的是概述如何入门漏洞研究的方法论和寻找方向。此外,我也希望提醒大家不要忽视那些容易发现的漏洞,无论组织规模有多大。
简要描述
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.