第三个Steam Windows Client漏洞,但不是0day

在之前的系列中


不久前,我谈到了Steam的两个漏洞: CVE-2019-14743CVE-2019-15316 。 关于我如何注册他们的整个故事,我没有成功,被禁止了,只有在公开披露和社区的帮助下,我才设法取得成果。 Valve假装道歉并禁止我进入HackerOne,因此我决定通过此服务转移下一个漏洞。 第三次( 应该有一个关于“半条命3”的明显笑话 ),一切都或多或少地取得了成功。



漏洞描述


利用此漏洞,您可以创建具有部分受控内容的文件(或将部分受控内容添加到现有文件)。 漏洞服务的版本为5.31.28.21(SteamService.exe文件中的数据)。 首先,我将描述如何利用此漏洞,然后将描述可能的后果。

步骤1.环境


您必须终止Steam应用程序并停止其运行的Steam客户端服务。 通常,没有管理员权限的用户无法启动和停止任何服务。 但是专门针对此服务,Valve设置了允许所有用户停止和启动它的权限。

在用户可访问的任何位置创建一个文件夹(例如,“ C:\ test”)。 在此文件夹中,您需要从Steam源文件夹中复制Steam.exe和steamclient.dll文件(默认情况下,这是“ C:\ Program Files(x86)\ Steam”)。 创建一个空的日志子文件夹(“ C:\ test \ logs”)。

现在,我们来修复注册表:在“ HKLM \ Software \ wow6432node \ valve \ steam”分支中,将“ InstallPath”参数的值更改为“ C:\ test \ 1 \ ..”。 通常,对于非管理员用户,HKLM中的注册表分支不可写,但在这种情况下不可写。 安装Valve时,他们对HKLM内的分支机构设置了这样的权限,即所有用户都可以使用其中的所有操作(“用户”组的“完全控制”权限)。

步骤2.让我们做一点测试


启动Steam客户端服务。 停止之后(这将在几秒钟后自动发生),检查文件夹“ C:\ test \ logs”的内容-我们在此处找到文件“ service_log.txt”。 日志的内容将如下所示:

08/27/19 13:45:01 : ERROR: SteamService: Invalid file signature C:\test\1\..\bin\SteamService.dll 

请注意,路径“ C:\ test \ 1 \ ..”等效于路径“ C:\ test”,因此Windows使用第二个来工作,第一个进入消息。 删除文件“ service_log.txt”并继续。

步骤3.添加更多文本。


一个有趣的事实:当Windows使用包含“ \ ..”的路径时,它将自动简化此类路径。 不检查暂存文件夹。

例如,尽管文件夹名称中不能使用尖括号,但路径“ C:\ 1 \ <test> \ ..”将转换为“ C:\ 1”。

第一步,我们在注册表中注册了路径,现在我们将在其中添加换行符。 这可以通过编写简单的代码来完成,但是也可以从regedit界面中完成。 只需打开注册表分支“ HKLM \ Software \ wow6432node \ valve \ steam”,然后在“ InstallPath”参数的上下文菜单中选择“修改二进制数据..”。 会出现类似十六进制编辑器的内容,您可以在其中进行必要的编辑。



我们将对该服务进行另一次测试启动,并检查我们的操作结果。



测试之后,必须再次删除文件“ service_log.txt”。

步骤4.重定向创建的文件


没有管理员权限的用户无法创建从一个文件到另一个文件的符号链接。 但是有一个重点-您可以组合其他类型的链接,这些链接对于没有管理员权限的用户可用,从而获得接近文件之间符号链接的效果。

首先,从文件夹“ C:\ test \ logs”到“ \ RPCControl \”创建一个NTFS重新解析点(NTFS安装点的另一个名称)。 “ \ RPC Control \”不是通常意义上的普通文件夹,例如,在资源管理器中无法查看。 这是一个系统对象目录,例如,其中有名为互斥对象,事件和其他类似对象的目录。 不清楚为什么通过NTFS重新解析点进行重定向对她有效,这很可能是因为该点是对文件系统和对象目录中的文件夹使用相同的抽象。 在对象目录中,您可以创建到文件的符号链接,而无需管理员权限。 创建形式为“ \ RPC Control \ service_log.txt” <->“ C:\ Path \ to \ file”的符号链接。

