von Nilaa Maharjan, Logpoint Global Services & Security Research

Was ist SpoolFool (CVE-2022-21999)?

SpoolFool, auch bekannt als CVE-2022-21999, ist eine lokale Privilege-Escalation-Schwachstelle im Print-Spooler-Dienst von Microsoft Windows, der Druckvorgänge steuert. Auf allen Windows-Plattformen wird die ausführbare Datei für den Print-Spooler (spoolsv.exe) standardmäßig bei einem Systemstart geladen.

Ein Benutzer kann einen Druckeranschluss einrichten, der auf eine Datei auf einer Festplatte verweist, indem er den Print-Spooler-Dienst nutzt. Um Ordner im Printer-Spool-Treiberverzeichnis anzulegen und daraus beliebige DLL-Dateien zu laden, ändert die SpoolFool-Schwachstelle den Pfad eines Druckeranschlusses. So lassen sich Sicherheitsüberprüfungen umgehen, die bei früheren Privilege-Escalation-Schwachstellen im Zusammenhang mit Print-Spooling eingesetzt wurden. Ein Angreifer kann eine Sicherheitsüberprüfung umgehen, indem er einen UNC-Pfad (UNC: Universal Naming Convention) definiert, wie beispielsweise \\localhost\C$\spooldir\printers\ (wobei c:\spooldir ein symbolischer Link zu C:\Windows\System32\spool\drivers\x64\ ist). Dies ermöglicht es, dass beliebige Dateien in das Verzeichnis mit privilegierten Rechten geschrieben, vom Print-Spool-Dienst als DLLs geladen und mit administrativen Rechten ausgeführt werden.

So erhält der Angreifer ein Handle mit dem Recht PRINTER ACCESS ADMINISTER. Dies kann dazu genutzt werden, um weitere Operationen wie DLL-Injections auszuführen und beispielsweise lokale Admin-Nutzer zu erstellen. Detaillierte Informationen hierzu finden Sie in unserem ergänzenden Report.

Wie gefährlich ist SpoolFool?

CVE CVSSv3 Score
CVE-2022-21999 7.8

Schweregrad: kritisch

  • lokale Privilege-Escalation
  • führt zu einem gewöhnlichen „SYSTEM“-Zugriff auf anfällige Systeme
  • kann vermutlich mit anderen Schwachstellen, Malware und Rootkits kombiniert werden

Aktuelle Situation: die Schwachstelle wird bereits ausgenutzt, Proof-of-Concept-Code ist frei verfügbar

 

Betroffene Systeme:

  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 für x64-basierte Systeme, Service Pack 1
  • Windows Server 2008 für x64-basierte Systeme, Service Pack 2
  • Windows RT 8.1
  • Windows 8.1 für x64-basierte Systeme
  • Windows 7 für x64-basierte Systeme, Service Pack 1
  • Windows Server 2016
  • Windows 10 Version 1607 für x64-basierte Systeme
  • Windows 10 für x64-basierte Systeme
  • Windows 10 Version 21H2 für x64-basierte Systeme
  • Windows 11 für x64-basierte Systeme
  • Windows 10 Version 20H2 für x64-basierte Systeme
  • Windows Server 2022 Azure Edition Core Hotpatch
  • Windows Server 2022
  • Windows 10 Version 21H1 für x64-basierte Systeme
  • Windows 10 Version 1909 für x64-basierte Systeme
  • Windows Server 2019
  • Windows 10 Version 1809 für x64-basierte Systeme

 

Die Schwachstelle verstehen:

Einführung zu den Spooler-Komponenten

Der Windows Print Spooler ist eine integrierte Komponente auf allen Windows-Workstations und -Servern und ist auch die wichtigste Komponente der Druckschnittstelle. Der Print Spooler ist eine ausführbare Datei, die den Druckvorgang steuert. Zur Abwicklung des Druckvorgangs gehört es, den richtigen Druckertreiber zu finden, diesen Treiber zu laden, die High-Level-Funktionsaufrufe in einen Druckauftrag zwischenzuspeichern, den Druckauftrag für die Ausführung einzuplanen und so weiter. Der Spooler wird mit dem Systemstart geladen und läuft weiter, bis das Betriebssystem heruntergefahren wird. Die Hauptkomponenten des Print Spooler sind in der folgenden Abbildung dargestellt.

 

Spooler Components

 

Einführung zu den Spooler-Komponenten – Windows-Treiber

 

Anwendung

Die Druckanwendung erstellt einen Druckauftrag durch den Aufruf von GDI-Funktionen (GDI: Graphics Device Interface) oder direkt in winspool.drv.

GDI

Das Graphics Device Interface (GDI) umfasst Komponenten zur Grafikunterstützung – sowohl für den Benutzer-Modus als auch für den Kernel-Modus.

winspool.drv

winspool.drv ist die Client-Schnittstelle zum Spooler. Sie exportiert die Funktionen, aus denen die Win32-API des Spoolers besteht, und bietet RPC-Stubs für den Zugriff auf den Server.

spoolsv.exe

spoolsv.exe ist der API-Server des Spoolers. Er ist als Dienst implementiert, der mit dem Hochfahren des Betriebssystems gestartet wird. Dieses Modul exportiert eine RPC-Schnittstelle zur Server-Seite der Win32-API des Spoolers. Zu den Clients von spoolsv.exe gehören winspool.drv (lokal) und win32spl.dll (remote). Das Modul verfügt über einige API-Funktionen, aber die meisten Funktionsaufrufe werden über den Router (spoolss.dll) an einen Print-Provider weitergegeben.

Router

Der Router, spoolss.dll, bestimmt den aufzurufenden Print-Provider anhand eines Druckernamens oder eines Handles, die bei jedem Funktionsaufruf angegeben werden, und leitet den Funktionsaufruf an den richtigen Print-Provider weiter.

