
CVE-2023-34312
Produits concernés :
Composants concernés :
Tencent QQ et TIM sont deux logiciels de messagerie instantanée développés par Shenzhen Tencent Computer System Co., Ltd. Ils possèdent tous deux un composant QQProtect.exe situé dans %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin. QQProtect.exe est installé en tant que service Windows nommé QPCore et s'exécute en tant que NT Authority\SYSTEM automatiquement au démarrage du système. Le composant QQProtect.exe et sa DLL dépendante QQProtectEngine.dll présentent tous deux une vulnérabilité d'écriture d'adresse arbitraire. Un attaquant disposant de faibles privilèges peut charger une DLL malveillante dans le processus QQProtect.exe en combinant les deux vulnérabilités et obtenir un shell NT Authority\SYSTEM.
La première vulnérabilité se trouve dans le code à QQProtect.exe+0x40c9f8:

où a2 est un pointeur contrôlable par un attaquant et dword_41a740 est une variable globale dont la valeur est 0x00000001. Ainsi, un attaquant peut écrire la valeur DWORD(1) à n'importe quelle adresse.
La deuxième vulnérabilité se trouve dans le code à QQProtectEngine.dll+0x3B4F6:

où v3 est un pointeur contrôlable par un attaquant. Ainsi, un attaquant peut écrire la valeur std::bit_cast<DWORD>(ptr) + 4 à n'importe quelle adresse ptr.
Un attaquant peut modifier un pointeur de fonction présent dans QQProtect.exe et utiliser des chaînes ROP pour exécuter facilement du code arbitraire en raison du fait que QQProtect.exe ne dispose pas de protection ASLR.
Le code de la preuve de concept est écrit en langage Rust. Vous devez utiliser la chaîne d'outils i686-pc-windows-msvc pour le compiler.
$ cd poc
$ cargo +stable-i686-pc-windows-msvc build --release --config "build.rustflags = [\"-C\", \"target-feature=+crt-static\"]"
Vous obtiendrez deux DLL :
target\release\tinyxml.dll
target\release\evil.dll
Placez ensuite les deux DLL ci-dessus et %ProgramFiles(x86)%\Common Files\Tencent\QQProtect\bin\QQProtect.exe ensemble dans un dossier.
Enfin, obtenez un shell NT Authority\SYSTEM avec une seule commande :
$ QQProtect.exe <CHEMIN VERS evil.dll>
