par Nilaa Maharjan Logpoint Global Services & Security Research

Qu’est-ce que SpoolFool (CVE-2022-21999) ?

SpoolFool, également connu sous la désignation CVE-2022-21999, est une faille locale au niveau de l’élévation des privilèges dans le service de spouleur d’impression de Microsoft Windows, qui contrôle les opérations d’impression. Sur toutes les plateformes Windows, le fichier exécutable du spouleur d’impression (spoolsv.exe) est chargé par défaut au démarrage du système.

Un utilisateur peut créer un port d’imprimante qui pointe vers un fichier sur un disque en utilisant la capacité du service de spouleur d’impression. Afin de créer des dossiers dans le répertoire du pilote de spouleur d’impression et de charger des fichiers DLL arbitraires à partir de celui-ci, la vulnérabilité SpoolFool modifie le chemin du port de l’imprimante. Cette action contourne les contrôles de sécurité trouvés dans les vulnérabilités d’élévation de privilèges antérieures au niveau du spouleur d’impression. Un contrôle de sécurité peut être contourné par un attaquant en définissant un chemin UNC (Universal Naming Convention), tel que \localhost\C$\spooldir\printers\ (où c:\spooldir est un lien symbolique vers C:\Windows\System32 \spool\drivers\x64\), qui permet d’écrire des fichiers arbitraires dans le répertoire privilégié, puis de les charger en tant que DLL via le service de spouleur d’impression et enfin de les exécuter avec des privilèges administratifs.

Ainsi, l’attaquant dispose d’un handle avec le droit PRINTER ACCESS ADMINISTER, qui peut être utilisé pour effectuer d’autres opérations comme l’injection de DLL permettant, sans s’y limiter, la création d’utilisateurs administrateurs locaux, ce qui est décrit dans le rapport complet ci-joint.

Quel est le niveau de sévérité ?

CVE CVSSv3 Score
CVE-2022-21999 7.8

Sévérité : Critique

  • Élévation de privilèges locaux.
  • Permet un accès « SYSTÈME » basique au niveau des systèmes vulnérables.
  • Est susceptible d’être combinée avec d’autres vulnérabilités, malwares et rootkits.

Situation actuelle : véritablement exploitée sur le terrain, code POC (preuve de concept) publiquement accessible.

Systèmes concernés :

  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 pour les systèmes x64 Service Pack 1
  • Windows Server 2008 pour les systèmes x64 Service Pack 2
  • Windows RT 8.1
  • Windows 8.1 pour les systèmes x64
  • Windows 7 pour les systèmes x64 Service Pack 1
  • Windows Server 2016
  • Windows 10 version 1607 pour les systèmes x64
  • Windows 10 pour les systèmes x64
  • Windows 10 version 21H2 pour les systèmes x64
  • Windows 11 pour les systèmes x64
  • Windows 10 version 20H2 pour les systèmes x64
  • Windows Server 2022 Azure Edition Core hotpatch
  • Windows Server 2022
  • Windows 10 version 21H1 pour les systèmes x64
  • Windows 10 version 1909 pour les systèmes x64
  • Windows Server 2019
  • Windows 10 version 1809 pour les systèmes x64

Comprendre la vulnérabilité :

Introduction aux composants du spouleur

Le spouleur d’impression Windows est un composant intégré sur tous les postes de travail et serveurs Windows, et c’est le composant principal de l’interface d’impression. Le spouleur d’impression est un fichier exécutable qui gère le processus d’impression. La gestion de l’impression implique la récupération de l’emplacement du pilote de l’imprimante approprié, le chargement de ce pilote, la mise en file d’attente (spooling) des appels de fonction de niveau supérieur dans une tâche d’impression, la planification de ce dernier pour l’impression à proprement parler, etc. Le spouleur est chargé au démarrage du système et continue de fonctionner jusqu’à ce que le système d’exploitation soit arrêté. Les principaux composants du spouleur d’impression sont illustrés dans le schéma ci-dessous.

Spooler Components

Introduction aux composants du spouleur – Pilotes Windows

Application

L’application d’impression crée une tâche d’impression en appelant les fonctions GDI (Graphics Device Interface) ou directement via winspool.drv.

GDI

L’interface de périphérique graphique (GDI : Graphics Device Interface) comprend à la fois des composants en mode utilisateur et en mode noyau pour la prise en charge graphique.

winspool.drv

winspool.drv est l’interface client dans le spouleur. Il exporte les fonctions qui composent l’API Win32 du spouleur et fournit des stubs RPC pour accéder au serveur.

spoolsv.exe

spoolsv.exe est le serveur API du spouleur. Il est implémenté en tant que service lancé au démarrage du système d’exploitation. Ce module exporte une interface RPC vers le côté serveur de l’API Win32 du spouleur. Les clients de spoolsv.exe incluent winspool.drv (localement) et win32spl.dll (remotely). Le module implémente certaines fonctions API, mais la plupart des appels de fonction sont transmis à un fournisseur d’impression via le routeur (spoolss.dll).

Routeur

