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-2026-59902

CVE-2026-59902: Memory Exhaustion in Netty SctpMessageCompletionHandler

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 17, 2026·6 min read·5 visits

Executive Summary (TL;DR)

Unauthenticated remote attackers can crash Netty-based SCTP servers by exhausting JVM memory with unrestricted fragment accumulation.

An uncontrolled resource consumption vulnerability in Netty's SctpMessageCompletionHandler allows unauthenticated remote attackers to cause a Denial of Service. By transmitting a series of large, fragmented Stream Control Transmission Protocol (SCTP) messages, an attacker can exhaust the Java Virtual Machine heap or direct memory. This occurs because the handler fails to enforce limits on the cumulative byte size of buffered, incomplete SCTP fragments.

Vulnerability Overview

The Stream Control Transmission Protocol (SCTP) is a transport-layer protocol designed to support message-oriented data transmission across packet networks. Within the Netty framework, the netty-transport-sctp module handles these connections. Specifically, the SctpMessageCompletionHandler class manages the reassembly of fragmented SCTP user data chunks. It buffers inbound fragments until a complete message is reconstructed and passed up the application channel pipeline.

This architecture exposes an attack surface centered around resource allocation. Because SCTP natively supports message fragmentation, receivers must temporarily store incomplete message fragments in memory. The vulnerability resides in the way Netty manages this temporary buffer memory. Unauthenticated remote network clients can exploit the allocation logic to trigger a complete service shutdown.

This vulnerability is classified under CWE-400 (Uncontrolled Resource Consumption) and carries a CVSS base score of 7.5. An attacker does not require system privileges or user interaction to exploit this flaw. The impact is isolated to service availability, where successful exploitation results in an uncontrolled process exit via memory exhaustion.

Root Cause Analysis

To understand the root cause, it is necessary to examine how SctpMessageCompletionHandler buffers fragmented messages. The handler maintains an internal map called incompleteSctpMessages to store incoming fragments, keyed by stream identifier. Each entry in this map contains a list of ByteBuf references representing the individual fragments received so far.

While a prior patch for CVE-2026-46340 established boundaries on the quantity of incoming data, those restrictions were structurally incomplete. The previous controls enforced boundaries on the maximum number of concurrent incomplete messages (maxIncompleteSctpMessages, default 128) and the maximum number of fragments permitted per message (maxFragments, default 128). Crucially, these parameters only tracked the count of elements rather than their actual physical sizes in memory.

Under default configurations, an attacker can transmit chunks containing up to 64 KB of user payload. A single connection can hold 128 incomplete messages, with each message containing 128 individual fragments. Calculating the cumulative memory footprint reveals that a single client connection can force the allocation of approximately 1.05 GB of heap or direct memory (128 concurrent messages * 128 fragments * 65,536 bytes). By initiating multiple concurrent SCTP associations, an attacker can rapidly exceed the JVM maximum heap threshold, triggering an unrecoverable OutOfMemoryError (OOM).

Code Analysis and Patch Verification

The vulnerability was mitigated in Netty commit 1b5abc6443b63726c72cdd285af2feb7ddbb8ff7. The fix introduces a strict byte-budget limitation that prevents unbounded heap allocation during fragment reassembly. Below is an analysis of the structural changes implemented in SctpMessageCompletionHandler.java.

public class SctpMessageCompletionHandler extends MessageToMessageDecoder<SctpMessage> {
    // Introduces a hard ceiling of 16 MB of cumulative memory for incomplete fragments
    private static final int DEFAULT_MAX_BUFFERED_BYTES = 16 * 1024 * 1024;
 
