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-54908

CVE-2026-54908: Remote Denial of Service via Out-of-Bounds Read in Pion DTLS Handshake Parsing

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 1, 2026·6 min read·5 visits

Executive Summary (TL;DR)

An unauthenticated remote attacker can crash any Go application utilizing Pion DTLS prior to v3.1.4 by sending a crafted 2-byte ServerKeyExchange packet during the DTLS handshake using ECDHE_PSK.

CVE-2026-54908 is a Denial of Service (DoS) vulnerability in the Pion DTLS library, where a malformed ServerKeyExchange message triggers an uncaught out-of-bounds slice read panic during handshake unmarshaling, terminating the hosting application process.

Vulnerability Overview

Pion DTLS is a widely utilized Go language implementation of Datagram Transport Layer Security (DTLS). It is commonly deployed in WebRTC applications, communication servers, and IoT gateways to secure UDP traffic. Because DTLS handles encrypted handshake negotiations on public-facing endpoints, its message-parsing engine constitutes a critical attack surface.

This vulnerability, designated as CVE-2026-54908, is a remote Denial of Service (DoS) bug class. It resides in the parsing logic for incoming ServerKeyExchange handshake packets. Specifically, the flaw is triggered when the library processes key exchange sequences under the Elliptic Curve Diffie-Hellman Ephemeral with Pre-Shared Key (ECDHE_PSK) cipher suites.

By transmitting a malformed ServerKeyExchange packet, an unauthenticated network adversary can force the Go runtime to panic. Because the Pion DTLS connection listener loop fails to recover from this panic, the entire host application process terminates abruptly. This leads to a complete loss of service availability for all active connections.

Root Cause Analysis

The structural flaw is located in the Unmarshal function within pkg/protocol/handshake/message_server_key_exchange.go. During the DTLS handshake using ECDHE_PSK, the parsing code sequentially processes several variable-length parameters starting with the Pre-Shared Key (PSK) Identity Hint.

The parsing logic reads the first two bytes of the payload to determine the length of the identity hint string. It then uses this parsed length to slice the remaining data buffer. If the parsed length is valid, the data buffer is sliced forward to parse subsequent parameters, including the Elliptic Curve Type and the Ephemeral Public Key.

The logic fails because it lacks a boundary validation check immediately following the PSK Identity Hint extraction. If an attacker delivers a ServerKeyExchange payload containing exactly two bytes, such as 0x00, 0x00, the parser interprets this as a PSK Identity Hint of length zero. The buffer is sliced with data = data[0:], which leaves the slice empty (length 0). Following this, the code attempts to read the Elliptic Curve Type by directly indexing data[0]. This out-of-bounds array access triggers a runtime panic.

Code Analysis & Architectural Flow

The vulnerable code path lacks validation before accessing index zero of the remaining byte slice. In Go, indexing a slice with zero length generates an immediate runtime panic, as shown below:

// Vulnerable Implementation in pkg/protocol/handshake/message_server_key_exchange.go
func (m *MessageServerKeyExchange) Unmarshal(data []byte) error {
    // ...
    hintLen := binary.BigEndian.Uint16(data[0:2])
    data = data[2:]
    if len(data) < int(hintLen) {
        return errLengthMismatch
    }
    m.IdentityHint = data[:hintLen]
    data = data[hintLen:] // If data is now empty, len(data) is 0
 
    // CRITICAL BUG: No check if len(data) > 0 before indexing
    if _, ok := elliptic.CurveTypes()[elliptic.CurveType(data[0])]; ok {
        m.EllipticCurveType = elliptic.CurveType(data[0])
    } 
    // ...
}

The patch addresses this issue by inserting an explicit length validation check right after the data slice operation. If the remaining slice length is zero, the function returns an errBufferTooSmall error instead of panicking:

