CVE-2023-34312 腾讯 QQ / TIM 本地提权漏洞

受影响的软件:
QQ 9.6.1 ~ 9.7.9 (9.7.10 已修复)
TIM 3.4.1 ~ 3.4.6
受影响的组件:
QQProtect.exe 4.5.0.9424
QQProtect.exe 4.5.0.9426
QQProtectEngine.dll 4.5.0.9424
QQProtectEngine.dll 4.5.0.9426
1. 概要
腾讯QQ 和 TIM 是由深圳市腾讯计算机系统有限公司开发的两款即时通讯软件。它们都有一个可删除的组件 QQProtect.exe,位于 %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin
。QQProtect.exe 被安装为一个名为 QPCore 的 Windows 服务,并在系统启动时自动以 NT Authority\SYSTEM
账户运行。组件 QQProtect.exe 及其依赖 DLL QQProtectEngine.dll 都存在一个任意地址写入漏洞。低权限的攻击者可以通过结合这两个漏洞在 QQProtect.exe 进程中加载恶意 DLL,并获得带有 NT Authority\SYSTEM
权限的外壳。
2. 漏洞
第一个漏洞是位于 QQProtect.exe+0x40c9f8
的代码:

其中 a2
是一个可以被攻击者控制的指针,dword_41a740
是一个全局变量,其值为 0x00000001
,所以攻击者可以在任何地址写入值 DWORD(1)
。
第二个漏洞是位于 QQProtectEngine.dll+0x3B4F6
的代码:

其中 v3
是一个可以被攻击者控制的指针,所以攻击者可以在任何给定的地址 ptr
上写入 std::bit_cast<DWORD>(ptr) + 4
的值。
由于 QQProtect.exe
没有 ASLR 保护,攻击者可以篡改驻留在 QQProtect.exe
中的函数指针,并使用 ROP 链轻松执行任意代码。
3. 概念证明
poc 代码使用 Rust 语言编写,你需要用 i686-pc-windows-msvc
工具链来编译。
你会得到两个 DLL:
或从 https://github.com/savfile/CVE-2023-34312/releases/tag/v0.0.0-alpha 下载已编译好的版本。
然后把上面的两个 DLL 和 %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe
一起放在一个文件夹里。
最后用一条命令获得带有 NT Authority\SYSTEM
权限的外壳:
4. 演示
