Av Nilaa Maharjan, Logpoint Global Services & Security Research

Vad är SpoolFool (CVE-2022-21999)?

SpoolFool (CVE-2022-21999) är en lokal privilegieeskaleringssårbarhet i Microsoft Windows Print Spooler-tjänsten som kontrollerar utskriftsoperationer. På alla Windows-plattformar exekveras Print Spooler-tjänsten (spoolsv.exe) som standard vid systemstart.

En användare kan skapa en skrivarport som pekar på en fil på disk med hjälp av Print Spooler-tjänstens funktioner. För att kunna skapa mappar i Print Spoolers drivrutinskatalog och läsa in godtyckliga DLL-filer från den, modifierar SpoolFool-sårbarheten sökvägen till en skrivarport. Detta kringgår säkerhetskontroller som upptäckts i tidigare privilegieeskaleringssårbarheter i Print Spooler. En säkerhetskontroll kan kringgås av en angripare genom att definiera en UNC-sökväg (Universal Naming Convention), till exempel \\localhost\C\spooldir\printers\ (där c:\spooldir är en symbolisk länk till C:\Windows\System32\spool\drivers\x64\). Det gör att godtyckliga filer kan skrivas till den privilegierade katalogen och sedan läsas in som DLL-filer av Print Spool -tjänsten och exekveras med administratörsbehörighet.

Detta ger angriparen ett handtag med behörigheten PRINTER ACCESS ADMINISTER som kan användas för att utföra andra åtgärder såsom DLL-injektion, vilket leder till men inte är begränsat till att skapa lokala administratörsanvändare, vilket beskrivs i den omfattande bifogade rapporten.

 

Hur illa är det?

CVE CVSSv3 Score
CVE-2022-21999 7.8

Allvarlighetsgrad: Kritisk

  • Lokal privilegieeskalering
  • Resulterar i trivial ”SYSTEM”-åtkomst på sårbara system
  • Kopplas sannolikt till andra sårbarheter, skadlig kod och rootkits

Nuvarande situation: Utnyttjas i det fria, koncepttestkod offentligt tillgänglig.

 

Berörda system:

  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows Server 2008 R2 för x64-baserade system Service Pack 1
  • Windows Server 2008 för x64-baserade system Service Pack 2
  • Windows RT 8.1
  • Windows 8.1 för x64-baserade system
  • Windows 7 för x64-baserade system Service Pack 1
  • Windows Server 2016
  • Windows 10 version 1607 för x64-baserade system
  • Windows 10 för x64-baserade system
  • Windows 10 version 21H2 för x64-baserade system
  • Windows 11 för x64-baserade system
  • Windows 10 version 20H2 för x64-baserade system
  • Windows Server 2022 Azure Edition Core hotpatch
  • Windows Server 2022
  • Windows 10 version 21H1 för x64-baserade system
  • Windows 10 version 1909 för x64-baserade system
  • Windows Server 2019
  • Windows 10 version 1809 för x64-baserade system

 

Förstå sårbarheten:

Introduktion till Spooler-komponenter

Windows Print Spooler är en inbyggd komponent i alla Windows arbetsstationer och servrar och är den primära komponenten i utskriftsgränssnittet. Print Spooler är en exekverbar fil som hanterar utskriftsprocessen. Hantering av utskrifter innefattar hämtning av korrekt skrivardrivrutin, inläsning av drivrutinen, överföring av avancerade funktioner till ett utskriftsjobb, schemaläggning av utskriftsjobbet för utskrift osv. Print Spooler laddas vid systemstart och fortsätter att köras tills operativsystemet stängs av. Print Spoolers huvudkomponenter illustreras i det följande diagrammet.

Spooler Components

 

Introduktion till Spooler-komponenter – Windows-drivrutiner

Tillämpning

Utskriftsprogrammet skapar ett utskriftsjobb genom att anropa Graphics Device Interface-funktioner (GDI) eller direkt till winspool.drv.

GDI

GDI (Graphics Device Interface) innehåller både user-mode- och kernel-mode-komponenter för grafikstöd.

winspool.drv

winspool.drv är klientgränssnittet till Print Spooler-tjänsten. Den exporterar funktionerna som ingår i Print Spoolers Win32 API och tillhandahåller RPC-stubbar för åtkomst till servern.

spoolsv.exe

spoolsv.exe är Print Spoolers API-server. Den implementeras som en tjänst som startas när operativsystemet startas. Denna modul exporterar ett RPC-gränssnitt till serversidan av Print Spoolers Win32 API. Klienter till spoolsv.exe inkluderar winspool.drv (lokalt) och win32spl.dll (fjärr). Modulen implementerar vissa API-funktioner, men de flesta funktionsanrop skickas till en utskriftstjänst via routern (spoolss.dll).

