CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2023-21554
9.892.12%

QueueJumper (CVE-2023-21554): The Ghost of Middleware Past Returns

Amit Schendel
Amit Schendel
Senior Security Researcher

Feb 14, 2026·6 min read·13 visits

PoC Available

Executive Summary (TL;DR)

A critical 9.8/10 RCE in the Windows MSMQ service allows unauthenticated attackers to execute arbitrary code as the Network Service account via TCP port 1801. It affects almost all versions of Windows. Patch immediately or disable the service.

Microsoft Message Queuing (MSMQ) is a relic of a bygone era, a middleware service that allows applications to talk to each other when they aren't online at the same time. It's the kind of legacy debt that sysadmins forget exists until it sets the server on fire. Enter CVE-2023-21554, dubbed 'QueueJumper'. It is a critical, unauthenticated Remote Code Execution (RCE) vulnerability that allows an attacker to take over a Windows Server simply by sending a malformed packet to TCP port 1801. No credentials, no user interaction, just pure, unadulterated memory corruption.

The Hook: Who Still Uses MSMQ?

Microsoft Message Queuing (MSMQ) is like that one box of cables you keep in your closet 'just in case'. You don't know why you have it, you haven't touched it in a decade, but it's there, taking up space and gathering dust. In the Windows world, MSMQ is an optional component used for asynchronous communication. It was big in the early 2000s for gluing together enterprise applications.

Here's the kicker: even though it's 'optional', it often gets enabled silently. Install Microsoft Exchange? You might get MSMQ. Install certain SQL Server components? MSMQ tags along. Once enabled, it opens TCP port 1801 and listens for incoming connections from anyone. It doesn't ask for a password. It doesn't check if you're a friend. It just blindly accepts binary blobs and tries to parse them.

This vulnerability, discovered by Check Point Research, is a classic case of 'old code meets modern scrutiny'. The service runs as mqsvc.exe, usually with Network Service privileges. While that's not SYSTEM, it's more than enough to pivot, escalate, and turn a domain controller into a cryptocurrency miner.

The Flaw: Trust Issues in Binary Parsing

The vulnerability lives inside mqqm.dll, the library responsible for parsing the proprietary MSMQ binary protocol. If you've ever looked at protocol parsers written in C/C++ from the 90s, you know exactly where this is going. The protocol consists of a Base Header followed by a variable number of section headers (User Header, Property Header, Security Header, etc.).

Specifically, the flaw is an Out-of-Bounds Write (CWE-787). The parser reads a size field from the incoming packet header to determine how much memory to allocate—or worse, assumes a fixed buffer size—and then copies data from the packet into that buffer based on a different length field provided by the attacker.

It is the security equivalent of a bank teller asking, 'How much money are you giving me?' and you say 'Five dollars', but then you hand them a dump truck full of pennies and they try to stuff it all into a single envelope. The envelope rips, the pennies spill everywhere (memory corruption), and in the chaos, you slip a note to the manager saying 'Give me the vault key' (Remote Code Execution).

The Code: Anatomy of a Buffer Overflow

Let's look at the logic failure. The MSMQ protocol uses a pointer-rich structure for its headers. When mqsvc.exe receives a packet, it calls CQmPacket::CQmPacket to initialize the packet object. The vulnerability is triggered when parsing specific variable-length headers, such as the Extension Header.

In a simplified view, the vulnerable pseudo-code looks something like this:

// Simplified logic of the vulnerability
void ParseHeader(byte* packetData) {
    // Attacker controls headerSize
    DWORD headerSize = *(DWORD*)(packetData + OFFSET_SIZE);
    
    // Allocation might be small or fixed
    byte* buffer = new byte[FIXED_BUFFER_SIZE];
 
    // ... checks are missing or insufficient ...
 
    // CRITICAL FLAW: Writing beyond the bounds of 'buffer'
    // The code trusts the packet data to not exceed the buffer
    // without strictly validating headerSize against the allocated capacity.
    memcpy(buffer, packetData + OFFSET_DATA, headerSize);
}

The patch provided by Microsoft in April 2023 (KB5025229) introduces strict bounds checking. They added validation routines that ensure the NextSection pointer (which points to the next header in the stream) does not point outside the boundaries of the received packet data. If the offset calculations point into unmapped memory or overlap in invalid ways, the parser now throws an exception and drops the connection.