Le routeur, spoolss.dll, détermine le fournisseur d’impression à appeler, en fonction d’un nom d’imprimante ou d’un handle fourni avec chaque appel de fonction, et transmet l’appel de fonction au fournisseur approprié.

Print Provider

The print provider that supports the specified print device.

Fournisseur d’impression local

Le fournisseur d’impression local fournit des fonctionnalités de contrôle des tâches et de gestion des imprimantes pour toutes celles accessibles via les moniteurs de port du fournisseur d’impression local.

Le schéma suivant fournit une vue du flux de contrôle entre les composants du fournisseur d’impression local lorsqu’une application crée une tâche d’impression.

Local Print Provider

Introduction aux fournisseurs d’impression – Pilotes Windows

Bien que ce flux de contrôle soit plutôt volumineux, cet article et le rapport suivant se concentreront sur le fournisseur d’impression local localspl.dll.

Lien symbolique

Un lien symbolique, communément appelé soft link, est un type de fichier qui renvoie à un autre fichier, un peu comme un raccourci Windows ou un alias Macintosh. Contrairement à un lien physique (hard link), un lien symbolique ne contient pas les données du fichier cible.Il fait simplement référence à un autre emplacement du système de fichiers.
En raison de cette distinction, les liens symboliques bénéficient d’avantages par rapport aux connexions matérielles, tels que la capacité de se connecter à des machines distantes via des répertoires ou des fichiers connectés au NFS. Le contenu d’un fichier cible est conservé à l’aide de liens physiques plutôt que de liens symboliques lorsque le fichier cible est supprimé.

Created a Hard Link to a file

Fig-1 : Création d’un lien physique (hard link) vers un fichier

Created a Symbolic Link

Fig-2 : Création d’un lien symbolique (symbolic link)

CVE-2020–1048 et CVE-2020–1337, respectivement, ont été corrigées en mai et août 2020. Microsoft a résolu un autre problème dans le spouleur d’impression en septembre 2020. En résumé, en spécifiant la propriété SpoolDirectory au niveau d’une imprimante, les utilisateurs ont pu établir des répertoires arbitraires et lisibles. Quel était le but de ce correctif ? Avant d’établir l’attribut SpoolDirectory sur une imprimante, le spouleur d’impression vérifierait maintenant si l’utilisateur a bien l’autorisation de créer le répertoire.

Analyse de l’exposition globale

Plus de 17 000 instances sont potentiellement vulnérables à cette vulnérabilité, la Corée du Sud et les États-Unis étant les deux premiers sur la liste, selon une recherche rapide dans Shodan concernant « pjl » et le port 9100. Pjl signifie Printer Job Language.

Remarque : Le port 9100 est le port sur lequel de nombreuses imprimantes s’exécutent par défaut. De plus, de nombreuses machines trouvées sur Shodan sont très probablement des honeypots. Malgré ce constat, de nombreux systèmes sont des systèmes gouvernementaux ou liés au secteur de la santé qui ne sont pas corrigés.

Shodan

Cartes thermiques (Heat Maps) du rapport Shodan

Installez le correctif !

Pour éviter d’éventuels dommages au niveau de votre service de spouleur d’impression, Microsoft a fourni des mises à jour, donc installez-les sur vos systèmes dès que possible. Patchez dès maintenant !!

C’est tout ce que vous avez à faire. Microsoft a publié un correctif officiel. Le service WER (Windows Error Reporting) est utilisé à manière malveillante pour attaquer une primitive de création de répertoire arbitraire, selon l’article de Jonas L de Secret Club. La méthode, cependant, ne semble pas fonctionner de manière fiable sur un PC sous Windows 10. Le SplLoadLibraryTheCopyFileModule, en revanche, est assez fiable, mais il suppose que l’utilisateur puisse faire fonctionner une imprimante, ce qui est déjà le cas pour cette vulnérabilité.

Étant donné que le spouleur d’impression est au cœur de cette tempête depuis un certain temps maintenant, il semble peu probable qu’il y ait une accalmie prochainement, du moins, c’est ce que semble suggérer l’inquiétant « à suivre… » d’Oliver Lyan à la fin de son récit.

TL;DR

En spécifiant l’attribut SpoolDirectory sur une imprimante, un utilisateur peut créer la quantité de répertoires accessibles en écriture qu’il souhaite. Un attaquant peut créer une imprimante distante et permettre à TOUT LE MONDE de la gérer car un utilisateur non privilégié est autorisé à ajouter des imprimantes distantes. Cette possibilité fournirait à l’attaquant un handle avec le droit PRINTER ACCESS ADMINISTER, qui peut être utilisé pour effectuer d’autres opérations comme l’injection de DLL.

Dans le rapport ci-joint, nous vous présenterons des détails techniques concernant des CVE associées (CVE-2022-21999, CVE-2020-1030, CVE-2020-1337, CVE-2020-1048) et des méthodes par lesquelles un attaquant peut exploiter et obtenir des élévations de privilèges en tant que NT AUTHORITY\SYSTEM.

A Spool’s Gold

Pour plus d’informations :

Pour plus d’informations :