CVE-2022-30216 : coercition à l'authentification sur le service « Server » de Windows
par Ben Barnea
Synthèse
Ben Barnea, chercheur chez Akamai, a découvert une vulnérabilité importante dans le service Windows Server qui a été classée CVE-2022-30216 avec un score de base de 8,8.
Cette vulnérabilité profite d'une erreur off-by-one se trouvant dans une procédure de rappel de sécurité mise en œuvre par le service Server.
Il s'avère que cette vulnérabilité existe dans les machines Windows 11 et Windows Server 2022 non protégées par des correctifs.
Lorsqu'elle est associée à une attaque par relais NTLM (New Technology LAN Manager) sur les services de certificats Active Directory (AD CS), cette vulnérabilité permet à tout pirate disposant des informations d'identification du domaine d'exécuter du code à distance sur le contrôleur de domaine.
Nous pensons également qu'un pirate pourrait utiliser cette technique pour modifier le mappage de certificat d'un serveur et donc, effectuer une usurpation de serveur.
Cette vulnérabilité a été révélée de manière responsable à Microsoft et corrigée dans le Patch Tuesday de juillet.
Nous fournissons une démonstration de la vulnérabilité dans notre référentiel GitHub.
Introduction
Au cours des derniers mois, notre équipe a mené une recherche approfondie sur les appels de procédure à distance de Microsoft (MS-RPC). En d'autres termes, l'utilisation d'un RPC permet d'optimiser les communications entre les processus. Ce protocole repose sur un modèle client-serveur standard et fait partie des protocoles les plus utilisés dans Windows aujourd'hui.
Parmi les aspects les plus intéressants de la conception MS-RPC, nous avons noté le rappel de sécurité, qui permet de restreindre l'accès aux serveurs RPC, fournissant essentiellement une sécurité contre les utilisateurs indésirables, souvent distants. De nombreux serveurs RPC mettent en œuvre un rappel de sécurité, chaque serveur ayant sa propre logique et ses propres facteurs déterminants.
Les services Windows utilisent largement le RPC pour mettre leur fonctionnalité à la disposition des clients. Cela nous a conduits à étudier différents services et la logique sous-jacente de leurs mises en œuvre de rappel de sécurité. Dans un de ces services, le service Server, nous avons pu trouver une faille de sécurité qui pourrait permettre aux pirates d'effectuer une usurpation de serveur ou de déclencher une coercition à l'authentification sur la victime.
Dans ce blog, nous allons décrire les aspects du RPC que nous avons étudiés qui contribuent collectivement à ce nouveau bug : quel est le bug, comment il peut être utilisé, et comment l'atténuer.
Qu'est-ce que le service Windows Server ?
Le service Server (également appelé LanmanServer) est un service Windows qui s'occupe de la gestion des partages SMB. Les partages sont des ressources (fichiers, imprimantes et arborescences de répertoires) accessibles sur le réseau par le biais d'un serveur Common Internet File System. Sur le fond, les partages réseau permettent d'utiliser d'autres terminaux présents sur le réseau pour effectuer diverses tâches quotidiennes.
Le service Server permet à un ordinateur distant de créer, de configurer, d'interroger et de supprimer des partages via RPC sur un canal nommé (\\pipe\srvsvc). Pour le reste de cet article, nous utiliserons le terme srvsvc pour faire référence à ce service.
Une vulnérabilité dans srvsvc a un impact important, car le service fournit des fonctionnalités essentielles et s'exécute donc par défaut sur chaque machine Windows.
SMB sur QUIC
À partir de Windows 10 20H2, Microsoft a introduit une nouvelle fonctionnalité : SMB sur QUIC. Cette fonction permet d'accéder aux partages SMB par le biais de QUIC, un nouveau protocole réseau de couche transport. QUIC a été conçu pour fournir une connexion plus fiable et sécurisée tout en surmontant les problèmes Internet courants, tels que la latence et la perte de paquets.
Dans une interaction de réseau QUIC, par mesure de sécurité supplémentaire, le client vérifie l'identité du serveur en vérifiant le certificat fourni par le serveur. Avec l'ajout de SMB sur QUIC, le service Server a pris en charge la gestion de ces certificats.
La vulnérabilité que nous avons trouvée réside dans cette fonctionnalité. Pour la comprendre, nous devons d'abord étudier l'une des façons dont les serveurs RPC effectuent le contrôle d'accès.
Rappels de sécurité
De nombreux services Windows, dont srvsvc, mettent en œuvre un serveur RPC pour favoriser la communication entre les processus et fournir un accès à leurs fonctionnalités à différents clients. Sous Windows, le RPC utilise divers mécanismes de sécurité ; nous étudierons principalement l'un d'entre eux, appelé le rappel de sécurité.
Le rappel de sécurité a pour but de restreindre l'accès à une interface RPC. Le rappel est mis en œuvre par le développeur du serveur RPC et permet à chaque développeur d'appliquer sa propre logique pour autoriser l'accès à des utilisateurs spécifiques ou empêcher l'accès à des fonctions spécifiques. Dans RPC, les fonctions exposées par le serveur sont représentées à l'aide d'opnums (numéros d'opération), que nous verrons bientôt dans le rappel de sécurité de srvsvc.
Chronique d'un rappel de sécurité
Pour comprendre le bug, nous devons d'abord examiner une ancienne version du rappel de sécurité de srvsvc, avant l'ajout de la fonction SMB sur QUIC :
Comme indiqué ci-dessus, le rappel de sécurité de srvsvc obéit à la logique suivante :
- Si un client distant tente d'accéder à une fonction comprise entre 64 et 69 (inclus) : refuser l'accès
- Si un client distant, autre qu'un compte cluster, tente d'accéder à une fonction comprise entre 58 et 63 (inclus) : refuser l'accès
Par conséquent, dans l'absolu, les clients distants ne peuvent pas accéder à ces fonctions particulières de l'interface. Cette vérification de plage suggère que les fonctions restreintes sont sensibles et doivent être appelées uniquement par les processus (locaux) attendus.
Avec l'ajout de SMB sur QUIC, Windows 10 20H2 a ajouté quatre nouvelles fonctions au service srvsvc :
- LocalrServerCertificateMappingGet
- LocalrServerCertificateMappingSet
- LocalrServerCertificateMappingEnum
- LocalrServerCertificateMappingRemove
Comme ces fonctions n'étaient pas destinées à être accessibles à distance, elles ont été ajoutées à la gamme des fonctions locales, ces fonctions que le rappel de sécurité de srvsvc interdit aux clients distants.
Comme le montre l'illustration ci-dessous, la plage a été modifiée pour inclure les opnums de ces quatre nouvelles fonctions, augmentant la première plage locale de 64–69 à 64–73 et étendant le contrôle d'accès du rappel de sécurité à ces fonctions. Jusqu'ici, tout va bien.
Dans Windows 11 et Windows Server 2022, Microsoft a ajouté une nouvelle fonction appelée LocalrServerCertificateMappingModify :
Cependant, cette fois, la plage des fonctions restreintes n'a pas changé dans cette version plus récente pour inclure la nouvelle fonction ajoutée :
Ainsi, au moment où cette fonction a été ajoutée, elle n'était pas couverte par le rappel de sécurité et était donc accessible aux clients RPC distants.
Opportunités d'exploitation
En appelant cette fonction, un pirate peut modifier les configurations des mappages de certificats sur le serveur. Un mappage de certificats est un « lien symbolique » entre le certificat QUIC d'un serveur et un certificat dans le magasin de certificats. Nous pensons qu'un pirate pourrait utiliser cette fonction pour ajouter son propre mappage de certificats et donc, effectuer une usurpation de serveur. Sachez que cette fonction n'ajoute ni ne modifie aucun certificat du magasin de certificats Windows, mais modifie le mappage du certificat utilisé par le serveur QUIC sur un certificat du magasin Windows.
Alors que nous tentions d'évaluer l'impact de la vulnérabilité, nous avons remarqué que la structure reçue par la fonction contient l'emplacement de stockage du certificat :
En fournissant un chemin UNC comme variable storeLocation, un pirate peut forcer LocalrServerCertificateMappingModify à déclencher une requête RPC du serveur victime vers une machine qu'il contrôle. Le flux de fonction qui provoque le déclenchement de la demande est le suivant :
LocalrServerCertificateMappingModify → SsValidCertandUpdateCertinfo → CertOpenStore → _CertDllOpenSystemStoreProvW → EnumPhysicalStore → FormatSystemRegPath → RegConnectRegistryExW → BaseBindToMachine → Rpc_OpenPredefHandle → NdrClientCall3
Au cours de l'envoi de la requête RPC par le serveur à notre machine, le serveur effectue une authentification contre le serveur du pirate. Le pirate peut désormais exploiter les informations d'identification de la victime pour exécuter une attaque par relais NTLM.
En exploitant la vulnérabilité et en exécutant le flux de relais NTLM, nous avons réussi à reproduire le scénario d'attaque de PetitPotam consistant à abuser de l'AD CS et à prendre le contrôle du contrôleur de domaine.
Pour déclencher cette vulnérabilité, le pirate doit avoir accès à une machine du domaine. Pour le scénario de relais NTLM, il est nécessaire d'ajouter le rôle AD CS, ainsi que l'un de ses services qui sont sujets au relais NTLM (Inscription Web de l'autorité de certification, Service Web d'inscription de certificat).
Corriger
Microsoft a publié un correctif pour cette vulnérabilité dans le Patch Tuesday de juillet. Le problème a été résolu par :
La correction de la plage de fonctions locales dans le rappel de sécurité, empêchant ainsi l'accès à distance à LocalrServerCertificateMappingModify
L'ajout d'une vérification d'accès à chacune des fonctions locales nouvellement ajoutées
Calendrier de divulgation
26 avril 2022 : rapport envoyé à Microsoft
26 avril 2022 : changement de statut (de Nouveau à Examiné / Reproduit)
9 mai 2022 : changement de statut (de Examiné / Reproduit à Développé)
12 juillet 2022 : publication du correctif
Atténuation et détection
Voici les recommandations pour atténuer le relais NTLM :
Souvent, une attaque par relais NTLM qui utilise l'AD CS implique une demande TGT. Le journal des événements (EventID 4768) inclut l'adresse IP de la machine à l'origine de la demande. Les demandes TGT malveillantes peuvent être détectées si une TGT est demandée pour un contrôleur de domaine depuis une machine qui n'est pas elle-même un contrôleur de domaine.
Une démonstration est disponible dans le référentiel Recherche sur la sécurité d'Akamai.
Synthèse
Lorsqu'une nouvelle fonction est ajoutée, il est important d'être attentif aux conséquences qu'elle peut avoir, non seulement dans sa propre fonctionnalité, mais également dans la manière dont elle est accessible aux utilisateurs. En ce qui nous concerne, l'ajout de SMB sur QUIC dans Windows a permis d'introduire de nouvelles fonctions dans le service Server. Toutefois, la vulnérabilité ne réside pas dans la mise en œuvre de SMB sur QUIC, mais plutôt dans la façon dont une ancienne fonction limitait l'accès à l'interface RPC respective.
L'équipe de recherche sur la sécurité d'Akamai a mené plusieurs recherches sur MS-RPC, en commençant par l'analyse d'une vulnérabilité d'exécution RPC dans le Patch Tuesday du mois d'avril, ainsi qu'un aperçu d'une autre CVE que nous avons découverte en mai. Ben Barnea et Ophir Harpaz ont présenté leurs recherches sur la vulnérabilité du service Server à la DEF CON 30 qui s'est tenue à Las Vegas.