    private final IntObjectMap<List<ByteBuf>> incompleteSctpMessages = new IntObjectHashMap<>();
    private final int maxIncompleteSctpMessages;
    private final int maxFragments;
    private final int maxBufferedBytes;
    private long bufferedBytes; // Active tracker for currently allocated fragment memory

When a new fragment arrives, the handler must check the available byte budget prior to allocating and retaining the buffer. This validation step is executed via a helper function checkBufferedBytes before invoking byteBuf.retain():

// Code snippet showing budget check before fragment buffering
if (incompleteSctpMessages.size() >= maxIncompleteSctpMessages) {
    throw new CodecException("Too many incomplete sctp messages in flight: " + maxIncompleteSctpMessages);
}
checkBufferedBytes(byteBuf); // Throws exception if buffer limit is exceeded
frag = new ArrayList<>();
frag.add(byteBuf.retain());
bufferedBytes += byteBuf.readableBytes(); // Account for newly buffered bytes
incompleteSctpMessages.put(streamIdentifier, frag);

Upon successful reassembly of the complete message, or when an error causes the channel to terminate, the handler must release the tracked memory budget. The helper function removeBufferedBytes is called to decrement the counter:

private void checkBufferedBytes(ByteBuf byteBuf) {
    int readableBytes = byteBuf.readableBytes();
    if (readableBytes > maxBufferedBytes - bufferedBytes) {
        throw new CodecException("Too many buffered bytes for incomplete sctp messages: " + maxBufferedBytes);
    }
}
 
private void removeBufferedBytes(List<ByteBuf> buffers) {
    for (ByteBuf buffer : buffers) {
        bufferedBytes -= buffer.readableBytes();
    }
}

This implementation is structurally sound and complete. By verifying both individual fragment size limits and a global byte threshold, the application blocks malicious fragmentation sequences before they can exhaust JVM memory reserves.

Threat Model and Attack Scenario

An attack targeting CVE-2026-59902 requires no initial system authentication. The only prerequisite is network-level access to the port where the Netty-based SCTP service is listening. The attacker does not need to establish a fully compliant application-layer session, as the vulnerability is triggered during transport-layer stream processing.

The attack begins when the malicious client establishes an SCTP association with the target server. The attacker then transmits multiple SCTP DATA chunks containing fragmented payloads. Crucially, the attacker marks these chunks as incomplete by omitting the 'Ending fragment' flag (the E-bit in the SCTP chunk flags must be set to 0). This forces the Netty handler to hold the incoming data in memory indefinitely. By sending large fragments across multiple concurrent streams, the heap space is rapidly consumed until the application crashes.

Impact Assessment

The exploitation of this vulnerability leads to a complete loss of service availability. In standard Java applications, when the JVM throws an OutOfMemoryError, the runtime environment often enters an unstable state. Worker threads can terminate silently, locks may remain unreleased, and database connections can fail to close properly. In many enterprise deployment environments, the container orchestrator (such as Kubernetes) or the operating system process manager will terminate the JVM process entirely.

Because the vulnerability affects the networking transport layer, it blocks all active and incoming connections when the crash occurs. In critical environments utilizing SCTP for telecommunications protocols (such as SS7/SIGTRAN or 5G core network interfaces), a service crash can disrupt communications infrastructure. The lack of integrity or confidentiality impact limits the risk of data theft, keeping the focus entirely on service disruption.

Remediation and Mitigation

The primary recommendation is to update the Netty dependencies to a patched version. This resolves the flaw natively by introducing the missing budget-checking mechanisms. Security administrators should audit their project configuration files to ensure compliance with the following versions:

If using the Netty 4.1.x release stream, upgrade the dependency to version 4.1.137.Final or newer. If using the Netty 4.2.x release stream, upgrade to version 4.2.17.Final or newer.

<!-- Recommended dependency upgrade in Maven pom.xml -->
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-sctp</artifactId>
    <version>4.2.17.Final</version>
</dependency>

If patching is not immediately feasible, system administrators should implement network-level access controls. Restrict incoming SCTP traffic to trusted peer IP addresses using firewall rules or security groups. Additionally, configure connection rate-limiting policies at the operating system level to reduce the number of concurrent SCTP associations an untrusted host can maintain.

Fix Analysis (1)

Technical Appendix

CVSS Score
7.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

Affected Systems

Netty Transport SCTP (io.netty:netty-transport-sctp)

Affected Versions Detail

Product
Affected Versions
Fixed Version
netty-transport-sctp
Netty
< 4.1.137.Final4.1.137.Final
netty-transport-sctp
Netty
>= 4.2.0.Final, < 4.2.17.Final4.2.17.Final
AttributeDetail
CWE IDCWE-400
Attack VectorNetwork
CVSS Severity7.5 (High)
Exploit Statusnone
CISA KEV StatusNo

MITRE ATT&CK Mapping

T1499Endpoint Denial of Service
Impact
CWE-400
Uncontrolled Resource Consumption

The software does not properly control the allocation and maintenance of a limited resource, enabling an actor to influence the amount of resources consumed.

References & Sources