Print Provider

Der Print-Provider unterstützt den angegebenen Drucker.

 

Der lokale Print-Provider

Der lokale Print-Provider bietet Funktionen zur Auftragssteuerung und Druckerverwaltung für alle Drucker, auf die über den Port-Monitor des lokalen Print-Providers zugegriffen wird.

Das folgende Diagramm gibt einen Überblick über den Kontrollfluss zwischen den Komponenten des lokalen Print-Providers, wenn eine Anwendung einen Druckauftrag erstellt.

Local Print Provider

Einführung zur Print-Providern – Windows-Treiber

 

Dieser Kontrollfluss ist ziemlich umfangreich, der Blog-Beitrag und der ausführliche Bericht konzentrieren sich auf den lokalen Print-Provider localspl.dll.

Symbolische Links

Ein symbolischer Link, auch Softlink genannt, ist ein Dateityp, der auf eine andere Datei verweist, ähnlich wie eine Windows-Verknüpfung oder ein Macintosh-Alias. Im Gegensatz zu einem Hardlink enthält ein symbolischer Link nicht die Daten der Zieldatei. Er verweist lediglich auf einen anderen Speicherort im Dateisystem. Aufgrund dieser Unterscheidung bieten symbolische Links einige Vorteile gegenüber direkten Verbindungen, wie beispielsweise die Möglichkeit, eine Verbindung zu Remote-Computern über NFS-angebundene Verzeichnisse oder Dateien herzustellen. Die Inhalte einer Zieldatei bleiben mit Hardlinks (anders als bei symbolischen Links) erhalten, falls eine Zieldatei entfernt wird.

Created a Hard Link to a file

Abbildung 1: Erstellung eines Hardlinks zu einer Datei

Created a Symbolic Link

Abbildung 1: Erstellung eines symbolischen Links

 

CVE-2020-1048 und CVE-2020-1337 wurden im Mai beziehungsweise August 2020 behoben. Im September 2020 hat Microsoft ein weiteres Problem im Print Spooler adressiert. Zusammenfassend lässt sich sagen, dass Benutzer mit der Angabe der Eigenschaft „SpoolDirectory“ auf einem Drucker beliebige und lesbare Verzeichnisse erstellen konnten. Was war der Zweck des Patches? Bevor das SpoolDirectory-Attribut auf einem Drucker eingerichtet wird, prüft der Print Spooler nun, ob der Benutzer die Berechtigung hat, das Verzeichnis zu erstellen.

 

Globale Analyse der Exposition

Mehr als 17.000 Instanzen sind potenziell anfällig für diese Sicherheitslücke, wobei Südkorea und die Vereinigten Staaten die beiden Spitzenreiter auf der Liste sind, wie eine schnelle Suche in Shodan nach „pjl“ und Port 9100 ergab. Dabei steht „pjl“ für „Printer Job Language“.

Hinweis: Port 9100 ist der Port, den viele Drucker standardmäßig nutzen. Zudem sind viele der auf Shodan gefundenen Rechner höchstwahrscheinlich Honeypots. Auch es sich um eine Schätzung handelt – viele dieser Systeme sind Systeme in Behörden oder im Gesundheitswesen, die nicht gepatcht sind.

Shodan

Eine Heatmap (Visualisierung der Daten) aus dem Shodan-Report

 

Führen Sie Patches durch!

Um Probleme mit dem Print-Spooler-Dienst zu vermeiden, hat Microsoft Updates bereitgestellt. Aktualisieren Sie Ihre Systeme daher so bald als möglich. Spielen Sie jetzt die Patches ein!

Das ist alles, was zu tun ist. Microsoft hat einen offiziellen Fix veröffentlicht. Laut diesem Artikel von Jonas L. des Secret Clubs wird der Windows Error Reporting Service (WER) missbraucht, um ein beliebiges Primitive zur Verzeichnis-Erstellung anzugreifen. Diese Methode scheint jedoch auf einem Windows 10-PC nicht zuverlässig zu funktionieren. Das SplLoadLibraryTheCopyFile-Modul hingegen ist recht vertrauenswürdig, setzt jedoch voraus, dass der Anwender einen Drucker nutzen kann, was bei dieser Schwachstelle der Fall ist.

Da sich der Print-Spooler schon seit geraumer Zeit im Auge des Sturms befindet, scheint es unwahrscheinlich, dass sich die Lage bald entspannen wird – zumindest deutet Oliver Lyans ominöses „to be continued…“ am Ende seines Artikels darauf hin.

 

Kurzfassung

Mit der Angabe des Attributs „SpoolDirectory“ für einen Drucker kann ein Nutzer eine beliebige Anzahl von beschreibbaren Verzeichnissen erstellen. Ein Angreifer kann einen Remote-Drucker einrichten und EVERYONE die Möglichkeit geben, ihn zu verwalten, da ein nicht-privilegierter Nutzer Remote-Drucker hinzufügen darf. So erhält der Angreifer ein Handle mit dem Recht PRINTER ACCESS ADMINISTER, mit dem er andere Operationen wie DLL-Injections ausführen kann.

 

In unserem weiterführenden Bericht erörtern wir die technischen Details der entsprechenden CVEs (CVE-2022-21999, CVE-2020-1030, CVE-2020-1337, CVE-2020-1048) sowie die Methoden, mit denen ein Angreifer als NT AUTHORITY\SYSTEM erweiterte Rechte erlangen und nutzen kann.

A Spool’s Gold

Ausführliche Informationen finden Sie hier:

Laden Sie den Bericht herunter

Ausführliche Informationen finden Sie hier:

Laden Sie den Bericht herunter