Mooncake closed arbitrary process-memory access, but its TCP data port still has no authentication
CVE-2026-103764 covers an unauthenticated read-and-write primitive in older Mooncake transfer engines. Version 0.3.13 restricts addresses to registered buffers; the researcher's report says the data port remains unauthenticated.
By Parminder Kumar Sharma · · 4 min read
The fix closes one boundary and leaves another
A security report filed in the Mooncake project on 1 October 2026 describes an unauthenticated memory read-and-write flaw in the transfer engine's TCP data plane. The corresponding CVE-2026-103764 record was published overnight in the UK. The reporter demonstrated the behaviour on version 0.3.11.post1 and identifies versions before 0.3.13 as affected.
The finding is narrower than a claim that every AI model server is remotely exploitable. The attacker must be able to reach the Mooncake TCP data port, and the affected transport must be in use. In the reported configuration the data listener bound to all interfaces and chose a port from the documented default 15000 to 17000 range. The public report does not count exposed systems or document real-world exploitation.
The two boundaries should not be conflated.
| Boundary | Before 0.3.13 | In 0.3.13, according to the report |
|---|---|---|
| Which address can be read or written | Network-supplied address could point outside a registered buffer | Address checked against registered buffers |
| Who can reach the data service | No peer authentication on the TCP data port | Still no peer authentication on that port |
How the address crossed from wire to process memory
The researcher traced the TCP transport through TcpTransport::install and ServerSession::readHeader. The listener selects a data port in the documented 15000 to 17000 range and, in the tested configuration, binds all interfaces. The session header carries a size and an address. Before the patch, the server treated that supplied address as a pointer in its own address space without proving that it belonged to a registered transfer buffer. For a READ, the server sent bytes from that address; for a WRITE, it received bytes into it.
The proof of concept exercised mapped memory inside and outside a registered buffer on 0.3.11.post1. The absence of a crash in that test matters because the primitive produced data transfer, not merely denial of service. It still says nothing about whether a real deployment was reachable from the internet. Reachability is determined by how the operator bound, routed and firewalled its data plane.
Different evidence supports different conclusions.
| Question | Evidence to collect | What it tells you |
|---|---|---|
| Is the affected code present? | Installed version and transport configuration | Whether the vulnerable path can run |
| Can an untrusted host reach it? | Listener binding, network policy, flow logs | Whether the prerequisite is met |
| Was memory read or written? | Session and network telemetry, process anomalies | A possible incident, requiring correlation |
Why the fix is necessary but not a full access policy
The August 0.3.13 patch checks the requested address against registered buffers before serving the transfer. That removes the arbitrary-process-memory path demonstrated in the report. Registered buffers still exist to hold data for the intended transfer, and the reporter states the TCP data port remains without peer authentication. Thus an upgrade changes what a reachable peer can address; restricting reachability changes who can talk to the service. Both questions belong in the review.
The report mentions prompt and KV-cache content as plausible sensitive material in an AI-serving process. Whether such material was present in any compromised process is unknown. Do not turn the controlled demonstration into an unverified claim of leaked user conversations.
Why a transfer engine can expose more than model output
The older server session took an address supplied over the network and used it as a pointer in its own process. The reporter showed reads and writes against both registered and unregistered mapped buffers without crashing the test process. In an AI-serving deployment, process memory can include cached context, prompts and application secrets. That is a plausible impact described by the report, not proof that any named deployment leaked prompts.
Version 0.3.13, released before this disclosure, adds address validation so the same request cannot reach arbitrary process memory outside registered buffers. The reporter explicitly notes that this does not add peer authentication. Operators therefore need both the corrected version and a network boundary around the data plane. The issue report is a researcher submission; the project release and patch confirm the code change, while broader deployment impact remains unmeasured.
Check the data plane, not just the package number
Take this with you
Operator checks
- Inventory Mooncake transfer-engine versions and identify workloads using its TCP transport.
- Upgrade versions before 0.3.13 through the project's supported release process.
- Find the actual TCP data listener and limit reachability to the hosts that need to exchange data.
- Review network records for unexpected access to the data-port range and investigate if there is evidence of untrusted reachability.
- Treat 0.3.13 as an address-validation fix, not as a substitute for network access control.
Sources
- PrimaryResearcher report on TCP transport memory accessMooncake GitHubaccessed 2026-10-02
- PrimaryMooncake 0.3.13 releaseMooncake GitHubaccessed 2026-10-02
- PrimaryAddress validation changeMooncake GitHubaccessed 2026-10-02
- PrimaryCVE-2026-103764 recordCVE Programaccessed 2026-10-02


