
Proof of Concept für CVE-2026-54992, einen MSMQ Remote-Read Integer Overflow
Proof of Concept für den Microsoft Message Queuing Remote-Read-Integer-Überlauf, der als CVE-2026-54992 verfolgt wird.
Das PoC verwendet zwei Windows-VMs. Ein normaler Benutzer auf dem angreifbaren Ziel bittet den lokalen MSMQ-Dienst, aus einer Warteschlange zu lesen, die vom Helfer gehostet wird. Der Helfer gibt eine fehlerhafte MS-MQRR-Antwort zurück, was dazu führt, dass mqsvc.exe auf dem Ziel abstürzt. Das PoC demonstriert einen Denial-of-Service; es demonstriert keine Codeausführung.
mqqm.dll validiert jeden zurückgegebenen Paketabschnitt separat, summiert jedoch in betroffenen Versionen deren Allokationslängen mit einem 32-Bit-Wert, ohne auf einen aggregierten Überlauf zu prüfen. Dieses PoC liefert Abschnittslängen von 0x2000 und 0xffffe010. Ihre mathematische Summe ist 0x100000010, was auf 0x10 überläuft. MSMQ allokiert Paketspeicher mit der überlaufenen Größe und verarbeitet dann die ursprünglichen Abschnittslängen, was zu einem Schreibzugriff außerhalb der Grenzen führt.
Erstellen Sie die beiden x64-Binärdateien mit MinGW-w64 und kopieren Sie dann den Ordner auf beide Windows-VMs:
make clean all
Verwenden Sie zwei temporäre Windows-VMs in einem isolierten Netzwerk. Der Helfer und der eigentliche MSMQ-Dienst verwenden beide den TCP-Port 2105, daher müssen sie auf getrennten Maschinen ausgeführt werden.
Führen Sie auf dem angreifbaren Ziel in einem erhöhten PowerShell-Fenster aus:
Set-ExecutionPolicy -Scope Process Bypass
.\setup-target.ps1
Führen Sie auf der Helfer-VM in einem erhöhten PowerShell-Fenster aus:
Set-ExecutionPolicy -Scope Process Bypass
.\start-emulator.ps1
Führen Sie dann auf dem Ziel in einem normalen, nicht erhöhten PowerShell-Fenster aus, und ersetzen Sie die Adresse durch die IPv4-Adresse der Helfer-VM:
.\invoke-crash.ps1 -Server 192.168.122.53 -IUnderstandThisWillCrashMSMQ
Bei einer betroffenen Version wird mqsvc.exe beendet und MSMQ stoppt mit dem Dienst-Exitcode 1067. Um das Labor zurückzusetzen, führen Sie restore-helper.ps1 auf dem Helfer aus und starten Sie MSMQ auf dem Ziel neu.