结果,对“ C:\ test \ logs \ service_log.txt”的任何调用都将重定向到文件“ C:\ Path \ to \ file”。 要创建这样的重定向,有两个基本要求-从其创建NTFS重新解析点的文件夹必须为空,并且用户必须也可写。 为了满足第一个条件,在每次测试之后,我们删除文件“ service_logs.txt”,第二个条件是通过在用户控制的位置创建源文件夹这一事实来确保的。

有一个特殊的实用程序可以创建这样的符号链接对-CreateSymlink,可以从GitHub上下载。 实用程序用法:

 CreateSymlink.exe <> <> 

在我们的情况下,它将是:

 CreateSymlink.exe "C:\test\logs\service_log.txt" "C:\\\" 

综上所述,我们得到的结果是,当Steam客户端服务启动时,将沿着创建符号链接时指定的路径创建一个文件,并且该文件将包含我们可以控制的内容(除了第一行和最后一行)。 如果我们指定现有文件的路径,则内容将附加到文件末尾。 所有这些都将代表具有NT AUTHORITY \ SYSTEM特权的Steam客户端服务完成。

影响力


现在,我将列出最不重要和升序的可能影响。

  1. 多斯

    如果符号链接的目标是设置“ C:\ Windows \ System32 \ config \ SAM”或“ C:\ Windows \ System32 \ config \ SECURITY”,则操作系统不太可能在重启后启动。
  2. 互联网上的用户重定向

    设置符号链接的目标“ C:\ Windows \ system32 \ drivers \ etc \ hosts”,然后在其中添加一行,例如“ 127.0.0.1 google.com”。

    结果:

  3. 水平EoP
    特权的水平增加是权利的变化,在这种变化中,我们不能访问更高的权限,而可以访问相同级别的权限,但是可以访问相对于其他对象的权限,例如,访问其他用户的权限。

    设置符号链接的目标“ C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ StartUp \ run.bat”,然后在其中添加类似于“ start C:\ test \ 1.exe”的行。
    用户登录时,将执行C:\ ProgramData \ Microsoft \ Windows \“开始”菜单\“程序” \“启动”文件夹中的所有文件。 因此,一个用户可以强迫另一用户运行代码。 从bat文件中,所有行将依次执行。 第一个和最后一个根本不执行任何操作,但是已实现的命令“ start C:\ test \ 1.exe”将起作用。

    通过引入这样的命令,有一个微妙的地方-在路径规范化过程中会考虑字符“ \”,因此为了正确操作,有必要在注册表中的路径中添加更多的“ \ ..”。
  4. 垂直EoP
    垂直特权升级是一种常见的升级,例如,从没有管理员权限的用户升级到NT AUTHORITY \ SYSTEM。

    通常,您可以找到执行具有较高权限的文本脚本的软件。 我们可以向此类脚本添加命令,并以高权限执行代码。 我没有在干净的操作系统中找到这样的脚本,因此您不能仅演示这种利用。 但作为示例,我可以指定由NVIDIA和VmWare创建的bat文件或域中OS的登录脚本。

另外,为了增强功能,您可以检查创建xml文件,ini文件格式损坏的功能。 不幸的是,有太多选择-为TaskSheduler创建任务,与.manifest和其他库下载一起使用,以及许多其他选择。 在我看来,上述结果已经足以理解该漏洞的结果。

时间表


为了使图片更完整,我将为该漏洞提供一个无聊的时间表。
08/26-找到一个漏洞。
8月27日 -对H1的禁令发布了一份报告。
12.09-已发布更正

结论


这是我完成Steam研究职位的地方-通过相当肤浅的分析发现了3个漏洞,这还不够。 要更深入,您需要更多的时间和欲望。 不幸的是,Valve的态度和HackerOne员工的无能是很大的障碍。

我要再次感谢所有帮助提高Steam安全性的读者。 我感谢Valve解决这些漏洞并驳斥了我的阴谋论。 我感谢HackerOne提供的平台,尽管事实上它们基本上阻止了我将漏洞传达给Valve。

本文为英文。

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


All Articles