The Exploit: Jumping the Queue

Exploiting QueueJumper is surprisingly clean for a binary heap overflow. The attack vector is strictly network-based on TCP port 1801. A functional exploit requires sending a sequence of packets to set up the internal state of the Queue Manager, followed by the trigger packet.

The Attack Chain:

  1. Handshake: The attacker connects to 1801 and sends an establish_connection packet. This convinces the server to allocate a session object.
  2. Negotiation: A connection_parameters packet is sent to set packet sizes and timeouts. This grooms the heap, ensuring the subsequent allocation lands next to something interesting.
  3. The Trigger: The attacker sends a user_message packet containing a malformed Extension Header. This header claims to be small but contains a massive payload.

When mqsvc.exe processes the trigger, it calculates the address for the next header. Due to the integer overflow or missing check, it writes the attacker's shellcode into the adjacent memory chunk. If the attacker successfully overwrites a virtual function table (vtable) pointer or a return address on the stack, they gain control of the instruction pointer (RIP/EIP).

While public PoCs (like those by zoemurmure) mostly demonstrate a Denial of Service (crashing the service with an access violation), weaponizing this for RCE is trivial for a seasoned exploit dev. You simply replace the garbage data with a ROP chain leading to VirtualProtect and your shellcode.

The Impact: Why You Should Care

You might be thinking, "It's just the Network Service account, who cares?" You should care. Network Service is a built-in Windows account that has less privilege than SYSTEM, but it still has significant access to network resources. It can authenticate to other machines in the domain using the computer's machine account (DOMAIN\COMPUTER$).

Scenario:

  1. Attacker compromises an old web server running MSMQ via CVE-2023-21554.
  2. They get a shell as nt authority\network service.
  3. They use the machine account credentials to perform a DCSync attack or request a Kerberos ticket for other services (Silver Ticket).
  4. Within minutes, they move laterally to the Domain Controller.

With an EPSS score hovering around 0.92 (92%), this isn't theoretical. The barrier to entry is low, and the payoff is high. If you have port 1801 exposed to the internet, you are effectively running a public shell server.

The Fix: Kill It or Patch It

The mitigation strategy here is binary: either you need MSMQ, or you don't. Most of you don't.

Option 1: The Scorched Earth Policy (Recommended) If you don't have a specific, documented business need for MSMQ, disable it. Right now. Go to your servers and run:

Disable-WindowsOptionalFeature -Online -FeatureName MSMQ-Server -Remove

Option 2: The Patch (For the Unfortunate) If you are running legacy software that requires MSMQ (I'm sorry), you must apply the April 2023 Security Updates. This includes KB5025229 for Windows 10/11 and corresponding KBs for Server 2008/2012/2016/2019/2022.

Option 3: Firewalls (The Band-Aid) If you can't patch and can't disable it (why?), block TCP port 1801 at the perimeter. MSMQ should never, ever be exposed to the public internet. If Shodan can see your port 1801, you've already lost.

Official Patches

MicrosoftOfficial Microsoft Security Response Center (MSRC) Advisory

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
EPSS Probability
92.12%
Top 8% most exploited

Affected Systems

Windows 10Windows 11Windows Server 2008Windows Server 2012Windows Server 2016Windows Server 2019Windows Server 2022

Affected Versions Detail

Product
Affected Versions
Fixed Version
Windows 10
Microsoft
< April 2023 UpdateApril 2023 Patch
Windows Server
Microsoft
2008 - 2022 (Pre-April 2023)April 2023 Patch
AttributeDetail
CVSS Score9.8 (Critical)
Attack VectorNetwork (TCP 1801)
AuthenticationNone (Unauthenticated)
EPSS Score0.92 (High Probability)
CWECWE-20 / CWE-787
ImpactRemote Code Execution (System Takeover)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1210Exploitation of Remote Services
Lateral Movement
CWE-20
Improper Input Validation

Known Exploits & Detection

GitHubPython script triggering a crash (DoS) in mqsvc.exe
GitHubTechnical analysis and crash PoC
NucleiDetection Template Available

Vulnerability Timeline

Vulnerability disclosed by Check Point Research
2023-04-11
Microsoft releases patch (Patch Tuesday)
2023-04-11
Public DoS PoCs released on GitHub
2023-04-15

References & Sources

  • [1]Check Point Research - QueueJumper Analysis