
Доказательство концепции для CVE-2026-54992 — целочисленное переполнение при удалённом чтении в MSMQ.
Концептуальное доказательство для целочисленного переполнения при удалённом чтении в Microsoft Message Queuing, отслеживаемого как CVE-2026-54992.
PoC использует две виртуальные машины Windows. Обычный пользователь на уязвимой целевой системе запрашивает у локальной службы MSMQ чтение из очереди, размещённой на вспомогательной машине. Вспомогательная машина возвращает некорректный ответ MS-MQRR, в результате чего mqsvc.exe на целевой системе аварийно завершает работу. PoC демонстрирует отказ в обслуживании; он не демонстрирует выполнение кода.
mqqm.dll проверяет каждую возвращённую секцию пакета отдельно, но в затронутых версиях суммирует длины их выделения с использованием 32-битного значения без проверки на суммарное переполнение. Этот PoC задаёт длины секций 0x2000 и 0xffffe010. Их математическая сумма равна 0x100000010, что даёт перенос до 0x10. MSMQ выделяет память для пакета с использованием перенесённого размера, а затем обрабатывает исходные длины секций, что приводит к записи за пределами выделенной области.
Соберите два x64-исполняемых файла с помощью MinGW-w64, затем скопируйте папку на обе виртуальные машины Windows:
make clean all
Используйте две одноразовые виртуальные машины Windows в изолированной сети. Вспомогательная машина и реальная служба MSMQ используют один и тот же TCP-порт 2105, поэтому они должны работать на разных машинах.
На уязвимой целевой системе выполните из окна PowerShell с повышенными правами:
Set-ExecutionPolicy -Scope Process Bypass
.\setup-target.ps1
На вспомогательной виртуальной машине выполните из окна PowerShell с повышенными правами:
Set-ExecutionPolicy -Scope Process Bypass
.\start-emulator.ps1
Затем на целевой системе выполните из обычного окна PowerShell без повышения прав, заменив адрес на IPv4-адрес вспомогательной виртуальной машины:
.\invoke-crash.ps1 -Server 192.168.122.53 -IUnderstandThisWillCrashMSMQ
На затронутой сборке mqsvc.exe завершает работу, и MSMQ останавливается с кодом выхода службы 1067. Чтобы сбросить лабораторию, выполните restore-helper.ps1 на вспомогательной машине и перезапустите MSMQ на целевой системе.