受影响的应用:QlikView
平台:Windows
问题:通过MSI安装程序进行本地权限提升(DLL劫持竞态条件)
发现并报告者:Pawel Karwowski 和 Julian Horoszkiewicz (Eviden Red Team)
详情:
在安装了 QuikView12 的系统上,普通用户可以通过执行以下命令触发安装程序的“修复”模式:
msiexec.exe /fa PATH_TO_INSTALLER_FILE.msi
这会触发 msiexec 服务,该服务执行修复过程,运行多个操作,其中包括在 C:\Users\pk\AppData\Local\Temp 目录下创建文件,这些文件名是动态生成的,格式为:"wac<四个随机字母或数字>.tmp",例如 wac98DF.tmp。
然后,该进程以 NT AUTHORITY/SYSTEM 身份运行生成的 wac****.tmp 文件(可执行文件),用于写入并加载自身映像。
由于 C:\Users\pk\AppData\Local\ 目录归普通用户所有,C:\Users\pk\AppData\Local\Temp\ 目录继承了这些权限,从而使得普通用户能够干扰该目录的内容,例如覆盖动态生成的 DLL 文件。
这造成了一个竞态条件。如果能够找到 DLL 文件,他们可以尝试用自己的文件覆盖它们。如果能够在一个正确(非常狭窄)的时间窗口内完成替换——即在安装程序写入原始文件并关闭文件描述符之后,但在安装程序对其调用 LoadLibrary() 之前——他们就可以让自己的 DLL 文件以 NT AUTHORITY/SYSTEM 身份执行,从而实现本地权限提升。
利用过程是通过一个 PowerShell 脚本完成的,该脚本运行 .MSI 文件,检查我们感兴趣的合法 EXE 文件是否存在并被创建,然后反复将我的概念验证(Proof of Concept)EXE 复制到 Appdata\Local\Temp 目录中,从而有效地覆盖合法 EXE 文件。在加载后,PoC EXE 文件会在 C:\Users\Public 中创建一个 poc.txt 文件,其中包含调用它的命令行以及 whoami 输出。
MSI 文件 SHA256 校验和:
0267324393384ED2B0746D6CEBDD0FD7D8DBD26853BDA58F875F20F40EBBB898