
Rapport et POC pour CVE-2020-0753, CVE-2020-0754 et six vulnérabilités Window DOS corrigées.
Le service Windows Error Reporting a corrigé 2 bugs d'élévation de privilèges lors du dernier Patch Tuesday, ces deux bugs sont assignés aux CVE-2020-0753 et CVE-2020-0754. Les deux bugs exploitent un bug de condition de concurrence dans les opérations du système de fichiers du service. Cependant, ces deux bugs ne sont pas si faciles à exploiter en raison de petites fenêtres de concurrence et d'emplacements de dépôt de fichiers incertains. Nous partageons ici nos techniques pour les exploiter.
La cause racine des deux bugs de concurrence est donnée dans nos rapports, la cause réelle peut être exprimée comme Prédictible est Vulnérable. Lorsque le service WER traite des fichiers temporaires, il manipule l'emplacement de fichier C:\ProgramData\Microsoft\Windows\WER\Temp, qui est un répertoire en lecture/écriture pour les utilisateurs authentifiés. Cela signifie qu'un utilisateur normal de niveau moyen (medium-IL) peut écraser un fichier créé par le service WER, et même le transformer en lien du système de fichiers pour endommager/supprimer d'autres fichiers qu'il n'aurait pas pu toucher.
Pour sécuriser les opérations sur les fichiers, le service WER s'appuie sur une API standard nommée GetTempFileNameW et l'enveloppe avec wersvc.dll->UtilGetTempFile, cette API aide WerSvc à générer un nom de fichier aléatoire inoccupé sous la forme "WER****.tmp",
la partie aléatoire du nom de fichier est générée avec un nombre hexadécimal de 4 octets, de 0000 à FFFF, si un nombre a déjà été utilisé pour créer un fichier, l'API prendra un autre nom de fichier aléatoire.
La stratégie présente clairement une faille si l'on crée 65535 fichiers nommés de WER0000.tmp à
WERFFFE.tmp, l'API choisira un nombre aléatoire et testera si le nom de fichier existe, par exemple WERA560.tmp, elle constatera que le fichier existe déjà, donc elle continuera à tester de WERA560.tmp jusqu'à WERFFFF.tmp, pendant que le test se poursuit, une fenêtre de préparation apparaît car nous avons trouvé un moyen de faire bloquer WerSvc sur l'appel GetTempFileNameW pendant 4 à 5 secondes, ce qui constitue un écart de timing assez important. Pendant ce temps, nous forçons le service à déposer un fichier temporaire avec un nom de fichier fixe, à savoir
WERFFFF.tmp.
Après que le service a créé le fichier temporaire nommé WERFFFF.tmp, l'API ferme automatiquement
le handle qu'elle détient sur le fichier, et renvoie le nom du fichier au service pour des opérations ultérieures sur le fichier, c'est exactement à ce moment que le bug est introduit. Trois conditions sont réunies :
Le fichier créé par le service se trouve dans une position contrôlable par un utilisateur normal.
Le service ferme tous les handles sur le fichier
Le service utilisera le fichier plus tard (écriture ou suppression)
Ici, le service va écrire du contenu dans le fichier et le supprimer. L'écriture et la suppression peuvent toutes deux entraîner une élévation de privilèges en exploitant les liens du système de fichiers et certaines techniques d'exploitation.
Afin de transformer le bug en suppression arbitraire de fichiers, nous exploitons de manière créative plusieurs jonctions de répertoires pour finaliser l'exploitation. Notre exploit comprend les étapes suivantes :
WER***.tmp dans $pwd\1\, et créons une jonction $pwd\2\ -> $pwd\1\;$pwd\2\. et nous créons un autre processus pour exécuter en continu la commande SetOplock $pwd\1\WERFFFF.tmp;$pwd\2\ -> \RPC CONTROL\, puis nous créons un lien symbolique d'objet \RPC CONTROL\WERFFFF.tmp -> $target et \RPC CONTROL\WERFFFF.tmp.etl -> $targetL'exploitation détaillée et le POC sont fournis dans WERReport-CVE-2020-0753.
En exploitant la faille dans GetTempFileNameW, nous obtenons un emplacement prévisible où le service opérera ; en utilisant des jonctions de système de fichiers à plusieurs niveaux, nous rendons la condition de concurrence exploitable de manière fiable.
En attendant, nous avons remarqué que ce type de bug de concurrence peut également entraîner un possible problème d'écrasement de fichier, ce qui pourrait conduire à des bugs d'élévation de privilèges dans certaines circonstances.
Pour expliquer pourquoi une corruption arbitraire de fichier (si vous pouvez contrôler une très petite partie du contenu du fichier : moins de 63 octets) peut être transformée en EoP, nous devons prêter attention au mécanisme de fonctionnement de Windows Defender.
Windows Defender dispose d'une base de données de signatures de malwares. Si un fichier contient une signature de malware, Defender considère qu'il s'agit d'un malware et le supprime. Cependant, cette fonctionnalité entraîne une surface d'attaque supplémentaire. Par exemple, lors du WCTF2019, @icchy de tokyowesterns a conçu un défi Windows CTF nommé "Gyotaku The Flag", qui utilise cette fonctionnalité comme oracle pour fuiter des informations.
Ici, nous exploitons cette fonctionnalité de Windows Defender pour supprimer un fichier arbitraire si nous avons une corruption arbitraire de fichier avec un contrôle partiel du contenu. Nous pouvons simplement écrire une signature de malware dans un fichier et déclencher une analyse par défaut de Windows Defender, le fichier sera mis en quarantaine par Defender, qui peut être supprimé par un utilisateur normal (c'est-à-dire un utilisateur non administrateur de niveau moyen) simplement en déclenchant l'analyse deux fois.
Ainsi, un bug de corruption arbitraire de fichier peut être transformé en suppression arbitraire de fichier tant qu'une chaîne de signature de malware peut être placée dans le fichier cible en utilisant le bug.
Corrompre le fichier cible avec un bug, y placer une chaîne caractéristique reconnaissable par Windows Defender.
Déclencher une analyse de Windows Defender sur le fichier cible, ce qui entraîne la mise en quarantaine du fichier.
Déclencher à nouveau l'analyse, le fichier cible est supprimé.
En exploitant cette technique, nous obtenons une suppression arbitraire de fichier avec l'aide de Defender.
La suppression arbitraire de fichier peut être exploitée bien plus facilement pour obtenir des privilèges supplémentaires.
Microsoft OneDrive est l'ensemble d'applications fournissant un service de stockage cloud personnel,
cette application a été intégrée à Windows comme option d'installation par défaut depuis Windows 8. Au cours de nos recherches, 6 vulnérabilités dans les tâches planifiées de maintenance de OneDrive ont été trouvées et soumises à MSRC.
Voici un tableau des vulnérabilités que nous allons exposer dans les tâches planifiées pertinentes de Microsoft OneDrive :