af Nilaa Maharjan, Logpoint Global Services & Security Research

Hvad er SpoolFool (CVE-2022-21999)?

SpoolFool, også kaldet CVE-2022-21999, er en lokal rettighedseskaleringsfejl i Microsoft Windows’ print spooler-tjeneste, som styrer udskrivning. På alle Windows-platforme indlæses den eksekverbare print spooler-fil (spoolsv.exe) som standard ved systemopstart.

En bruger kan konstruere en printerport, der peger på en fil på en disk ved hjælp af print spooler-tjenesten. For at opbygge mapper i printerspoledriverbiblioteket og indlæse vilkårlige DLL-filer herfra ændrer SpoolFool-sårbarheden stien for en printerport. Dette omgår de sikkerhedskontroller, der blev fundet i sårbarheder i forbindelse med tidligere eskalering af print spool-rettigheder. Et sikkerhedstjek kan omgås af en angriber ved at definere en universel navngivningskonvention (UNC)-sti, såsom \\localhost\C$\spooldir\printers\ (hvor c:\spooldir er et symbolsk link til C:\Windows\System32\spool\drivers\x64\), der tillader, at vilkårlige filer skrives til den privilegerede mappe og derefter indlæses som DLL’er af print spool-tjenesten og køres med administrative rettigheder.

Dette giver angriberen et håndtag til PRINTER ACCESS ADMINISTER-rettigheden, som kan bruges til at udføre andre handlinger som f.eks. DLL-injektion, der fører til, men ikke er begrænset til, oprettelse af lokale administratorbrugere, som det er afbildet i den vedhæftede omfattende rapport.

 

Hvor slemt er det?

CVE CVSSv3 Score
CVE-2022-21999 7.8

Alvorlighedsgrad: Kritisk

  • Eskalering af lokale rettigheder
  • Resulterer i bagatelagtig “SYSTEM”-adgang til sårbare systemer
  • Vil sandsynligvis være forbundet med andre sårbarheder, malware og rootkits

Nuværende situation: Udnyttes i naturen, bevis for konceptkode offentligt tilgængelig.

 

Berørte systemer:

  • Windows Server 2012 R2
  • Windows Server 2012
  • Windows ServeR2008 R2 til x64-baserede Systems Service Pack 1
  • Windows Server 2008 til x64-baserede Systems Service Pack 2
  • Windows RT 8.1
  • Windows 8.1 til x64-baserede systemer
  • Windows 7 til x64-baserede systemer Service Pack 1
  • Windows Server 2016
  • Windows 10 Version 1607 til x64-baserede systemer
  • Windows 10 til x64-baserede systemer
  • Windows 10 Version 21H2 til x64-baserede systemer
  • Windows 11 til x64-baserede systemer
  • Windows 10 Version 20H2 til x64-baserede systemer
  • Windows Server 2022 Azure Edition Core-hotpatch
  • Windows Server 2022
  • Windows 10 Version 21H1 til x64-baserede systemer
  • Windows 10 Version 1909 til x64-baserede systemer
  • Windows Server 2019
  • Windows 10 Version 1809 til x64-baserede systemer

 

Forståelse af sårbarheden:

Introduktion til Spooler-komponenter

Windows Print Spooler er en indbygget komponent på alle Windows arbejdsstationer og servere, og det er udskrivningsgrænsefladens primære komponent. Print Spooler er en eksekverbar fil, der styrer udskrivningsprocessen. Styring af udskrivning omfatter hentning af placeringen af den korrekte printerdriver, indlæsning af driveren, spoling af højniveaufunktioner, opkald til et udskriftsjob, planlægning af udskriftsjobbet til udskrivning osv. Spooleren indlæses ved systemopstart og fortsætter med at køre, indtil styresystemet lukkes ned. De primære komponenter i Print Spooler er illustreret i følgende diagram.

Spooler Components

Introduktion til Spooler-komponenter – Windows-drivere

Anvendelsesområde

Udskrivningsprogrammet opretter et udskriftsjob ved at kalde GDI-funktioner (Graphics Device Interface) eller direkte i winspool.drv.

GDI

GDI (Graphics Device Interface) omfatter både brugertilstands- og kernel-tilstandskomponenter til understøttelse af grafik.

winspool.drv

winspool.drv er klientgrænsefladen ind i Spooleren. Den eksporterer de funktioner, der udgør Spoolerens Win32 API, og giver RPC-stubbe til at få adgang til serveren.

spoolsv.exe

spoolsv.exe er Spoolerens API server. Den implementeres som en service, der startes, når operativsystemet startes. Dette modul eksporterer en RPC-grænseflade til serversiden af Spoolerens Win32 API. Klienter til spoolsv.exe inkluderer winspool.drv (lokalt) og win32spl.dll (eksternt). Modulet implementerer nogle API-funktioner, men de fleste funktionskald sendes til en udskriftsudbyder ved hjælp af routeren (spoolss.dll).