  • [1]GitHub Security Advisory: Memory Exhaustion in SctpMessageCompletionHandler
  • [2]Fix Commit 1b5abc64
  • [3]Netty Pull Request 17213
  • [4]Netty Pull Request 17217
  • [5]Netty Release v4.1.137.Final
  • [6]Netty Release v4.2.17.Final
  • [7]CVE-2026-59902 Record on CVE.org

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•7 minutes ago•GHSA-FHGH-WQ4Q-R37X
7.8

GHSA-FHGH-WQ4Q-R37X: Remote Code Execution via Sigstore Signature Verification Bypass in uniget CLI

A high-severity logic inversion flaw in the uniget CLI completely bypasses Sigstore cryptographic signature verification on metadata files by default. If an attacker can poison the package metadata cache or repository, they can execute arbitrary OS commands under the privileges of the active user.

Alon Barad
Alon Barad
1 views•5 min read
•about 1 hour ago•CVE-2026-59903
6.5

CVE-2026-59903: Cache Poisoning and Information Disclosure via CorsHandler Vary Header Overwrite

A technical analysis of CVE-2026-59903 in Netty's HTTP CORS handler, where the CorsHandler overwrites existing application Vary headers with Origin, leading to unauthorized caching of sensitive information.

Alon Barad
Alon Barad
1 views•5 min read
•about 3 hours ago•CVE-2026-68518
8.8

CVE-2026-68518: Command Injection Bypass in Glances via Cross-Field Shell-Operator Reconstruction

A command injection bypass vulnerability exists in the Glances system monitoring tool prior to v4.5.6. This flaw permits an attacker with local process or container metadata control to bypass action-template sanitizers by reconstructing shell execution operators across adjacent unescaped variables. When a system alert triggers a configured action template, the reconstructed operators are evaluated by the underlying shell, leading to arbitrary code execution in the context of the Glances process.

Amit Schendel
Amit Schendel
4 views•9 min read
•3 days ago•CVE-2026-53653
8.7

CVE-2026-53653: Unauthenticated Denial of Service via Unbounded Image Derivative Dimensions in Grav CMS

Grav CMS prior to version 1.7.53 and 2.0.0-rc.8 is vulnerable to an unauthenticated remote denial of service (DoS) vulnerability. By supplying crafted query parameters with extremely large dimensions to image assets, remote unauthenticated attackers can force the server to allocate massive amounts of system memory, leading to kernel Out-Of-Memory (OOM) termination of web worker processes.

Amit Schendel
Amit Schendel
11 views•7 min read
•3 days ago•CVE-2026-53657
8.2

CVE-2026-53657: Privilege Escalation via Overly Permissive Unix Domain Socket in Lima Guest Agent

CVE-2026-53657 is a local privilege escalation vulnerability in Lima (lima-vm/lima) affecting versions prior to 2.1.3 when configured with the QEMU driver. The guest agent daemon, running as root, creates its communication socket `/run/lima-guestagent.sock` with world-writable permissions (0777). This allows unprivileged local users to command the agent to establish arbitrary tunnels, including to privileged local UNIX sockets (like D-Bus). Because the target daemon authenticates the incoming connection using the credentials of the root-owned guest agent (via SO_PEERCRED), unprivileged users can perform root operations, resulting in complete guest VM compromise.

Amit Schendel
Amit Schendel
8 views•9 min read
•3 days ago•CVE-2026-10740
5.3

CVE-2026-10740: Denial of Service in s2n-quic CryptoStream Reassembly

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.

Amit Schendel
Amit Schendel
6 views•7 min read