
CVE-2023-34312
Prodotti interessati:
Componenti interessati:
Tencent QQ e TIM sono due software di messaggistica istantanea sviluppati da Shenzhen Tencent Computer System Co., Ltd. Entrambi hanno un componente QQProtect.exe situato in %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin. QQProtect.exe viene installato come servizio Windows denominato QPCore e viene eseguito come NT Authority\SYSTEM automaticamente all'avvio del sistema. Sia il componente QQProtect.exe che la sua DLL dipendente QQProtectEngine.dll presentano una vulnerabilità di scrittura a un indirizzo arbitrario. Un attaccante con privilegi limitati può caricare una DLL dannosa all'interno del processo QQProtect.exe combinando le due vulnerabilità e ottenere una shell NT Authority\SYSTEM.
La prima vulnerabilità è il codice all'indirizzo QQProtect.exe+0x40c9f8:

dove a2 è un puntatore che può essere controllato da un attaccante e dword_41a740 è una variabile globale il cui valore è 0x00000001. Quindi un attaccante può scrivere il valore DWORD(1) a qualsiasi indirizzo.
La seconda vulnerabilità è il codice all'indirizzo QQProtectEngine.dll+0x3B4F6:

dove v3 è un puntatore che può essere controllato da un attaccante. Quindi un attaccante può scrivere il valore std::bit_cast<DWORD>(ptr) + 4 a un qualsiasi indirizzo ptr.
Un attaccante può alterare un puntatore a funzione presente in QQProtect.exe e utilizzare catene ROP per eseguire facilmente codice arbitrario, poiché QQProtect.exe non dispone della protezione ASLR.
Il codice del PoC è scritto in linguaggio Rust. È necessario utilizzare la toolchain i686-pc-windows-msvc per compilarlo.
$ cd poc
$ cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = [\"-C\", \"target-feature=+crt-static\"]"
Otterrai due DLL:
target\release\tinyxml.dll
target\release\evil.dll
Quindi inserisci le due DLL precedenti e %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe insieme in una cartella.
Infine ottieni una shell NT Authority\SYSTEM con un comando:
$ QQProtect.exe <PATH TO evil.dll>
