向所有决定阅读我有关漏洞分析的新文章的人致以问候。 上一次,在简短的三篇文章系列中,我谈到了Steam漏洞(
1,2和
3 )。 在本文中,我将讨论类似产品-Origin的漏洞,它也是游戏的启动器。 发现的漏洞编号为CVE-2019-19247和CVE-2019-19248。

这次将不再与anban香蕉比赛。 与Electronic Arts Inc.安全部门的通信历史最初是在专业水平上进行的。 与我联系时,他们给了我一个注册号,报告经过了仔细的检查和确认。 我的电子邮件都没有被忽略,并且进行了一些讨论,组织了一次会议。 对我来说,这些报告的维护非常简单,这要归功于Adrian Stone,Elise Murphy和其他处理我的报告的EA员工。
安全博客文章和
咨询 。
现在到了漏洞。 我在Windows Origin客户端中发现了两个漏洞,例如“特权升级”(lpe-本地特权升级或eop-特权升级)。 这种类型的漏洞允许任何Windows用户获得比管理员最初颁发的权限更多的权限。 在这种情况下,我们讨论的是两个“典型”增强功能-从任何用户到NT AUTHORITY \ SYSTEM(在OS中具有最大权限的帐户)。 第一个漏洞相当无聊,因此在下一节中,我将对其进行简要描述。 但是第二个非常有趣,在她的部分中,我将确切地告诉您我是如何寻找她的。
CVE-2019-19248
此漏洞包括两个部分:
- 在任意路径上创建文件夹(具有“完全访问”权限);
- 使用子句1获得NT AUTHORITY \ SYSTEM特权。
现在更详细地讨论第一点:
环境准备
必须关闭Origin客户端并停止Origin Client Service(从理论上讲,如果您关闭客户端,该服务本身将停止,但以防万一)。
对于文件夹“ C:\ ProgramData \ Origin”,权限为“全部访问”,这使我们可以完全删除其内容。
链接大厦
现在创建几个链接。 第一个链接将是NTFS重新解析点(NTFS安装点)类型-从文件夹指向文件夹的链接类型:“ C:\ ProgramData \ Origin” <->“ \ RPC Control”。 创建重新解析点不需要管理员权限。 仅需要源文件夹为空并且用户对其具有写权限(在最后一步中将它们清除,然后在其中检查权限)。 “ \ RPC Control”不是文件系统中的文件夹,而是一种特殊的文件夹-对象目录。 您无法使用常规的资源管理器看到它,但是您可以在那里进行重新定位,这显然是由于Windows肠道中使用的通用抽象。
现在,我们将创建通常的符号链接“ \ RPC Control \ CatalogCache” <->“ C:\ Path \ To \ Target \ Folder”。 在文件系统中,禁止创建没有管理员权限的符号链接,但是此规则不适用于对象目录。 因此,我们的链接将成功创建。 由于这两个链接的组合,对“ C:\ ProgramData \ Origin \ CatalogCache”的调用将重定向到“ C:\ Path \ To \ Target \ Folder”。
在此处阅读有关此类链接的更多信息。 在同一存储库中,
您可以下载用于处理链接的实用程序。
发射
在最后一步,运行客户端。 在工作开始时,他将启动“ Origin Client Service”,并发现没有文件夹“ C:\ ProgramData \ Origin \ CatalogCache”,他将尝试创建该文件夹。 浏览符号链接的结果是,它将创建“ C:\ Path \ To \ Target \ Folder”,并赋予此文件夹“ All-Full Access”权限。
在操作的第一点需要获得什么。 让我们继续第二个。
在任意路径上创建文件夹的操作
您可以在这里以多种方式工作。
简单且相当可靠的方法是创建文件夹“ C:\ Windows \ system32 \ LogonUI.exe.local”。 由于使用.local-redirection(“ dotlocal重定向”)机制,“ LogonUI.exe”(从NT AUTHORITY \ SYSTEM运行的应用程序负责用户选择屏幕和锁定屏幕的操作),它将沿路径“ C:\ Windows”从中加载库\ \ system32 \ LogonUI.exe.local \ amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.17134.648_none_fb45a0e93062a6d2 \ comctl32.dll。 通常,该机制本身很常见,因此可以有许多目标。
一个漫长而有趣的方法是通过特殊欺诈减去管理员密码的哈希值。 更多细节
在这里 。
合计
该漏洞很容易被利用,您只需要在第二点上做一些工作-找到目标并编写合适的dll。 此外,马特·尼尔森(Matt Nelson)也报告了此漏洞,其著作可在
此处找到。
CVE-2019-19247
这是我最喜欢的漏洞之一。 它显示了您与所使用的密码学相关联的谨慎程度。
一切始于我通过Origin安装游戏的事实。 一切都进行得非常顺利-只需单击几下,几分钟后即可启动游戏。 并没有立即,但我了解出了什么问题:游戏是沿着“ C:\ Program Files \ GameName”路径安装的,但没有通过UAC询问任何问题。 我迅速检查了权限,所有内容都是标准的-普通用户无法写入“ C:\ Program Files”。 经过更多的研究,我发现游戏不是由Origin客户端本身“规定”的,而是由Origin客户服务“规定的”。
我开始假设客户端如何将信息传输到服务,以便检查是否可以利用某些东西。
事实证明,传输信息的方法很简单-命名管道。 我从安装日志中了解到了这一点-以纯文本格式表示,OriginClientService管道正在接受用于处理文件和文件夹的命令。
打开IDA,将客户上传到那里。
*在IDA中进行的工作:1 *很快,我发现命令通常以文本形式发送到管道。 在附近,我找到了一个命令列表,不费吹灰之力,就向管道发送了“ copy” C:\ test \ payload.dll“ C:\ Windows \ pwn.dll”类型的命令。 为了获得快速结果,我检查了“ C:\ Windows”文件夹,但没有发现任何新内容。 但是,日志中有一些新内容-管道客户端未通过数字签名验证这一事实。
打开IDA,将服务上传到那里。
*在IDA进行的工作:2 *我发现无论如何都不会期望有团队。 连接到管道时,服务会检查连接到谁。 从连接中提取进程pid,从pid中提取可执行文件的路径,检查签名的正确性,并由EA颁发。
听起来不错,但还不够。 您可以使用合法的“ Origin.exe”(客户端可执行文件),将其复制到文件夹中的某个位置。 将导入列表“ Origin.exe”中的一些dll放在此文件夹中。 例如,出现了version.dll。 我将这种方法称为“反向dll注入”:在常规dll注入中,我们将dll复制到exe文件,但是现在我们做了相反的事情。 我迅速为version.dll编写了代理dll,并通过将命令发送到管道来添加代码。 有效负载仍未复制。 我们阅读了日志-“这是什么意思,该命令无法解密!?”。 我跳过了加密。
打开IDA,将客户上传到那里。
*在IDA中进行的工作:3,签名绕过:1 *由于客户端在日常工作中发送加密的命令,所以我可以。 我看了一下,然后看了一下,结果是这样的:AES加密,初始化一个常数向量,从文件中读取密钥。 实际上,我们将这段代码和IDA复制到代码中,进行编译,检查。 再没有。 但是日志再次提供了有用的信息-您不能将“程序文件”指定为目标路径。
打开IDA,将服务上传到那里。
*在IDA中完成的工作:4,签名绕过:1,加密绕过:1 *因此,确实可以通过检查获得一条命令,证明该命令无法将文件复制到任何地方。 并且不能写入带有“ \ .. \”的路径。 我们看看其他团队是什么。
使用注册表-再次有很多限制。 但是启动文件看起来很有趣。 至少检查不是特别明显。 编辑代码,发送命令“ ExecuteProcess” C:\ test \ payload.exe“”。 好吧,你明白了...什么都没有
再次讨论日志签名。 哦,我们已经赢了。 我们在代码中指出我们调用了复制的Origin.exe来再次加载代理dll,但具有系统权限。 添加检查并启动控制台。 我们启动,并显示具有NT AUTHORITY \ SYSTEM权限的控制台-终于一切正常。
*在IDA中完成的工作:4,签名绕过:2,加密绕过:1 *因此,您需要重新启动,进行最后的运行,并且仍然以最大的权限欣赏控制台。 重新启动,检查并...什么都没有。 怎么会这样 它只是工作。
诊断显示原始客户端服务尚未启动,因此我正在启动它。 但是它没有开始。 更准确地说,它开始但立即关闭。 我启动Origin客户端,该服务正常启动。 之后,该漏洞利用程序将再次正常工作。 可能会在那里停下来,但这不是我的方式-我想充分利用漏洞。
打开IDA,将服务上传到那里。
*在IDA中完成的工作:5,绕过签名:2,绕过加密:1 *事实证明,在启动时它会检查服务以什么参数启动。 那里没有直接有趣的东西。 来自进程的加密pid的Base64,其文件已通过签名验证。 听起来很复杂,但是我们已经绕过了加密和签名。 我们正在编写一些代码,并且可以充分利用它。
合计
该漏洞正在发挥作用。 该工作在IDA中进行:5次,旁路签名:3次,加密旁路:2次。
结论
修复漏洞:EA的开发人员为客户端引入了一种特殊的受限操作模式,该模式对使用Origin文件夹和管道设置了严格的限制。
时间轴漏洞:
2019年4月1日 :使用管道报告漏洞报告;
2019年4月7日 :发送带有任意文件夹的漏洞报告;
...非常多的字母(我数了40)...
2019年12月10日 :同意披露。
谢谢大家的关注,祝您同样的安全代理。
本文为英文。