Steam Windows客户端本地特权升级0天

我多年来一直在寻找漏洞,而且看来,我已经看到了很多东西,但是其中的一部分工作使我无法适应并且无法理解。 供应商绝对不愿意接受有关漏洞和问题的信息。 我了解,当他们直接向您显示您犯了一个错误并且很可能不是一个错误时,这是​​非常不愉快的。 在公开来源公开确认存在问题,即员工没有工作,这是令人不快的。 但是我不明白为什么需要拒绝漏洞信息。


因此,我们故事的英雄是Valve的Steam软件。 以及其中的特权升级漏洞,该漏洞允许任何用户代表NT AUTHORITY \ SYSTEM执行命令。

脆弱性


该漏洞本身非常简单。 Steam将为其工作安装“ Steam客户服务”服务。 看一下SDDL服务描述符

O:SYG:SYD:(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;RPWP;;;BU)

在这里,我们对(A ;; RPWP ;;; BU)部分感兴趣。 在这种情况下,该条目意味着“用户”组中的任何用户都可以启动和停止服务。
让我们看看服务在启动时的作用。 并不是很有趣,但是有些操作看起来很不寻常-该服务列出了HKLM \ SOFTWARE \ Wow6432Node \ Valve \ Steam \ Apps部分的内容,并为所有子部分设置了一些权限。



我想知道展示了什么样的权利? 我们创建一个测试密钥,启动服务(上面是procmon的日志),然后查看正确的方法。 在这里还发现HKLM \ SOFTWARE \ Wow6432Node \ Valve \ Steam部分具有在所有子键上继承的所有用户的完全访问权限。 一个假设就是通过调用RegSetKeySecurityHKLM \ SOFTWARE \ Wow6432Node \ Valve \ Steam \ Apps的所有子部分设置相同的权限。 但是,如果注册表中存在一个符号链接,并且分支HKLM \ SOFTWARE \ Wow6432Node \ Valve \ Steam \ Apps \ test会指向例如HKLM \ SOFTWARE \ test2,该怎么办?

我们检查发现符号链接情况下的权限已为目标注册表分支注册。



我们检查目标分支的权限,并以SDDL格式查看(跳过无趣的内容):

(A;ID;KA;;;BU)(A;OICIIOID;GA;;;BU)

以语言形式,这意味着所有用户都具有完全(读取和写入)访问权限。 这些是Steam服务规定给分支机构的权利。

现在,该原语已经准备就绪,可以控制几乎所有注册表分支,因此轻松进行PoC。 我选择了HKLM \ SYSTEM \ ControlSet001 \ Services \ msiserver分支 -它对应于“ Windows Installer”服务,该服务也可以由用户启动,但是该服务将具有NT AUTHORITY \ SYSTEM特权。 在获得对HKLM \ SYSTEM \ ControlSet001 \ Services \ msiserver分支的控制权之后我们在ImagePath项中将可执行文件的路径更改为该路径并启动msiserver服务。 我们的可执行文件以最高权限启动-NT AUTHORITY \ SYSTEM。

我们收集上面代码中编写的所有内容,并在安装了Steam的任何Windows计算机上获得简单的特权升级。

漏洞报告


我通过Hackerone向Valve发送了漏洞报告。

在这里,第一个惊喜是等待我-在将漏洞直接转移到Valve之前,我必须首先说服黑客人员我确实拥有漏洞报告,因为Valve使用了“由HackerOne管理”功能。 我不介意-我有PoC,代表NT AUTHORITY \ SYSTEM调用控制台-脸上有证据。 我在报告中否认了。 原因表明我的报告不在研究范围之内,因为“攻击需要具有将文件拖放到用户文件系统上任意位置的能力”。 (攻击需要能够在任意文件系统路径中定位文件)。 我的反应是:“我什至没有一个文件系统操作,但是由于这个原因而失败,真的吗?”

我正在对此发表评论,另一名员工到达,但该员工仍承诺检查漏洞。 确认并通过Valve。 万岁,这一目标得以实现。 还是不...?

时间过去了,该报告再次标记为不适用。 原因:“需要将文件拖放到用户文件系统上任意位置的功能的攻击”和“需要对用户设备进行物理访问的攻击”(攻击需要对用户设备的物理访问)。 然后我意识到特权提升攻击对Valve根本不感兴趣。

关于原因的简短评论
最初,我认为不包含此类漏洞但显示已安装软件有些奇怪应用程序的报告将被排除在范围之外。

例如,出于“需要具有将文件拖放到用户文件系统上任意位置的能力的攻击”的原因,我认为关键字是突出显示的。 在我看来,Valve希望排除对以下主题的猜测:“让我将游戏安装在所有用户均可访问的文件夹中,然后我将以管理员权限运行它,而无需检查是否有人替换了文件”,但是对于他们来说,这显然是一个排除原因通常,有关本地攻击的一切。

物理访问也是如此。 对我来说,物理访问是使用螺丝刀拧开硬盘驱动器上的螺钉,从外部媒体引导以及直接通过PC硬件进行的其他有趣操作的能力。 假设通过这种访问您几乎可以执行任何操作,这是非常合乎逻辑的。 以及通过对电话的物理访问来克服两因素身份验证。 显然,Valve认为用户计算机上的任何动作都是物理现象。 而且RCE不能长期禁止:计算机是通过波浪或电线物理连接到服务器的!

