
CVE-2023-34312
Produtos Afetados:
Componentes Afetados:
O Tencent QQ e o TIM são dois softwares de mensagens instantâneas desenvolvidos pela Shenzhen Tencent Computer System Co., Ltd. Ambos possuem um componente QQProtect.exe localizado em %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin. O QQProtect.exe é instalado como um serviço do Windows chamado QPCore e é executado como NT Authority\SYSTEM automaticamente quando o sistema inicia. Tanto o componente QQProtect.exe quanto sua DLL dependente QQProtectEngine.dll possuem uma vulnerabilidade de escrita em endereço arbitrário. Um atacante com baixo privilégio pode carregar uma DLL maliciosa dentro do processo do QQProtect.exe combinando as duas vulnerabilidades e obter um shell de NT Authority\SYSTEM.
A primeira vulnerabilidade está no código em QQProtect.exe+0x40c9f8:

onde a2 é um ponteiro que pode ser controlado por um atacante e dword_41a740 é uma variável global cujo valor é 0x00000001. Assim, um atacante pode escrever o valor DWORD(1) em qualquer endereço.
A segunda vulnerabilidade está no código em QQProtectEngine.dll+0x3B4F6:

onde v3 é um ponteiro que pode ser controlado por um atacante. Assim, um atacante pode escrever o valor std::bit_cast<DWORD>(ptr) + 4 em qualquer endereço ptr.
Um atacante pode adulterar um ponteiro de função residente no QQProtect.exe e usar cadeias ROP para executar código arbitrário facilmente devido ao fato de o QQProtect.exe não ter proteção ASLR.
O código da PoC é escrito em linguagem Rust. Você deve usar a toolchain i686-pc-windows-msvc para compilá-lo.
$ cd poc
$ cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = [\"-C\", \"target-feature=+crt-static\"]"
Você obterá duas DLLs:
target\release\tinyxml.dll
target\release\evil.dll
Em seguida, coloque as duas DLLs acima e o %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe juntos em uma pasta.
Finalmente, obtenha um shell de NT Authority\SYSTEM com um comando:
$ QQProtect.exe <PATH TO evil.dll>
