CVE-2023-34312 騰訊 QQ / TIM 本地提權(quán)漏洞

受影響的軟件:
QQ 9.6.1 ~ 9.7.9 (9.7.10 已修復(fù))
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?是由深圳市騰訊計(jì)算機(jī)系統(tǒng)有限公司開(kāi)發(fā)的兩款即時(shí)通訊軟件。它們都有一個(gè)可刪除的組件?QQProtect.exe,位于?%ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin
。QQProtect.exe?被安裝為一個(gè)名為?QPCore?的 Windows 服務(wù),并在系統(tǒng)啟動(dòng)時(shí)自動(dòng)以?NT Authority\SYSTEM
?賬戶運(yùn)行。組件?QQProtect.exe?及其依賴 DLL?QQProtectEngine.dll?都存在一個(gè)任意地址寫(xiě)入漏洞。低權(quán)限的攻擊者可以通過(guò)結(jié)合這兩個(gè)漏洞在?QQProtect.exe?進(jìn)程中加載惡意 DLL,并獲得帶有?NT Authority\SYSTEM
?權(quán)限的外殼。
2. 漏洞
第一個(gè)漏洞是位于?QQProtect.exe+0x40c9f8
?的代碼:

其中?a2
?是一個(gè)可以被攻擊者控制的指針,dword_41a740
?是一個(gè)全局變量,其值為?0x00000001
,所以攻擊者可以在任何地址寫(xiě)入值?DWORD(1)
。
第二個(gè)漏洞是位于?QQProtectEngine.dll+0x3B4F6
?的代碼:

其中?v3
?是一個(gè)可以被攻擊者控制的指針,所以攻擊者可以在任何給定的地址?ptr
?上寫(xiě)入?std::bit_cast<DWORD>(ptr) + 4
?的值。
由于?QQProtect.exe
?沒(méi)有 ASLR 保護(hù),攻擊者可以篡改駐留在?QQProtect.exe
?中的函數(shù)指針,并使用 ROP 鏈輕松執(zhí)行任意代碼。
3. 概念證明
poc 代碼使用 Rust 語(yǔ)言編寫(xiě),你需要用?i686-pc-windows-msvc
?工具鏈來(lái)編譯。
你會(huì)得到兩個(gè) DLL:
或從?https://github.com/savfile/CVE-2023-34312/releases/tag/v0.0.0-alpha?下載已編譯好的版本。
然后把上面的兩個(gè) DLL 和?%ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe
?一起放在一個(gè)文件夾里。
最后用一條命令獲得帶有?NT Authority\SYSTEM
?權(quán)限的外殼:
4. 演示
