
CVE-2026-54992에 대한 개념 증명, MSMQ 원격 읽기 정수 오버플로
Microsoft Message Queuing 원격 읽기 정수 오버플로(CVE-2026-54992)에 대한 개념 증명입니다.
이 PoC는 두 대의 Windows VM을 사용합니다. 취약한 대상의 일반 사용자는 로컬 MSMQ 서비스에 헬퍼가 호스팅하는 큐에서 읽기를 요청합니다. 헬퍼는 잘못된 MS-MQRR 응답을 반환하여 대상의 mqsvc.exe를 충돌시킵니다. 이 PoC는 서비스 거부(denial of service)를 입증하며, 코드 실행을 입증하지는 않습니다.
mqqm.dll은 반환된 각 패킷 섹션을 개별적으로 검증하지만, 영향을 받는 버전에서는 32비트 값을 사용하여 할당 길이를 합산할 때 전체 오버플로를 확인하지 않습니다. 이 PoC는 섹션 길이로 0x2000과 0xffffe010을 제공합니다. 두 값의 수학적 합은 0x100000010이며, 이는 0x10으로 래핑됩니다. MSMQ는 래핑된 크기로 패킷 저장소를 할당한 다음 원래 섹션 길이를 처리하여 경계를 벗어난 쓰기(out-of-bounds write)가 발생합니다.
MinGW-w64로 두 x64 바이너리를 빌드한 다음 폴더를 두 Windows VM 모두에 복사합니다:
make clean all
격리된 네트워크에서 폐기 가능한 두 대의 Windows VM을 사용합니다. 헬퍼와 실제 MSMQ 서비스는 모두 TCP 포트 2105를 사용하므로 서로 다른 머신에서 실행해야 합니다.
취약한 대상에서 관리자 권한 PowerShell 창으로 실행합니다:
Set-ExecutionPolicy -Scope Process Bypass
.\setup-target.ps1
헬퍼 VM에서 관리자 권한 PowerShell 창으로 실행합니다:
Set-ExecutionPolicy -Scope Process Bypass
.\start-emulator.ps1
그런 다음, 대상에서 일반(비관리자) PowerShell 창으로 실행하고, 주소를 헬퍼 VM의 IPv4 주소로 바꿉니다:
.\invoke-crash.ps1 -Server 192.168.122.53 -IUnderstandThisWillCrashMSMQ
영향을 받는 빌드에서는 mqsvc.exe가 종료되고 MSMQ가 서비스 종료 코드 1067로 중지됩니다. 실습 환경을 재설정하려면 헬퍼에서 restore-helper.ps1을 실행하고 대상에서 MSMQ를 다시 시작합니다.