Router

Routern – spoolss.dll – avgör vilken utskriftstjänst som ska anropas, baserat på ett skrivarnamn eller ett handtag som medföljer varje funktionsanrop och skickar funktionsanropet till motsvarande utskriftstjänst.

Utskriftstjänst

Utskriftstjänsten som stödjer den specificerade skrivaren.

 

Lokal utskriftstjänst

Den lokala utskriftstjänsten erbjuder utskriftskontroll och skrivarhantering för alla skrivare som sköts via den lokala utskriftstjänstens portövervakning.

Nedanstående diagram visar kontrollflödet för den lokala utskriftstjänstens komponenter när ett program skapar en utskrift.

Local Print Provider

Introduktion till utskriftstjänster – Windows-drivrutiner

Även om detta kontrollflöde är relativt omfattande fokuserar bloggen och den efterföljande rapporten på den lokala utskriftstjänsten localspl.dll.

Symbolisk länk

En symbolisk länk är en typ av fil som länkar till en annan fil, ungefär som en Windows-genväg eller ett Macintosh-alias. Till skillnad från en hård länk innehåller en symbolisk länk inte målfilens data.
Den hänvisar bara till en annan plats i filsystemet.
På grund av denna skillnad har symboliska länkar vissa fördelar jämfört med hårda länkar, såsom förmågan att länka till fjärrmaskiner via NFS-anslutna kataloger eller filer. Målfilens innehåll behålls med hjälp av hårda länkar istället för symboliska länkar när målfilen tas bort.

Created a Hard Link to a file

Bild 1: Hård länk till fil skapad

Created a Symbolic Link

Bild 2: Symbolisk länk skapad

CVE-2020-1048 och CVE-2020-1337 åtgärdades i maj respektive augusti 2020. Microsoft åtgärdade ett separat problem i Print Spooler i september 2020. Sammanfattningsvis kunde användarna genom att ange SpoolDirectory-egenskapen på en skrivare skapa godtyckliga och läsbara kataloger. Vad var patchens syfte? Innan attributet SpoolDirectory etableras på en skrivare kontrollerar nu Print Spooler att användaren har behörighet att skapa katalogen.

 

Global exponeringsanalys

Över 17000 instanser är potentiellt sårbara för denna sårbarhet, med Sydkorea och USA är topp 2 på listan, enligt en sökning i Shodan efter ”pjl” och port 9100. Pjl står för Printer Job Language.

Obs! Port 9100 är den port på vilken många skrivare körs som standard. Många maskiner som finns på Shodan är dessutom sannolikt ”honeypots”. Många av systemen i uppskattningen är statliga system eller system för hälso- och sjukvårdsindustrin som inte är patchade.

Shodan

Värmekartor från Shodan-rapporten

 

Patcha!

För att förhindra störningar i utskriftstjänsten har Microsoft tillhandahållit uppdateringar. Uppdatera därför dina system så snart som möjligt. Patcha nu!

Det är allt som behövs. Microsoft har publicerat en officiell lösning. Windows Error Reporting Service (WER) missbrukas för att attackera en godtycklig katalogskapande primitiv, enligt denna artikel av Jonas L från Secret Club. Metoden verkar dock inte fungera tillförlitligt på en Windows 10-dator. SplLoadLibraryTheCopyFileModule är däremot tämligen tillförlitlig, men det förutsätter att användaren kan använda en skrivare, vilket är en förutsättning för att denna sårbarhet ska kunna utnyttjas.

Eftersom Print Spooler har fokus för angrepp under längre tid, verkar det osannolikt att angreppen kommer att upphöra – det är åtminstone vad Oliver Lyans olycksbådande avslut ”to be continued…” i slutet av sin artikel verkar antyda.

 

TL;DR

Genom att ange attributet SpoolDirectory på en skrivare kan en användare skapa valfritt antal skrivbara kataloger. En angripare kan skapa en fjärrskrivare och ge ALLA möjlighet att administrera den eftersom en icke-privilegierad användare tillåts lägga till fjärrskrivare. Detta ger angriparen ett handtag med behörigheterna PRINTER ACCESS ADMINISTER som kan användas för att utföra andra åtgärder såsom DLL-injektion.

I den bifogade rapporten diskuteras det tekniska detaljerna för associerade CVE:er (CVE-2022-21999CVE-2020-1030CVE-2020-1337CVE-2020-1048) och de metoder som en angripare kan använda för att få utökade behörigheter som NT AUTHORITY\SYSTEM.

A Spool’s Gold

För mer detaljerad information:

Ladda ner rapporten

För mer detaljerad information:

Ladda ner rapporten