QQ 9.7.1.28940 ~ 9.7.8.29039
TIM 3.4.5.22071 ~ 3.4.7.22084
受影响的组件:
QQProtect.exe 4.5.0.9424(在 TIM 3.4.5.22071 中)
QQ权限.exe 4.5.0.9426(QQ 9.7.1.28940 中)
QQProtectEngine.dll 4.5.0.9424(在 TIM 3.4.5.22071 中)
QQ引擎.dll 4.5.0.9426(QQ 9.7.1.28940中)
腾讯QQ
和TIM
是深圳腾讯计算机系统有限公司开发的两款即时通讯软件。它们都有一个名为QQProtect.exe
的组件,位于%ProgramFiles(x86)%Common FilesTencentQQProtectbin
QQProtect.exe
作为一个名为QPCore
的Windows
服务安装,并在系统启动时自动以NT AuthoritySYSTEM
身份运行
QQProtect.exe
组件及其依赖的DLL
QQProtectEngine.dll
都存在任意地址写入漏洞
低权限的攻击者可以通过结合这两个漏洞,在QQProtect.exe
进程中加载恶意DLL
,并获得NT AuthoritySYSTEM
权限 shell
漏洞
第一个漏洞是 QQProtect.exe+0x40c9f8
的代码:
其中 a2
是一个可以被攻击者控制的指针,dword_41a740
是一个全局变量,其值为 0x00000001
。因此,攻击者可以在任意地址写入 DWORD(1)
的值
第二个漏洞是QQProtectEngine.dll+0x3B4F6
处的代码:
其中 v3
是一个可以被攻击者控制的指针。因此,攻击者可以在任意给定的地址 ptr
处写入 std::bit_cast<DWORD>(ptr)
+ 4
的值
攻击者可以篡改 QQProtect.exe
中的一个函数指针,并使用 ROP
链轻松执行任意代码,因为 QQProtect.exe
没有 ASLR
保护
证明
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-elevation
原文始发于微信公众号(晴天组织):腾讯QQ/TIM本地特权提升(CVE-2023-34312)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论