// Patched Implementation in pkg/protocol/handshake/message_server_key_exchange.go
func (m *MessageServerKeyExchange) Unmarshal(data []byte) error {
    // ...
    m.IdentityHint = data[:hintLen]
    data = data[hintLen:]
 
    // Added validation check
    if len(data) == 0 {
        return errBufferTooSmall
    }
 
    if _, ok := elliptic.CurveTypes()[elliptic.CurveType(data[0])]; ok {
        m.EllipticCurveType = elliptic.CurveType(data[0])
    }
    // ...
}

The following diagram visualizes this execution path during the unmarshaling of the ServerKeyExchange message:

Exploitation Methodology & Trigger Conditions

Exploitation of CVE-2026-54908 requires minimal complexity. To trigger the panic, an attacker must participate in a DTLS handshake negotiation where the target service supports or accepts ECDHE_PSK cipher suites. No authentication is required to reach the vulnerable handshake parsing code path.

The attack payload consists of a crafted ServerKeyExchange DTLS handshake packet. Within this packet, the PSK Identity Hint length fields are populated with zero-value bytes (0x00, 0x00), and no subsequent payload bytes are appended. When the target application receives this packet, the parsing routine proceeds through the identity hint step and immediately triggers the out-of-bounds slice index on the missing Elliptic Curve Type byte.

Because DTLS runs over the connectionless User Datagram Protocol (UDP), an attacker can easily transmit these handshake packets without maintaining complex connection state machines. This characteristic facilitates spoofing attacks and high-volume scans designed to continuously disrupt vulnerable nodes.

Impact Assessment

The security impact of CVE-2026-54908 is a persistent, complete Denial of Service. In Go, an unrecovered runtime panic on any goroutine terminates the entire process execution. Because the Pion DTLS connection listener does not implement a recovery mechanism to handle panic propagation from individual handshakes, a single malicious packet successfully crashes the entire server or client.

This vulnerability is assigned a CVSS v4.0 score of 6.3. The severity is moderate because it does not enable remote code execution or data exposure, but it completely undermines system availability.

For enterprise environments deploying Pion DTLS in microservices (e.g., inside Kubernetes pods), orchestrators may automatically restart crashed containers. However, continuous transmission of the exploit payload by an attacker will induce a crash loop, rendering the services unavailable indefinitely.

Remediation & Detection Guidance

The primary resolution for this vulnerability is upgrading the Pion DTLS dependency in Go projects to version 3.1.4 or later. Note that version 3.1.3 was initially published but quickly retracted due to a certificate-handling bug that disrupted compatibility with Firefox clients. Security teams must ensure they bypass 3.1.3 and target 3.1.4 directly.

To identify potential exploitation attempts, security personnel should implement log monitoring for Go runtime panic traces containing the signature pattern of MessageServerKeyExchange.Unmarshal. System administrators can also configure intrusion detection rules to flag DTLS handshake packets containing empty PSK Identity Hint lengths followed by payload termination under the ECDHE_PSK cipher negotiation.

If immediate dependency upgrading is not possible, organizations should disable cipher suites utilizing the ECDHE_PSK key exchange algorithm within their DTLS configuration profiles. This configuration prevents the execution of the vulnerable Unmarshal code block entirely.

Fix Analysis (1)

Technical Appendix

CVSS Score
6.3/ 10

Affected Systems

Pion DTLS library

Affected Versions Detail

Product
Affected Versions
Fixed Version
Pion DTLS
Pion
< 3.1.43.1.4
AttributeDetail
CWE IDCWE-125 (Out-of-bounds Read)
Attack VectorNetwork
CVSS Score6.3 (Medium)
Exploit StatusPoC Available
CISA KEV StatusNot Listed
Ransomware UseNo

MITRE ATT&CK Mapping

T1498Network Denial of Service
Impact
CWE-125
Out-of-bounds Read

The software reads data past the end, or before the beginning, of the intended buffer.

Known Exploits & Detection

GitHubOfficial test assertions showcasing the panic payload in the repository test suite