自报告发布以来已经过去了45天,所以我决定公开披露此漏洞的详细信息,尽管我不确定这是否会鼓励Steam开发人员进行更改。

少量统计信息:该漏洞已在Windows 8 x64,Windows 8.1 x64和Windows 10 x64上进行了测试。 我不知道Steam软件版本编号的功能,因此我将修复服务组件的版本:

  • SteamService.dll(5.16.86.11,由Valve 06/14/2019签名)
  • SteamService.exe(5.16.86.11,由Valve 06/14/2019签名)

时间表:

6月15日 -发送了漏洞报告。
6月16日 -被拒绝,“要求能够将文件拖放到用户文件系统上任意位置的功能”。
6月16日 -通过评论重新发现。
7月2日 -由HackerOne员工确认,转移到Valve。
7月20日 -被拒绝,“要求具有将文件拖放到用户文件系统上任意位置的功能的附件。”,“要求对用户设备进行物理访问的附件”。
8月7日 -这篇文章发表了。

有点猜测


我很失望。 一家严肃的公司写着浮夸的话说安全性很重要,这可以为您打开计算机,以最大程度地访问您运行的所有程序。

具有讽刺意味的是,发现启动器实际上是为在计算机上运行第三方程序而设计的,它允许它们悄悄地获得最大特权。 您确定由不知名的开发人员在膝盖上制作的免费游戏会诚实地表现吗? 相信90%的折扣不会让您成为隐藏的矿工? 当然,在没有管理员权限的情况下,某些威胁仍然存在,但是恶意程序的高权限可能会严重破坏您的神经-禁用防病毒软件,将其修复为系统启动程序,更改几乎所有文件,任何用户。

由于Steam的普及,潜在的受害者人数非常多。 2015年,活跃的Steam帐户数量估计为1.25亿。 是的,不是所有的Steam用户都具有Windows操作系统,但大多数人都具有Windows操作系统,并且某些用户在同一台​​计算机上具有多个“实时”帐户。 但是问题的严重性仍然令人印象深刻。
还是所有这些都是故意的? 也许Steam是一种合法的后门? 确切地确定这一点是不可能的,但让我们比较一下事实:

  1. 有一个容易利用的漏洞(根据Twitter上消息判断,不是一个)。
  2. 很容易发现-我不确定我是第一个发现它的人,但是至少我是第一个公开描述它的人。
  3. 不愿接受有关此类漏洞和类似漏洞的报告(特别选择了范围,以使特权升级不属于该漏洞)。

我真的不喜欢这一切。 我不会敦促您删除Steam,但我建议对其进行操作时要非常小心。 您的安全受到威胁。

红利


事实是,在准备本文的过程中,发生了相当有趣的事件,与此相关,我决定补充时间表。

7月20日 -在拒绝报告后,我警告H1,我将于7月30日之后公开披露此漏洞的详细信息。
8月2日 -另一名h1雇员在一份封闭报告中被报道,并说他们不允许我透露。

本文准备在7月30日之前发布(该日期是在发送报告后的45天之内选定的),但已被延迟。 因此,从7月20日我的信息发出两周后,出现了一个人告诉我:“我们没有允许披露此漏洞的权限”。 实际上,事实证明:我们将您的报告标记为不合适,我们结束了讨论,我们认为没有必要向您解释任何内容,并且我们只是不想您发布它。 Valve没有一个字。 不,这是行不通的。 您不尊重我的工作,我也不尊重您的工作-我认为没有理由不为所有人发布此报告。 因此,很可能会禁止我使用h1,但我不会感到沮丧。

UPD 事实证明,昨天(8月6日)发布了Steam更新。 不,它没有解决任何问题。
文件版本:日期为08/08/2019的5.27.59.20签名。

披露后


我们将继续更新时间表:

8月7日 (发布后)-重新发现了有关h1的报告。 我收到了一封信,其实质很难概括,但是最重要的是,需要得出一些令人信服的论点来得出结论,即漏洞的后果是重大的。 有“阀门不会修复他们确定为不适用的问题”。 这些话再次证实了我的信念,即我对细节进行了公开披露。

8月7日 - 马特·尼尔森(Matt Nelson)写道 ,他报告的漏洞与我的漏洞完全相同。 这证实了我关于找到它的难易程度的论点。 他打开了PoC


8月9日 -Steam Beta收到更新,其中的一句话是“使用Windows注册表中的符号链接的固定特权升级漏洞”。 有人怀疑可以解决此问题,但目前在爆米花上存货。

8月13日 -Steam 收到一个更新 ,其中的一句话是“使用Windows注册表中的符号链接的固定特权升级漏洞”。 该服务似乎没有在注册表中公开权限,因此我们可以假定它是固定的。

8月15日 -研究人员表明该补丁可以被规避 ,该漏洞仍然相关。 快捷方式-您可以返回该服务的先前版本(补丁之前)。

8月20日 -Valve在H1节目中禁止了我。 H1的其余部分可供我使用。

本文为英文。

Source: https://habr.com/ru/post/zh-CN462479/


All Articles