Steam游戏客户端 本地提权 0day
'''
通过注册表提权这个姿势有水平...
--- 鲁迅
'''
文章内容来源amonitoring.ru
下面为编译内容
介绍:
俺挖漏洞也挖了好几年了,自我感觉也撸了很多,但有个问题俺一直想不通也不能接受。那就是厂商非常不情愿,去了解漏洞或者问题的信息。俺知道,如果其他人直接得指出,哦,你弄了个bug,哦哦,不止一个,那当然很不爽。实质上,通过公开的信息,很难去判断某个员工是犯了某些错,然鹅,俺不明白为什么漏洞报告还是会被拒。。。
算鸟,说回Valve Software 公司的Steam。
漏洞:
这个漏洞本身很简单,Steam 安装了个服务,名叫: “Steam Clinet Service”, 用来做一些程序内部的事情。
检查一下这个服务的SDDL(安全描述符定义语言):
参考:https://habr.com/ru/company/pm/blog/442662/(俄文的,咱不会翻译...)
```
O:SYG:SYD:(A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;RPWP;;;BU)
```
最有趣的部分是(A;;RPWP;;;BU),这意味着,任何“Users”这个组里的成员都允许去启动和停止这个服务。
现在,来检查一下这个服务器启动时的动作。实质上,这有点无聊。然鹅,某些注册表动作看起来有点奇怪。这个服务枚举了
'''
HKLM\Software\Wow6432Node\Valve\Steam\Apps
'''
里的所有子键,每个都设了些安全描述符。
这些安全描述符到底是啥?俺创建了个测试键 :
```
HKLM\Software\Wow6432Node\Valve\Steam\Apps\test
```
然后启动这个服务(Procmon 日志在上方),并检查这个注册表键的权限。在这里俺发现这个键
```
HKLM\SOFTWARE\Wow6432Node\Valve\Steam
```
直截了当地,对于“Users”组就是“Full control”权限有木有,然后这权限也会直接让它的所有子键继承。俺寻思着应该是RegSetKeySecurity设置了同样的权限,然后当出现个软连接的时候,有趣的事情发生了!
俺创建了个软链接
```
HKLM\SOFTWARE\Wow6432Node\Valve\Steam\Apps\test
```
指向
```
HKLM\SOFTWARE\test2
```
然后又重启这个服务。
Steam 的服务给咱的目标键也设置了安全描述符!!!检查一下这个键的SDDL(部分不感兴趣的内容就略过了)
```
(A;ID;KA;;;BU)(A;OICIIOID;GA;;;BU)
```
用人话说,就是,对所有用户的完全(读和写)访问权限。这就是这个服务给这个键设的安全描述符。
所以,俺们就有了一个初始的手段,去控制注册表里几乎每一个键。这很容易就能做到了EoP(提权)。俺选择了这个键:
```
HKLM\SYSTEM\ControlSet001\Services\msiserver
```
呃,是关于Windows 安装( “Windows Installer”)服务的(系统安装任务程序都用到它),系统里每个用户都可以启动它,就跟Steam的服务一样一样的,但是呢,是"NT AUTHORITY\SYSTEM"权限执行滴。
在获得控制之后(通过Steam上述的漏洞,把这个键被改为所有人可以写之后),剩下需要做的就很简单了,把
'''
HKLM\SYSTEM\ControlSet001\Services\msiserve
'''
这个键的ImagePath 值改为你的程序路径,随后启动"Windows Installer"就行。ImagePath指定的程序就会以"NT AUTHORITY\SYSTEM"这个系统最高权限启动啦。。。。
综上所述,对于装了Steam游戏软件的Windows机器,把上面堆东西全都用起来,那么,(尽管是最渣渣的用户)俺们也可以以最高权限运行俺们喜欢的程序囖。。,
·····
然后是一段很长很长的漏洞披(撕)露(逼)过程....呃,这段不翻译,早点碎觉。
.....
就在前天(2019年8月6号,美国时间),Steam 更新了,但是,但是... bug没修!!!版本号是versions: 5.27.59.20
编译:HackerHub
原作:Vasily Kravets
原文:https://amonitoring.ru/article/steamclient-0day/
HackerHub