Vulnerability Timeline

Security fix commit compiled and evaluated
2026-06-02
Release v3.1.3 compiled but subsequently retracted due to regressions
2026-06-06
Security Advisory GHSA-wg4g-wm44-ch5j published
2026-07-01
CVE-2026-54908 assigned and detailed on NVD
2026-07-01

References & Sources

  • [1]NVD CVE-2026-54908
  • [2]GitHub Security Advisory GHSA-wg4g-wm44-ch5j

More Reports

•about 1 hour ago•CVE-2026-54909
5.3

CVE-2026-54909: Remote Denial of Service in Pion STUN via Malformed XOR-MAPPED-ADDRESS Attribute

A remote denial of service vulnerability exists in the pion/stun package before version 3.1.3. A malformed STUN packet containing a short or empty XOR-MAPPED-ADDRESS attribute triggers a runtime slice-bounds panic during parsing, terminating the entire Go process.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 3 hours ago•CVE-2026-53573
4.8

CVE-2026-53573: Open Redirect Bypass in GeoNetwork OAuth2/OIDC and Keycloak Login Filters

An open redirect vulnerability exists in core-geonetwork from versions 3.12.0 until 4.2.16 and 4.4.11 due to unsafe redirect validation in GeonetworkOAuth2LoginAuthenticationFilter and KeycloakAuthenticationProcessingFilter. An attacker can construct a protocol-relative URL to bypass local redirection checks and redirect authenticated users to malicious external domains.

Amit Schendel
Amit Schendel
4 views•6 min read
•about 4 hours ago•CVE-2026-54768
6.9

CVE-2026-54768: User Enumeration and Profile Leak in WPGraphQL via Deprecated Field Resolver

An observable response discrepancy vulnerability in WPGraphQL versions 2.0.0 through 2.15.0 allows unauthenticated remote attackers to enumerate users and extract public profile metadata. Although the password reset mutation is designed to return a uniform success response to prevent enumeration, a legacy deprecated field resolver bypasses this mechanism by resolving the associated user profile if the target account exists.

Amit Schendel
Amit Schendel
7 views•7 min read
•about 5 hours ago•CVE-2026-54785
6.2

CVE-2026-54785: Local File Read via Directory Traversal in gemini-bridge MCP Server

Between versions 1.0.0 and 1.3.1, the gemini-bridge Model Context Protocol (MCP) server failed to restrict candidate file paths to the workspace root when processing files in inline mode. This allowed unauthenticated local users, or remote attackers executing prompt-injection payloads against connected AI agents, to traverse the directory tree and read arbitrary system files. The retrieved contents were subsequently forwarded to the external Gemini AI CLI and returned in the round-trip response.

Amit Schendel
Amit Schendel
8 views•6 min read
•about 6 hours ago•CVE-2026-54910
7.7

CVE-2026-54910: Multiple Path Traversal Vulnerabilities in FileBrowser Quantum Subtitle Handler

FileBrowser Quantum (a fork of Filebrowser) prior to version 1.4.3-beta is vulnerable to multiple directory traversal flaws in its subtitle handler endpoint (`GET /api/media/subtitles`). This allows authenticated users with standard access to read arbitrary text files on the host system.

Alon Barad
Alon Barad
8 views•6 min read
•about 7 hours ago•CVE-2026-54787
3.1

CVE-2026-54787: Insufficient Timestamp Validation in sigstore-go Key Verification Path

A security vulnerability in sigstore-go prior to version 1.2.1 allowed the use of expired or retired self-managed long-lived public keys wrapped in an ExpiringKey configuration to successfully sign code or artifacts. Because the verification pipeline verified the cryptographic signatures and RFC 3161 timestamps but failed to perform a temporal boundary check on the public key's validity window, verifiers running affected versions would mistakenly accept signatures produced outside of the key's designated operational lifetime.

Alon Barad
Alon Barad
7 views•8 min read