
Exploit di esecuzione remota di codice nella libreria RPC
CVE-2022-26809 - la debolezza in un componente core di Windows (RPC) ha ottenuto 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 dipendono dal processo che ospita il runtime RPC. Questo bug critico, con un po' di fortuna, consente di ottenere l'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.
La CVE afferma 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 (con patch) e individuato un elenco di modifiche.
Le funzioni OSF_SCALL::ProcessResponse e OSF_CCALL::ProcessReceivedPDU sono simili per natura; entrambe elaborano pacchetti RPC, ma una gira 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 viene chiamata una nuova funzione. Ispezionando la nuova funzione e addentrandoci nel suo codice, abbiamo capito che controlla gli integer overflow. In altre parole, la nuova funzione introdotta nella patch è stata aggiunta per verificare che una variabile intera rimanesse entro un intervallo di valori atteso.

Addentrandoci ulteriormente nel codice vulnerabile in OSF_SCALL:GetCoalescedBuffer, abbiamo notato che il bug di integer overflow potrebbe portare a un heap buffer overflow, in cui i dati vengono copiati su un buffer troppo piccolo per contenerli. Questo a sua volta consente di scrivere dati fuori dai limiti del buffer, nell'heap. Se sfruttata, questa primitiva ci porta all'esecuzione remota di codice!
Una chiamata simile per controllare l'integer overflow è stata aggiunta anche in altre funzioni:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
La vulnerabilità di integer overflow e la funzione che la previene esistono sia nei flussi di esecuzione lato client che lato server.
Ancora in sviluppo, nessuna ETA.