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

CVE-2026-31408: Linux Kernel Bluetooth Use-After-Free

CVE-2026-31408 is a use-after-free flaw in the Linux kernel Bluetooth SCO component caused by improper socket reference handling. This vulnerability allows potential exploitation during concurrent operations. Learn the technical details, affected versions, impact, and mitigation strategies.

Updated:

CVE-2026-31408 Overview

CVE-2026-31408 is a use-after-free vulnerability in the Linux kernel's Bluetooth Synchronous Connection-Oriented (SCO) subsystem. The flaw resides in sco_recv_frame(), which reads conn->sk under sco_conn_lock() but releases the lock without holding a reference to the socket. A concurrent close() operation can free the socket between the lock release and the subsequent sk->sk_state access. An attacker within Bluetooth range can exploit this race condition to corrupt kernel memory, potentially achieving code execution or causing a denial of service.

Critical Impact

Adjacent-network attackers can trigger kernel memory corruption through concurrent Bluetooth SCO socket operations, leading to potential code execution with kernel privileges.

Affected Products

  • Linux kernel Bluetooth SCO subsystem
  • Multiple stable kernel branches receiving backported fixes
  • Systems with Bluetooth hardware and SCO functionality enabled

Discovery Timeline

  • 2026-04-06 - CVE-2026-31408 published to NVD
  • 2026-04-27 - Last updated in NVD database

Technical Details for CVE-2026-31408

Vulnerability Analysis

The vulnerability is a classic use-after-free race condition in the Linux kernel Bluetooth stack. The sco_recv_frame() function processes incoming SCO frames and retrieves the associated socket from the connection structure. The function acquires sco_conn_lock() to read conn->sk, then releases the lock before accessing the socket's state via sk->sk_state. This window between lock release and socket access creates an exploitable race condition.

A concurrent socket close() operation on another CPU can free the socket structure during this window. When sco_recv_frame() subsequently dereferences sk, it operates on freed memory. The vulnerability requires Bluetooth proximity, making it exploitable across the adjacent network attack surface.

Root Cause

The root cause is missing reference counting on the socket object. While companion functions in the same file, including sco_sock_timeout() and sco_conn_del(), correctly call sco_sock_hold() to acquire a reference before releasing the lock, sco_recv_frame() omitted this safety pattern. This inconsistency between functions handling the same shared object created the race window.

Attack Vector

Exploitation requires an attacker within Bluetooth radio range of the target device. The attacker must trigger SCO frame reception concurrently with socket close operations to win the race. Successful exploitation can corrupt kernel heap memory, enabling privilege escalation, kernel code execution, or system crashes.

The upstream fix takes a socket reference using sco_sock_hold() before releasing the lock and adds sock_put() on all exit paths to balance the reference count. Patch details are available in the Linux Kernel Commit b0a7da0e3f74 and related backport commits.

Detection Methods for CVE-2026-31408

Indicators of Compromise

  • Unexpected kernel oops or panic messages referencing sco_recv_frame, sk_state, or the Bluetooth SCO subsystem in dmesg output
  • KASAN reports identifying use-after-free conditions in net/bluetooth/sco.c
  • Abnormal Bluetooth subsystem crashes correlated with active SCO connections
  • Unexplained kernel privilege escalation events on systems with active Bluetooth interfaces

Detection Strategies

  • Enable Kernel Address Sanitizer (KASAN) on test systems to surface use-after-free conditions in the SCO code path
  • Monitor kernel logs for Bluetooth subsystem warnings and panics referencing socket state access
  • Audit installed kernel versions against the patched commits listed in the upstream references
  • Deploy endpoint telemetry that captures kernel crash signatures and correlates them with Bluetooth activity

Monitoring Recommendations

  • Track Bluetooth device pairings and SCO connection establishment on managed endpoints
  • Alert on repeated kernel crashes on Bluetooth-enabled hosts, particularly servers and workstations with wireless headsets
  • Centralize kernel ring buffer logs for retrospective analysis of memory corruption indicators
  • Inventory Linux kernel versions across the fleet to identify hosts running unpatched builds

How to Mitigate CVE-2026-31408

Immediate Actions Required

  • Apply the upstream Linux kernel patches referenced in the NVD entry as soon as distribution updates become available
  • Identify Linux endpoints with Bluetooth hardware and prioritize them for patching
  • Disable the Bluetooth stack on systems that do not require it using systemctl disable --now bluetooth
  • Unload the SCO kernel module on systems where Bluetooth audio is not needed with modprobe -r bnep sco

Patch Information

The fix is committed across multiple stable kernel branches. Reference patches include Linux Kernel Commit 108b81514d8f, Linux Kernel Commit 45aaca995e4a, Linux Kernel Commit 598dbba9919c, Linux Kernel Commit 7197462e90b8, Linux Kernel Commit b0a7da0e3f74, Linux Kernel Commit d57384e27d1e, and Linux Kernel Commit e76e8f0581ef. Consult your Linux distribution vendor for backported kernel updates.

Workarounds

  • Disable the Bluetooth controller via firmware or operating system settings on devices that do not use it
  • Blacklist the bluetooth, bnep, and related modules through /etc/modprobe.d/ to prevent kernel loading
  • Restrict physical proximity access to high-value Linux hosts to reduce the adjacent network attack surface
  • Enforce least-privilege policies and kernel hardening features such as SMEP, SMAP, and KASLR
bash
# Configuration example: disable Bluetooth and SCO modules
sudo systemctl disable --now bluetooth.service
echo "blacklist bluetooth" | sudo tee /etc/modprobe.d/blacklist-bluetooth.conf
echo "blacklist bnep"      | sudo tee -a /etc/modprobe.d/blacklist-bluetooth.conf
echo "install sco /bin/true" | sudo tee -a /etc/modprobe.d/blacklist-bluetooth.conf
sudo update-initramfs -u

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

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

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.