
Write-up et POC pour CVE-2020-0753, CVE-2020-0754 et six vulnérabilités DOS Windows non corrigées.
Le service Windows Error Reporting a corrigé 2 bugs d'élévation de privilèges lors du dernier Patch Tuesday ; les deux bugs sont associés à CVE-2020-0753 et CVE-2020-0754. Ces deux bugs exploitent un bug de race condition dans les opérations FileSystem du service. Cependant, ces deux bugs ne sont pas si faciles à exploiter en raison des petites fenêtres de course et des emplacements de dépôt de fichiers incertains. Nous partageons ici nos techniques pour les exploiter.
La cause racine des deux bugs de course 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 accessible en lecture/écriture pour les utilisateurs authentifiés. Cela signifie qu'un utilisateur normal de niveau IL moyen (medium-IL) peut écraser un fichier créé par le service WER, et même le transformer en lien FileSystem pour endommager/supprimer d'autres fichiers qu'il n'aurait pas pu toucher.
Pour garantir la sécurité des 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 choisit 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 le nom de fichier pour voir s'il existe, par exemple WERA560.tmp ; elle constatera que le fichier existe déjà, et continuera donc à 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 rester WerSvc bloqué sur l'appel GetTempFileNameW pendant 4 à 5 secondes, ce qui constitue une assez grande fenêtre de temps. Entre-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, puis retourne le nom du fichier au service pour des opérations ultérieures sur ce fichier ; c'est exactement là que le bug est introduit. Trois conditions sont réunies :
Le fichier créé par le service se trouve à un emplacement 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 puis le supprimer. L'écriture comme la suppression provoqueront une élévation de privilèges en exploitant des liens FileSystem et certaines techniques d'exploitation.
Afin de transformer le bug en suppression arbitraire de fichiers, nous exploitons astucieusement de multiples jonctions de répertoires pour mener à bien l'exploitation. Notre exploit comprend les étapes suivantes :
WER***.tmp dans $pwd\1\, et jonction $pwd\2\ -> $pwd\1\ ;$pwd\2\, et créons l'autre processus pour exécuter en continu la commande SetOplock $pwd\1\WERFFFF.tmp ;$pwd\2\ -> \RPC CONTROL\, puis créons un objet symbolique \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 de GetTempFileNameW, nous obtenons un emplacement prédictible sur lequel le service opérera ; en utilisant une jonction FileSystem à plusieurs niveaux, nous rendons la race condition exploitable de manière fiable.
Entre-temps, nous avons remarqué que ce type de bug de course peut également provoquer un possible problème d'écrasement de fichier, ce qui peut alors 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 le considère comme un malware et le supprime. Cependant, cette fonctionnalité élargit la surface d'attaque. Par exemple, lors du WCTF2019, @icchy de tokyowesterns a conçu un challenge Windows CTF nommé "Gyotaku The Flag", qui utilise cette fonctionnalité comme un oracle pour fuiter des informations.
Ici, nous exploitons cette fonctionnalité de Windows Defender pour supprimer arbitrairement un fichier si nous disposons d'une corruption arbitraire de fichier avec contrôle partiel du contenu. Il suffit d'écrire une signature de malware dans un fichier et de déclencher une analyse par défaut de Windows Defender ; le fichier sera placé dans la zone d'isolement de Defender, qui peut être supprimée par un utilisateur normal (c'est-à-dire un utilisateur non administrateur de niveau IL moyen) en déclenchant simplement l'analyse à deux reprises.
Ainsi, un bug de corruption arbitraire de fichier peut être transformé en suppression arbitraire de fichier dès lors qu'une chaîne de signature de malware peut être insérée dans le fichier cible en utilisant le bug.
Corrompez le fichier cible avec un bug, placez-y une chaîne caractéristique reconnaissable par Windows Defender.
Déclenchez l'analyse du fichier cible par Windows Defender, provoquant l'isolement du fichier.
Déclenchez à 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 fichiers peut être exploitée beaucoup plus facilement pour obtenir des privilèges supplémentaires.
Microsoft OneDrive est l'ensemble d'applications fournissant le service de stockage personnel dans le cloud (Personal Cloud Storage). Cette application est 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 service d'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 :