
PoC pour LPE avec QlikView
Application concernée : QlikView
Plateforme : Windows
Problème : Élévation de privilèges locale via l'installateur MSI (condition de course avec détournement de DLL)
Découvert et signalé par : Pawel Karwowski et Julian Horoszkiewicz (Eviden Red Team)
Détails : Sur les systèmes où QuikView12 est installé, les utilisateurs ordinaires peuvent déclencher l'installateur en mode "réparation" en exécutant la commande suivante : msiexec.exe /fa CHEMIN_VERS_FICHIER_INSTALLATEUR.msi
Cela déclenche le service msiexec, qui exécute le processus de réparation, lance plusieurs actions et, entre autres, crée des fichiers dans le répertoire C:\Users\pk\AppData\Local\Temp, dont les noms sont générés dynamiquement selon le modèle suivant : "wac<quatre lettres ou chiffres aléatoires>.tmp", par exemple wac98DF.tmp.
Le processus utilise ensuite le fichier wac****.tmp généré (exécutable) s'exécutant en tant que NT AUTHORITY/SYSTEM pour écrire et charger une image de lui-même.
Comme le répertoire C:\Users\pk\AppData\Local\ appartient à l'utilisateur ordinaire, le répertoire C:\Users\pk\AppData\Local\Temp\ hérite des droits, ce qui permet à l'utilisateur ordinaire d'interférer avec le contenu du répertoire, par exemple en écrasant les fichiers DLL générés dynamiquement. Cela crée une condition de course. S'il parvient à localiser le fichier DLL, il peut tenter de l'écraser avec son propre fichier. S'il réussit à effectuer le remplacement dans la fenêtre de temps (très étroite) correcte — juste après que le fichier original a été écrit par l'installateur et que le descripteur de fichier a été fermé, mais avant que l'installateur appelle LoadLibrary() dessus — il peut faire exécuter son propre fichier DLL en tant que NT AUTHORITY/SYSTEM, créant une élévation de privilèges locale.
L'exploitation se fait à l'aide d'un script PowerShell qui exécute le fichier .MSI, vérifie la présence et la création de notre EXE légitime d'intérêt, et copie de manière répétée mon EXE de preuve de concept dans le répertoire Appdata\Local\Temp, écrasant ainsi le fichier EXE légitime. Une fois chargé, le fichier EXE de PoC crée un fichier poc.txt dans C:\Users\Public, accompagné de la ligne de commande qui l'a appelé et de la sortie de whoami.
Somme SHA256 du fichier MSI : 0267324393384ED2B0746D6CEBDD0FD7D8DBD26853BDA58F875F20F40EBBB898