漏洞简述
腾讯QQ和TIM是由有限公司开发的两款即时通讯软件。它们都有一个组件QQProtect.exe,位于%ProgramFiles(x86)%Common FilesTencentQQProtectbin中。QQProtect.exe作为名为QPCore的Windows服务安装,并在系统启动时自动作为NT AuthoritySYSTEM运行。组件QQProtect.exe及其依赖DLL QQProtect Engine.DLL都存在任意地址写入漏洞。权限较低的攻击者可以通过结合这两个漏洞在QQProtect.exe进程内加载邪恶的DLL,并获得NT AuthoritySYSTEM shell。
影响产品:
QQ 9.7.1.28940 ~ 9.7.8.29039 TIM 3.4.5.22071 ~ 3.4.7.22084
影响组件
QQProtect.exe 4.5.0.9424 (in TIM 3.4.5.22071) QQProtect.exe 4.5.0.9426 (in QQ 9.7.1.28940) QQProtectEngine.dll 4.5.0.9424 (in TIM 3.4.5.22071) QQProtectEngine.dll 4.5.0.9426 (in QQ 9.7.1.28940)
漏洞分析
第一个漏洞点是QQProtect.exe+0x40c9f8的代码:
其中 a2 是一个可以被攻击者控制的指针, dword_41a740 是一个全局变量,其值为 0x00000001 。因此攻击者可以 DWORD(1) 在任何地址写入值。
第二个漏洞点是QQProtectEngine.dll +0x3B4F6中的代码:
其中 v3 是可由攻击者控制的指针。因此攻击者可以 std::bit_cast(ptr) + 4 在任何给定地址写入值 ptr 。
由于不具有ASLR保护,攻击者可以篡改驻留在其中的函数指针 QQProtect.exe 并使用ROP链来容易地执行仲裁代码 QQProtect.exe 。
漏洞证明
poc代码用Rust语言编写。你应该使用 i686-pc-windows-msvc 工具链来编译它。
$ cd poc $ cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = ["-C", "target-feature=+crt-static"]"
会得到两个DLL:
targetreleasetinyxml.dll targetreleaseevil.dll
然后把上面的两个dll文件 %ProgramFiles(x86)%Common FilesTencentQQProtectbinQQProtect.exe 放在一个文件夹里。
最后 NT AuthoritySYSTEM 用一个命令获取shell:
$ QQProtect.exe <PATH TO evil.dll>
复现展示
https://github.com/vi3t1/qq-tim-elevationauthor:vi3t1
原文始发于微信公众号(Z2O安全攻防):攻防必备 | CVE-2023-34312 QQ&TIM本地特权提升
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论