CVE-2026-33846 Overview
CVE-2026-33846 is a heap buffer overflow vulnerability in the Datagram Transport Layer Security (DTLS) handshake fragment reassembly logic of GnuTLS. The flaw resides in the merge_handshake_packet() function, which matches and merges incoming handshake fragments solely by handshake type. The function does not validate that the message_length field stays consistent across fragments belonging to the same logical message. A remote, unauthenticated attacker can send crafted DTLS fragments with conflicting message_length values to trigger an out-of-bounds write on the heap. The vulnerability is classified under [CWE-130: Improper Handling of Length Parameter Inconsistency].
Critical Impact
Remote unauthenticated attackers can cause application crashes or potential heap memory corruption in any service using vulnerable GnuTLS DTLS implementations.
Affected Products
- GnuTLS DTLS implementations (versions affected per Red Hat advisory)
- Red Hat Enterprise Linux packages shipping vulnerable GnuTLS builds
- Applications and services that link against affected GnuTLS DTLS code paths
Discovery Timeline
- 2026-05-04 - CVE-2026-33846 published to the National Vulnerability Database
- 2026-05-04 - Last updated in NVD database
Technical Details for CVE-2026-33846
Vulnerability Analysis
GnuTLS supports DTLS, which transports TLS handshake messages over unreliable datagrams. Because handshake messages can exceed the path MTU, DTLS fragments handshake messages and reassembles them at the receiver. Each fragment carries a handshake type, a message_length describing the total reassembled message size, a fragment_offset, and a fragment_length.
The reassembly routine merge_handshake_packet() keys fragment matching only on the handshake type. It allocates a reassembly buffer based on the message_length declared by the first fragment it observes. Subsequent fragments with the same handshake type are merged into that buffer without re-validating that their message_length field matches the original.
When a later fragment declares a larger message_length and a fragment_offset plus fragment_length exceeding the originally allocated buffer, the merge operation writes past the end of the heap allocation. The result is heap corruption that can crash the process or, depending on heap layout, alter adjacent allocations.
Root Cause
The root cause is improper handling of length parameter inconsistency [CWE-130]. The implementation trusts the message_length of the first fragment as authoritative and omits a consistency check when later fragments arrive. Bounds checks during the copy operation reference the original allocation size but do not reject fragments whose declared offsets and lengths exceed it.
Attack Vector
An attacker reaches the vulnerable code path by initiating a DTLS handshake with any service that uses GnuTLS as its DTLS provider. The attacker sends an initial handshake fragment with a small message_length to control the allocation size. The attacker then sends additional fragments of the same handshake type with a larger message_length and offsets crafted to write beyond the allocated buffer. No authentication or prior session state is required, and the entire attack occurs over UDP during the initial handshake.
No public proof-of-concept exploit code is currently available. Refer to the Red Hat Bugzilla #2450625 entry and the Red Hat CVE-2026-33846 page for additional technical detail as it is published.
Detection Methods for CVE-2026-33846
Indicators of Compromise
- Unexpected crashes, SIGSEGV, or SIGABRT events in processes linked against libgnutls while handling DTLS traffic.
- Glibc heap corruption messages such as malloc(): corrupted or free(): invalid pointer in logs of DTLS-enabled services.
- DTLS handshake records from a single peer where successive fragments of the same handshake type carry differing message_length values.
Detection Strategies
- Inspect DTLS traffic at the network layer for handshake fragments where message_length is inconsistent across fragments sharing the same handshake type and epoch.
- Deploy IDS/IPS signatures that flag DTLS ClientHello or Certificate fragment sequences with conflicting length declarations.
- Build SIEM correlation rules that join DTLS service crash events with inbound UDP DTLS traffic from the same source within a short window.
Monitoring Recommendations
- Track GnuTLS package versions across the fleet and alert on hosts running builds prior to the fix referenced in RHSA-2026:13274.
- Monitor process restart counts and core dump generation for services exposing DTLS, including OpenConnect, CoAP gateways, and SIP/RTP endpoints.
- Capture and retain DTLS handshake metadata at perimeter sensors to support post-incident reconstruction of fragment sequences.
How to Mitigate CVE-2026-33846
Immediate Actions Required
- Inventory all systems running GnuTLS and identify services that accept DTLS traffic, including VPN concentrators, IoT brokers, and media gateways.
- Apply the vendor-supplied GnuTLS update from RHSA-2026:13274 or the equivalent patch from your Linux distribution.
- Restart all services linked against libgnutls after patching to ensure the updated library is loaded.
Patch Information
Red Hat has issued RHSA-2026:13274 addressing the heap buffer overflow in merge_handshake_packet(). The fix enforces that message_length is consistent across all fragments belonging to the same logical handshake message and rejects fragments whose declared bounds exceed the allocated reassembly buffer. Customers on other distributions should track their vendor advisories and upgrade GnuTLS to the corresponding fixed release.
Workarounds
- Restrict inbound UDP access to DTLS-enabled services using firewall rules, allowing only known peer addresses where feasible.
- Where business requirements permit, disable DTLS and require TLS over TCP until the GnuTLS update can be deployed.
- Place affected services behind a DTLS-aware proxy or VPN concentrator that performs handshake validation independent of GnuTLS.
# Example: update GnuTLS on Red Hat Enterprise Linux
sudo dnf update gnutls
# Verify the installed version after patching
rpm -q gnutls
# Identify running processes still using the pre-patch library
sudo lsof -n 2>/dev/null | grep -E 'libgnutls.*\(deleted\)'
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


