
CVE-2023-34312
Productos afectados:
Componentes afectados:
Tencent QQ y TIM son dos programas de mensajería instantánea desarrollados por Shenzhen Tencent Computer System Co., Ltd. Ambos incluyen un componente QQProtect.exe ubicado en %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin. QQProtect.exe se instala como un servicio de Windows llamado QPCore y se ejecuta como NT Authority\SYSTEM automáticamente al iniciar el sistema. Tanto el componente QQProtect.exe como su DLL dependiente QQProtectEngine.dll tienen una vulnerabilidad de escritura en una dirección arbitraria. Un atacante con privilegios bajos puede cargar una DLL maliciosa dentro del proceso QQProtect.exe combinando las dos vulnerabilidades y obtener una shell de NT Authority\SYSTEM.
La primera vulnerabilidad se encuentra en el código en QQProtect.exe+0x40c9f8:

donde a2 es un puntero que puede ser controlado por un atacante y dword_41a740 es una variable global cuyo valor es 0x00000001. Por lo tanto, un atacante puede escribir el valor DWORD(1) en cualquier dirección.
La segunda vulnerabilidad se encuentra en el código en QQProtectEngine.dll+0x3B4F6:

donde v3 es un puntero que puede ser controlado por un atacante. Por lo tanto, un atacante puede escribir el valor std::bit_cast<DWORD>(ptr) + 4 en cualquier dirección dada ptr.
Un atacante puede manipular un puntero a función que reside en QQProtect.exe y usar cadenas ROP para ejecutar código arbitrario fácilmente, debido a que QQProtect.exe no tiene protección ASLR.
El código del PoC está escrito en Rust. Debe usar la cadena de herramientas i686-pc-windows-msvc para compilarlo.
$ cd poc
$ cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = [\"-C\", \"target-feature=+crt-static\"]"
Obtendrá dos DLL:
target\release\tinyxml.dll
target\release\evil.dll
Luego, coloque las dos DLL anteriores y %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe juntas en una carpeta.
Finalmente, obtenga una shell de NT Authority\SYSTEM con un solo comando:
$ QQProtect.exe <PATH TO evil.dll>
