
Exploit für Remote-Codeausführung in der RPC-Bibliothek
CVE-2022-26809 – eine Schwachstelle in einer zentralen Windows-Komponente (RPC) erhielt nicht ohne Grund einen CVSS-Score von 9.8, da der Angriff keine Authentifizierung erfordert und remote über ein Netzwerk ausgeführt werden kann und zu Remote-Codeausführung (RCE) mit den Berechtigungen des RPC-Dienstes führen kann, der von dem Prozess abhängt, der die RPC-Laufzeit hostet. Dieser kritische Fehler ermöglicht es mit etwas Glück, Zugriff auf einen nicht gepatchten Windows-Host zu erlangen, auf dem SMB läuft. Die Schwachstelle kann sowohl von außerhalb des Netzwerks ausgenutzt werden, um es zu durchbrechen, als auch zwischen Maschinen im Netzwerk.
Die CVE besagt, dass die Schwachstellen in der Windows-RPC-Laufzeit liegen, die in einer Bibliothek namens rpcrt4.dll implementiert ist. Diese Laufzeitbibliothek wird sowohl in Client- als auch in Serverprozesse geladen, die das RPC-Protokoll zur Kommunikation nutzen. Wir haben die Versionen 10.0.22000.434 (März) und 10.0.22000.613 (gepatcht) verglichen und eine Liste der Änderungen herausgefiltert.
Die Funktionen OSF_SCALL::ProcessResponse und OSF_CCALL::ProcessReceivedPDU sind von Natur aus ähnlich; beide verarbeiten RPC-Pakete, aber eine läuft auf der Serverseite und die andere auf der Clientseite (SCALL und CCALL). Beim Diffing von OSF_SCALL::ProcessReceivedPDU sind uns zwei Codeblöcke aufgefallen, die in der neuen Version hinzugefügt wurden.


Beim Betrachten des gepatchten Codes sahen wir, dass nach QUEUE::PutOnQueue eine neue Funktion aufgerufen wurde. Bei der Untersuchung der neuen Funktion und beim Eintauchen in ihren Code haben wir herausgefunden, dass sie auf Integer-Überläufe prüft. Mit anderen Worten: Die neue Funktion im Patch wurde hinzugefügt, um zu überprüfen, ob eine Integer-Variable innerhalb eines erwarteten Wertebereichs bleibt.

Beim tieferen Eintauchen in den verwundbaren Code in OSF_SCALL:GetCoalescedBuffer stellten wir fest, dass der Integer-Überlauf-Fehler zu einem Heap-Pufferüberlauf führen kann, bei dem Daten in einen Puffer kopiert werden, der zu klein ist, um sie aufzunehmen. Dies wiederum ermöglicht es, Daten außerhalb der Puffergrenzen auf dem Heap zu schreiben. Wenn diese Primitive ausgenutzt wird, führt sie zur Remote-Codeausführung!
Ein ähnlicher Aufruf zur Prüfung auf Integer-Überlauf wurde auch in anderen Funktionen hinzugefügt:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
Die Integer-Überlauf-Schwachstelle und die Funktion, die sie verhindert, existieren sowohl in clientseitigen als auch in serverseitigen Ausführungsabläufen.
Noch in Entwicklung, keine ETA.