Router

Routeren, spoolss.dll, bestemmer, hvilken udskriftsudbyder der skal kaldes, baseret på et printernavn eller håndtag, der leveres med hvert funktionskald, og sender funktionskaldet til den korrekte udbyder.

Udskriftsudbyder

Den udskriftsudbyder, der understøtter den angivne printerenhed.

 

Lokal udskriftsudbyder

Den lokale udskriftsudbyder leverer jobkontrol og printerstyring til alle printere, der tilgås via den lokale udskriftsudbyders portovervågning.

Følgende diagram giver et overblik over kontrolflowet blandt den lokale udskriftsudbyders komponenter, når et program opretter et udskriftsjob.

Local Print Provider

Introduktion til udskriftsudbydere – Windows-drivere

Selvom dette kontrolflow er ret stort, vil bloggen og den efterfølgende rapport fokusere på den lokale udskriftsudbyder localspl.dll.

Symbolisk link

Et symbolsk link, der ofte kaldes et blødt link, er en filtype, der linker til en anden fil, ligesom en Windows-genvej eller et Macintosh-alias. I modsætning til et hårdt link indeholder et symbolsk link ikke målfilens data.
Det henviser kun til en anden filsystemplacering.
På grund af denne skelnen er symbolske links tildelt fordele i forhold til hårde links, såsom muligheden for at linke til eksterne maskiner via NFS-forbundne mapper eller filer. Indholdet af en målfil bevares ved hjælp af hårde links i stedet for symbolske links, når målfilen fjernes.

Created a Hard Link to a file

Fig. 1: Oprettet et hårdt link til en fil

Created a Symbolic Link

Fig. 2: Oprettet et symbolsk link

CVE-2020-1048 og CVE-2020-1337 blev rettet i henholdsvis maj og august 2020. Microsoft håndterede et separat problem i Print Spooler i september 2020. Kort sagt, ved at specificere egenskaben SpoolDirectory på en printer, var brugerne i stand til at oprette vilkårlige og læsbare mapper. Hvad var formålet med programrettelsen? Før oprettelse af attributten SpoolDirectory på en printer, ville Print Spooler bekræfte, om brugeren havde tilladelse til at oprette mappen.

 

Analyse af global eksponering

Over 17.000 forekomster er potentielt sårbare over for denne sårbarhed, med Sydkorea og USA som de to største på listen, ifølge en hurtig søgning i Shodan efter “pjl” og port 9100. Pjl står for Printer Job Language (printerjobsprog).

Bemærk: Port 9100 er den port, hvor mange printere kører som standard. Mange af de maskiner, der findes på Shodan, er sandsynligvis også honningkrukker. Selv med skønnet er mange af systemerne offentlige eller sundhedssektorsystemer, der ikke er rettede.

Shodan

Varmekort fra Shodan-rapport

 

Sy programrettelsen på!

For at forhindre ødelæggelse af din print spooler-tjeneste har Microsoft leveret opdateringer. Opdater derfor dine systemer så hurtigt som muligt. Reparér nu!

Det er såmænd det hele. Microsoft har udsendt en officiel rettelse. Windows Error Reporting Service (WER) misbruges til at angribe en vilkårlig biblioteksoprettelse primitivt, ifølge denne artikel af Jonas L fra Secret Club. Metoden virkede dog ikke pålideligt på en Windows 10 pc. SplLoadLibraryTheCopyFileModule er derimod ganske troværdig, men det forudsætter dog, at brugeren kan betjene en printer, hvilket allerede er tilfældet for denne sårbarhed.

Eftersom print spooleren har været i stormens øje et stykke tid, virker det usandsynligt, at der snart vil komme nogen lindring – i hvert fald er det hvad Oliver Lyans ildevarslende “fortsættes …” i slutningen af hans historie, synes at antyde.

 

TL;DR

Ved at angive attributten SpoolDirectory på en printer kan en bruger oprette et vilkårligt antal skrivbare mapper. En angriber kan bygge en ekstern printer og give ALLE mulighed for at administrere den, fordi en ikke-privilegeret bruger har tilladelse til at tilføje eksterne printere. Dette ville give angriberen et håndtag med PRINTER ACCESS ADMINISTER-rettigheden, som kan bruges til at udføre andre handlinger som f.eks. DLL-injektion.

I den vedhæftede rapport drøfter vi de tekniske detaljer vedrørende de tilhørende CVE’er (CVE-2022-21999, CVE-2020-1030, CVE-2020-1337, CVE-2020-1048) og metoder, hvorigennem en angriber kan udnytte og opnå eskalerede privilegier som fx NT AUTHORITY\SYSTEM.

A Spool’s Gold

Yderligere oplysninger:

Download rapporten

Yderligere oplysninger:

Download rapporten