Aug 14, 2026·7 min read·14 visits
A zero-authentication heap allocation vulnerability in s2n-quic allows remote attackers to exhaust server memory and crash the service using a single crafted Initial packet with an excessive CRYPTO offset.
An unauthenticated Denial of Service vulnerability exists in the s2n-quic library's CryptoStream reassembler due to a lack of buffer limits on out-of-order cryptographic frames. An attacker can transmit a crafted CRYPTO frame with an extremely high offset and nominal payload, forcing the receiver to execute unbounded memory allocations and causing service crashes.
The Amazon Web Services (AWS) implementation of the IETF QUIC protocol, known as s2n-quic, is a high-performance network transport library written in Rust. In implementations of the QUIC protocol, cryptographic handshakes are conducted over dedicated streams using the CRYPTO frame type. The transport library must handle out-of-order packets due to the unreliable nature of UDP transport, reassembling fragmented streams before forwarding them to the cryptographic library.\n\nPrior to version 1.82.0, the CryptoStream space in s2n-quic did not restrict the buffer window size for out-of-order cryptographic handshake frames. Unauthenticated remote clients could leverage this design flaw to allocate significant blocks of system memory on the server. The vulnerability is classified under CWE-770 (Allocation of Resources Without Limits or Throttling) and CVE-2026-10740.\n\nThis security weakness exposes any service utilizing affected versions of s2n-quic to immediate Denial of Service (DoS) attacks. Because the memory allocation occurs before the connection establishes identity or completes cryptographic authentication, any network-adjacent attacker can trigger the issue. The vulnerability does not allow remote code execution or information disclosure but successfully impacts host availability.
The underlying vulnerability exists in the state management logic of out-of-order frames within the CryptoStream receive path. When a QUIC endpoint receives an out-of-order CRYPTO frame, it must store the payload until the missing bytes arrive to preserve the sequential stream required by TLS. To keep track of these data blocks, the library maintains a Reassembler structure that maps offsets to incoming data.\n\nThe critical error in vulnerable versions of s2n-quic is the absence of a maximum offset boundary on these incoming frames. When a frame contains an extremely high value in its offset field alongside a small payload, the Reassembler attempts to adjust its tracking structures to encompass the entire gap. This process results in an immediate allocation of memory to store internal index pointers, blocks, or tracking segments.\n\nBecause no limit was enforced on the maximum distance between the current stream read cursor and the maximum write offset, the allocation size was effectively unbounded. An attacker can set the offset field to any arbitrary 62-bit integer, which is the maximum size allowed by the QUIC variable-length integer encoding. The server attempts to allocate memory proportional to this offset distance, causing rapid resource exhaustion.
To understand the flaw and its remediation, it is necessary to inspect the vulnerable code path in s2n-quic-transport/src/space/crypto_stream.rs. The pre-patch code was marked with explicit TODO comments admitting the lack of appropriate constraints.\n\nrust\n// Pre-patch code logic in s2n-quic-transport/src/space/crypto_stream.rs\n// Note the explicit TODO comment acknowledging the vulnerability\n\n//= https://www.rfc-editor.org/rfc/rfc9000#section-7.5\n//= type=TODO\n//= tracking-issue=356\n//= feature=Crypto buffer limits\n//# Endpoints MAY choose to\n//# allow more data to be buffered during the handshake.\n\n//TODO we need to limit the buffer size here\nself.rx.write_at(frame.offset, frame.data)\n\n\nThe patch in commit 6c90fa94bca4b65d1cfb41eb47fcdcd60ef61c5a remediates the issue by introducing a strict limit of 128 KiB (MAX_CRYPTO_BUFFER_SIZE) on out-of-order cryptographic frames. This limit satisfies RFC 9000 §7.5 requirements while defending against memory exhaustion. The corrected implementation enforces bounds using safe arithmetic operations.\n\nrust\n// Patched logic implementing buffering constraints\nconst MAX_CRYPTO_BUFFER_SIZE: u64 = 128 * 1024; // 128 KiB limit\n\n// Enforce the buffer size limit required by RFC 9000 §7.5.\n// This bounds the maximum distance between the read cursor and the farthest\n// byte a peer can write, capping total Reassembler memory for the crypto stream.\nlet end_offset = frame\n .offset\n .checked_add_usize(frame.data.len())\n .ok_or(transport::Error::CRYPTO_BUFFER_EXCEEDED)?;\n\nlet buffered = end_offset.as_u64().saturating_sub(self.rx.consumed_len());\nif buffered > MAX_CRYPTO_BUFFER_SIZE {\n //= https://www.rfc-editor.org/rfc/rfc9000#section-7.5\n //# If an endpoint does not expand its buffer, it MUST close\n //# the connection with a CRYPTO_BUFFER_EXCEEDED error code.\n return Err(transport::Error::CRYPTO_BUFFER_EXCEEDED);\n}\n\nself.rx.write_at(frame.offset, frame.data).map_err(|_| {\n // ...\n\n\nThe check utilizes checked_add_usize to calculate the final offset of the incoming frame safely. It then uses saturating_sub to calculate the distance from the currently consumed read cursor. If this distance exceeds MAX_CRYPTO_BUFFER_SIZE, the transaction aborts, returning a CRYPTO_BUFFER_EXCEEDED protocol error, preventing any further memory allocation.
Exploitation of CVE-2026-10740 relies on crafting a single QUIC Initial packet designed to bypass normal handshaking procedures. Because the vulnerable path is executed upon packet receipt, the attacker does not need to complete the cryptographic handshake or establish a valid TLS session. The objective is to force the server's transport thread to process an elevated write instruction immediately.\n\nAn attacker constructs a UDP packet payload containing a standard QUIC header for an Initial packet. Inside this packet, the attacker embeds a CRYPTO frame. The header parameters of this frame are set such that the offset is a high integer value, such as 0x3FFFFFFFFFFFFFF, while the actual payload consists of a single static byte. The overall size of the UDP packet remains well within standard network boundaries (typically under 1200 bytes).\n\nUpon transmitting this packet to the target's open port, the server processes the incoming UDP stream. When parsing the QUIC frames, the CryptoStream handler reads the offset parameter. It then initiates the memory allocation sequence for the Reassembler to host the sparse array. This triggers immediate heap exhaustion on the handling thread, culminating in either a panic or termination of the service process.
The successful exploitation of CVE-2026-10740 leads to a localized Denial of Service. When the target process experiences memory exhaustion, the underlying operating system's Out-of-Memory (OOM) killer may terminate the entire server application. If multiple threads run within the same memory space, a crash of the transport thread results in a full system service disruption.\n\nThe CVSS v3.1 vector is rated at 5.3 (Medium), showing a vector string of CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L. This score classifies the availability impact as Low because it primarily affects the specific target service process and does not compromise operating system kernel stability directly. However, the operational impact in enterprise environments is critical, as any exposed public-facing QUIC port can be systematically taken down with minimal attacker bandwidth.\n\nNo public Proof-of-Concept (PoC) code is currently known to be available in the public domain, and there is no evidence of active exploitation in the wild. Despite the absence of threat actor activity, the simplicity of the attack structure necessitates rapid remediation across all systems running the affected transport library.
The most effective remediation is upgrading the s2n-quic dependency to version 1.82.0 or higher. Since this library is compiled statically into Rust binaries, developers must rebuild and redeploy all dependent services. Upgrading the version in the project's dependency manifest ensures that the compiler integrates the defensive offset validation checks.\n\ntoml\n# Cargo.toml configuration update\ns2n-quic = "1.82.0"\n\n\nFor instances where immediate compilation and redeployment are not feasible, network-level mitigations can reduce the exposure risk. Network engineers can implement rate limits on UDP traffic directed at the QUIC ports to prevent brute-force memory allocation attempts. Additionally, analyzing incoming connection patterns for elevated levels of unauthenticated Initial packets can help identify active probes.\n\nDevelopers should audit their full dependency graph to confirm that transitive dependencies do not pull in older versions of the s2n-quic crate. Running cargo tree -p s2n-quic inside the project workspace will display all active paths and version strings. Ensuring that all references align with version 1.82.0 or later is critical to completely closing the vulnerability window.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L| Product | Affected Versions | Fixed Version |
|---|---|---|
s2n-quic AWS | < 1.82.0 | 1.82.0 |
| Attribute | Detail |
|---|---|
| CWE ID | CWE-770 |
| Attack Vector | Network |
| CVSS Score | 5.3 (Medium) |
| EPSS Score | 0.00291 |
| Impact | Availability (Denial of Service) |
| Exploit Status | None |
| KEV Status | Not Listed |
The software allocates memory or other resources on behalf of an untrusted actor without placing structural bounds on the maximum size or quantity that can be allocated.
An LDAP injection vulnerability exists in the centraldogma-server-auth-shiro module of LY Corporation Central Dogma before version 0.84.0. The search logic dynamically constructs LDAP search filters by interpolating user-provided usernames without escaping RFC 4515 metacharacters. Unauthenticated remote attackers can leverage this flaw to bypass authentication, enumerate directory hierarchies, and access unauthorized resources.
CVE-2026-11746 is a critical vulnerability in Central Dogma Server prior to version 0.84.0, where an embedded ZooKeeper replication secret silently falls back to a publicly known, hard-coded default string ('ch4n63m3'). Remote attackers with access to the replication network can authenticate as legitimate cluster peers, potentially leading to unauthorized data exposure, state manipulation, or complete cluster takeover.
A logical verification flaw in ZITADEL's external JWT Identity Provider validation allows attackers to bypass session expiration checks. If an incoming JWT lacks the 'exp' claim, the system skips validation entirely, creating an indefinitely valid session. This issue has been addressed in versions 3.4.12 and 4.15.2.
CVE-2026-59149 identifies a directory traversal vulnerability in `@mockoon/commons-server`, the backend mock-server library powering the Mockoon application. The flaw occurs in the path containment validation logic used during raw file response generation. An unauthenticated attacker can exploit this weakness to retrieve arbitrary files from sibling directories sharing a common prefix with the designated static base directory.
An in-depth analysis of CVE-2026-59148, a high-severity flaw in Mockoon where unauthenticated administrative endpoints and a wildcard Cross-Origin Resource Sharing (CORS) policy allow remote execution, state poisoning, and credential theft.
An improper authentication vulnerability (CWE-287) in ZITADEL's external identity provider handler before version 4.15.3 allows remote attackers to perform complete account takeover. When auto-linking by email is enabled, ZITADEL verifies that the local target account has a verified email address but fails to verify if the external provider confirmed ownership of that same email. Attackers can exploit this by registering an unverified account with a victim's email address on a permissive external provider, leading to unauthorized account binding and persistent access.