
Technischer Writeup und PoC für CVE-2024-6769, der DLL-Hijacking mit Activation Cache Poisoning kombiniert, um auf Windows-Systemen von mittlerer zu hoher Integrität zu eskalieren.
Dieser Blogbeitrag handelt von zwei verketteten Bugs: Stufe eins ist ein DLL-Hijacking-Bug, der durch das Remapping des ROOT-Laufwerks verursacht wird, und Stufe zwei ist ein Bug zur Vergiftung des Aktivierungscaches, der vom CSRSS-Server verwaltet wird.
Die erste Stufe wurde auf der Ekoparty 2023 in der Präsentation mit dem Titel "I'm High" von Nicolás Economou im Detail vorgestellt, von BlueFrost Security. Er erklärte, wie die Schwachstelle ausgenutzt werden kann, die zu diesem Zeitpunkt noch nicht von Microsoft gepatcht worden war. Dadurch konnte ein Benutzer mit MEDIUM INTEGRITY auf begrenzte HIGH PRIVILEGES angehoben werden, jedoch ohne den vollständigen Zugriff, um ein vollwertiger Administrator zu sein.
Die zweite Stufe wurde auf dieser Konferenz nicht vorgestellt, obwohl einige Schritte vorgeschlagen wurden, um mit der Erforschung zu beginnen.
Zunächst werden wir die erste Stufe überprüfen, um einen einführenden Kontext zu schaffen. Von dort aus werden wir tief in meine Forschung zur zweiten Stufe eintauchen, und dabei ins Detail gehen, wie die vollständige Eskalation von begrenzter HIGH INTEGRITY zum vollwertigen Administrator erreicht wird. Dies beinhaltet einen vollständig funktionierenden PoC für beide Stufen für alle Windows-Versionen, der erfolgreich auf Windows 10, Windows 11, Windows Server 2022 und Windows Server 2019 mit allen angewendeten Updates getestet wurde.

Die einzige Voraussetzung für diese Stufe ist, dass der anfängliche Prozess auf einer MEDIUM INTEGRITY-Ebene beginnt und der Benutzer zur Gruppe der Administratoren gehört.
Die erste Stufe der Ausnutzung kann in den folgenden Schritten zusammengefasst werden:
Zum Beispiel: Remapping des Laufwerks von "C:\" zu "C:\users\public"
Dadurch wird auch der Ordner "system32" von "C:\windows\system32" zu "C:\users\public\windows\system32" umgemappt.
Eines dieser betroffenen Programme ist CTFMON, das auf einer HIGH INTEGRITY-Ebene läuft, jedoch ohne Administratorrechte.
Normalerweise versucht es, das Modul MsCtfMonitor.dll aus dem echten system32-Ordner zu laden, aber da das ROOT-Laufwerk umgemappt wurde, sucht es nach MsCtfMonitor.dll in unserem gefälschten, kontrollierten system32, wo wir eine präparierte DLL mit demselben Namen erstellen und ablegen können.
An diesem Punkt wird durch das Platzieren unserer Version von MsCtfMonitor.dll im gefälschten system32-Ordner die Funktion DoMsCtfMonitor aufgerufen und führt unseren Code auf einer HIGH INTEGRITY-Ebene aus.

Platziere eine MessageBoxA in der Funktion DoMsCtfMonitor. Wenn MsCtfMonitor.dll geladen wird, zeigt sie die MessageBoxA „TRIGGER".
Überprüfe, ob die DLL in den CTFMON-Prozess geladen wurde, der auf der HIGH INTEGRITY-Ebene läuft:


Gleichzeitig können wir bestätigen, dass der Prozess, obwohl er sich auf einer HIGH INTEGRITY-Ebene befindet, keine Administratorrechte besitzt:


In seiner Ekoparty-Präsentation schlug Nicolas die folgenden Schritte vor, um die Ausnutzung abzuschließen:


Auch wenn dies einfach erscheint, erfordert es viel Zeit für Reversing und Debugging.
Beim näheren Eintauchen in diese Angriffsvektor-Geschichte wurde klar, dass die Vergiftung des Aktivierungskontext-Caches bereits in einigen Exploits verwendet wurde. Folglich lohnt es sich zu lernen, wie die Ausnutzung bisher durchgeführt wurde, um zusätzlichen Kontext und Einblicke zu gewinnen. Details zu dieser Ausnutzung sind im Write-up der Zero Day Initiative verfügbar: Activation Context Cache Poisoning: Exploiting CSRSS for Privilege Escalation.
Der Aktivierungscache kommt zum Einsatz, wenn ein Programm eine Bibliothek laden möchte, die eine bestimmte Version erfordert.
Wenn eine Anwendung beispielsweise C:\Windows\System32\comctl32.dll laden möchte, gibt es keine Garantie, dass die comctl32.dll an diesem Speicherort die Version ist, die die Anwendung benötigt. Dies ist ein grundlegender Anwendungsfall des Aktivierungskontext-Caches. Das Programm kann eine Anfrage an den CSRSS-Server senden, um einen neuen Aktivierungskontext-Eintrag zu verarbeiten, der in den Cache aufgenommen werden soll, sodass dieses Programm die benötigte spezifische Bibliotheksversion laden kann.
Zu diesem Zweck wird das sogenannte Manifest verwendet, das im XML- Format vorliegt. Es ist normalerweise als Ressource in einer EXE- oder DLL-Datei eingebettet. Alternativ sucht Windows nach einer Manifestdatei im selben Ordner, in dem sich die ausführbare Datei des Programms befindet.
Die oben erwähnte URL enthält einige Beispiele für Manifestdateien, die von alten Exploits verwendet wurden, etwa um das System dazu zu bringen, die Bibliothek advapi32.dll aus einem vom Angreifer kontrollierten Verzeichnis zu laden, das durch die PATH-TRAVERSAL-Technik erreicht wurde.

Natürlich wurden einige verwendete Angriffsvektoren gepatcht, und einige neue Techniken wurden entdeckt. Darüber hinaus wurde im Oktober-2022-Patch für Windows 11 22H2 eine neue Prüfung hinzugefügt.