Skip to main content
Vulnerability Database/CVE-2026-80904

CVE-2026-80904: Linux Kernel TLS Privilege Escalation Flaw

CVE-2026-80904 is a privilege escalation vulnerability in the Linux kernel TLS implementation that allows failed async decrypts to be bypassed in splice operations. This article covers technical details, affected versions, security impact, and mitigation strategies.

Published:

CVE-2026-80904 Overview

CVE-2026-80904 is a Linux kernel vulnerability in the net/tls subsystem. The tls_sw_splice_read() function fails to check ctx->async_wait.err after an asynchronous decrypt failure. When async decryption fails, tls_decrypt_done() records the error in ctx->async_wait.err and calls tls_err_abort() to store the error in sk_err. The tls_sw_recvmsg() and tls_sw_read_sock() paths both read async_wait.err under the reader lock and abort the connection. The splice path lacked this check, so it continued to deliver TLS records on a connection whose authentication had already failed.

Critical Impact

A TLS record that fails authentication can still be delivered to userspace through splice() on Linux kernels missing this fix, undermining TLS integrity guarantees.

Affected Products

  • Linux kernel net/tls (Kernel TLS, kTLS) socket implementation
  • Linux distributions shipping affected mainline and stable kernel branches
  • Workloads using kernel TLS with the splice_read receive path

Discovery Timeline

  • 2026-09-04 - CVE-2026-80904 published to NVD
  • 2026-09-04 - Last updated in NVD database

Technical Details for CVE-2026-80904

Vulnerability Analysis

The Linux kernel TLS receive path supports asynchronous record decryption. When a record fails to authenticate during async decrypt, tls_decrypt_done() records the failure in two places: ctx->async_wait.err and, via tls_err_abort(), in the socket's sk_err.

Both tls_sw_recvmsg() and tls_sw_read_sock() explicitly read async_wait.err once they acquire the reader lock and fail the syscall on error. This ensures a record that fails Authenticated Encryption with Associated Data (AEAD) verification breaks the connection rather than leaking unauthenticated plaintext.

tls_sw_splice_read() did not perform that read. sk_err alone was insufficient: tls_rx_rec_wait() only inspects sk_err inside a loop it skips whenever a record has already been parsed, and the first reader to reach sock_error() clears sk_err, while async_wait.err persists. A splice() consumer therefore continued to receive records on a connection that recvmsg() and read_sock() would refuse.

Root Cause

The root cause is missing input validation of the async decrypt error state in one of three parallel receive paths. This is an inconsistency bug: two of three TLS receive entry points honored async_wait.err, while tls_sw_splice_read() did not.

Attack Vector

Exploitation requires an attacker positioned to tamper with ciphertext on an established kTLS connection, such as a network-adjacent adversary modifying TLS records in transit. On an unpatched kernel where the consuming application uses splice() to read from the TLS socket, forged or corrupted records that fail AEAD verification can still be delivered instead of terminating the connection. This weakens the integrity guarantee that TLS is expected to provide. The fix adds the missing async_wait.err read to tls_sw_splice_read() so it behaves like the other two receivers.

No verified public exploit code is available. See the upstream fix commits for technical details, including kernel commit 06c2a53 and kernel commit a808aad.

Detection Methods for CVE-2026-80904

Indicators of Compromise

  • No file-based or network IOCs are published for this issue. Detection is inventory-driven: identify hosts running kernel versions predating the backports listed in the stable-tree commits.
  • Unexpected application-layer protocol errors on kTLS consumers that use splice() may indicate tampered records that were previously silently delivered.

Detection Strategies

  • Enumerate kernel build IDs across the fleet and compare against the fixed stable-branch commits referenced in the NVD entry.
  • Identify workloads that enable kernel TLS (setsockopt(SOL_TLS, TLS_TX/TLS_RX)) and use splice() or sendfile() on the receive side, such as reverse proxies and file servers.
  • Review distribution security bulletins for backport status of the six upstream fix commits.

Monitoring Recommendations

  • Track kernel patch status through configuration management and vulnerability scanners.
  • Monitor TLS-terminating services for anomalous connection resets or authentication failures that begin after kernel updates, to catch behavioral regressions.
  • Alert on new kernel modules or sockets enabling SOL_TLS in environments where kTLS is not expected.

How to Mitigate CVE-2026-80904

Immediate Actions Required

  • Apply the kernel updates from your Linux distribution that include the upstream fix for tls_sw_splice_read().
  • Prioritize systems that terminate TLS in the kernel and forward data with splice() or sendfile(), such as high-throughput proxies and web servers.
  • Reboot patched hosts to load the updated kernel image, since live-patching may not cover this networking change.

Patch Information

The fix reads async_wait.err inside tls_sw_splice_read() in the same manner as the other two TLS receivers. Stable-tree backports are tracked in the following commits: 06c2a53, 18ae1e9, 4b17791, 82d9269, 976df67, and a808aad.

Workarounds

  • Disable kernel TLS on receive paths where feasible and terminate TLS in userspace libraries such as OpenSSL until the kernel is patched.
  • Reconfigure affected services to use recvmsg() or read() instead of splice() on kTLS sockets, since those paths correctly honor async_wait.err.
  • Restrict exposure of kTLS-enabled services to trusted network segments to reduce opportunity for record tampering.

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.