Cloudanix VulnDB

CVE-2026-64434

High · 8.8

CVSS

8.8

EPSS

0.3%

Published

Jul 25, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

Nearby attackers may be able to crash or potentially compromise Linux devices that have vulnerable Bluetooth support enabled.

Exploitation
Adjacent Network
Attacker needs
None
Complexity
Moderate
Impact
Full Compromise
Component
OS kernel
Class
Use After Free
Remediation
Patch
Effort
Medium
Patch risk
Low

What it actually does

This is a Linux kernel Bluetooth L2CAP use-after-free condition in the asynchronous channel timeout path. The timer worker l2cap_chan_timeout() can access chan->conn after the underlying l2cap_conn object has been freed during connection teardown, causing the worker to operate on freed kernel memory when it attempts to lock conn->lock. Because the flaw occurs in kernel space and the CVSS vector indicates adjacent-network exploitation with no authentication or user interaction, a Bluetooth-range attacker may be able to trigger memory corruption that can lead to denial of service and, depending on exploitability on a given kernel build and hardening configuration, possible kernel-level code execution or privilege escalation.

Why it matters to the business

Systems with enabled Bluetooth support may be exposed to attacks from nearby adversaries without requiring credentials or user interaction. Successful exploitation could crash affected hosts, disrupt endpoint availability, or potentially allow deeper compromise of the operating system. The low current EPSS score and lack of known public exploit maturity reduce immediate internet-scale risk, but the high CVSS score means organizations with Bluetooth-enabled laptops, workstations, kiosks, embedded Linux devices, or industrial/medical/retail endpoints should treat this as a priority kernel maintenance issue.

How an attack unfolds

An attacker within Bluetooth radio range initiates or manipulates an L2CAP connection to an affected Linux host. The attacker then causes a timing-sensitive sequence where an L2CAP channel timeout worker is scheduled while the associated Bluetooth connection is being torn down. In vulnerable kernels, the timeout handler can dereference the stale chan->conn pointer after the l2cap_conn object has already been freed. This can corrupt kernel memory or trigger a kernel crash. More advanced exploitation would require shaping heap layout and timing the connection teardown to turn the use-after-free into controlled memory reuse, which is generally platform- and kernel-configuration-dependent.

How to fix it

Apply a vendor-supplied Linux kernel update that includes the Bluetooth L2CAP reference-counting fix for this issue. Where immediate patching is not possible, reduce exposure by disabling Bluetooth on systems that do not require it, blocking automatic Bluetooth startup, disabling pairing/discoverability, and restricting physical proximity to sensitive systems. Practical mitigations include using rfkill to block Bluetooth, disabling the bluetooth service, removing or blacklisting Bluetooth kernel modules where operationally acceptable, and enforcing endpoint configuration policies that keep Bluetooth off by default. Because no exact fixed package versions were provided, use the affected distribution or device vendor advisory as the authoritative source for the corrected kernel version.

How to confirm the fix worked

Confirm remediation by verifying that the running kernel version matches a vendor release that contains the L2CAP channel timeout reference fix. Reboot after kernel installation and confirm the patched kernel is active, not merely installed. Validate exposure reduction by checking whether Bluetooth adapters are blocked or absent where Bluetooth is not required. On Linux systems, review `uname -a`, distribution package metadata for the installed kernel, `rfkill list`, `systemctl status bluetooth`, and loaded modules such as `bluetooth`, `btusb`, `hci_uart`, and related HCI drivers. If source validation is available, confirm the kernel contains the change that holds a reference to l2cap_conn when a channel is added and releases it in the channel destructor.

Typical attack path

  1. Identify a nearby Linux device with Bluetooth enabled and discoverable or otherwise reachable over Bluetooth.
  2. Establish or provoke Bluetooth L2CAP activity with the target device.
  3. Manipulate connection state so that an L2CAP channel timeout is pending while the underlying Bluetooth connection is closed or torn down.
  4. Trigger the asynchronous l2cap_chan_timeout() worker to access the freed l2cap_conn object.
  5. Cause a kernel crash or attempt to exploit the resulting kernel memory corruption for higher-impact compromise.

How to detect it

Look for evidence of Bluetooth-triggered kernel instability or memory corruption. Useful sources include kernel logs, system journal entries, crash dumps, pstore/ramoops, kdump vmcores, EDR kernel panic telemetry, and Bluetooth daemon logs. Search for KASAN use-after-free reports involving l2cap_chan_timeout, conn->lock, l2cap_conn, l2cap_core.c, hci disconnect paths, or workqueue crashes. Also review bursts of Bluetooth connect/disconnect activity preceding a crash, unexpected HCI device teardown, L2CAP timeout messages, or repeated Bluetooth adapter resets. Because exploitation is proximity-based, correlate suspicious events with physical access windows, Bluetooth adapter activity, and endpoint location where possible. Absence of these artifacts does not prove non-exploitation, especially on production kernels without KASAN or persistent crash logging enabled.

  • BUG: KASAN: slab-use-after-free
  • slab-use-after-free in mutex_lock
  • l2cap_chan_timeout
  • net/bluetooth/l2cap_core.c:422
  • Workqueue: events l2cap_chan_timeout
  • chan->conn
  • conn->lock
  • l2cap_conn_add
  • l2cap_connect_cfm
  • hci_disconn_cfm
  • hci_conn_hash_flush
  • hci_dev_close_sync
  • hci_unregister_dev
  • vhci_release
  • Bluetooth: L2CAP
  • kernel BUG at net/bluetooth/l2cap_core.c
  • Oops:
  • Kernel panic
  • general protection fault
  • KASAN: use-after-free

What your security team should do

  • Prioritize patching Bluetooth-enabled Linux endpoints, embedded systems, kiosks, and workstations that may be physically accessible to attackers.
  • Disable Bluetooth wherever it is not required, especially on servers, privileged administrator workstations, and fixed-function appliances.
  • Inventory Linux assets with active Bluetooth adapters using endpoint management, EDR, or configuration management tooling.
  • Monitor for kernel crash, KASAN, oops, panic, and Bluetooth L2CAP anomalies until patching is complete.
  • Require a reboot after kernel updates and verify the patched kernel is the running kernel.
  • For high-security environments, enforce policy-based Bluetooth disablement and restrict pairing/discoverability even after patching.
  • Track vendor advisories for exact fixed kernel package versions because fixed versions were not supplied in the input.

The record

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: L2CAP: Fix UAF in channel timeout by holding conn ref l2cap_chan_timeout() runs asynchronously and accesses chan->conn. If the connection is torn down while the timer is running or pending, chan->conn can be freed, leading to a use-after-free when the timer worker attempts to lock conn->lock: | BUG: KASAN: slab-use-after-free in instrument_atomic_read_write include/linux/instrumented.h:112 [inline] | BUG: KASAN: slab-use-after-free in atomic_long_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:4456 [inline] | BUG: KASAN: slab-use-after-free in __mutex_trylock_fast kernel/locking/mutex.c:161 [inline] | BUG: KASAN: slab-use-after-free in mutex_lock+0x4f/0xa0 kernel/locking/mutex.c:318 | Write of size 8 at addr ffff8881298d9550 by task kworker/2:1/83 | | CPU: 2 UID: 0 PID: 83 Comm: kworker/2:1 Not tainted 7.1.0-rc6-next-20260601-dirty #6 PREEMPT(full) | Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.17.0-debian-1.17.0-1 04/01/2014 | Workqueue: events l2cap_chan_timeout | Call Trace: | <TASK> | instrument_atomic_read_write include/linux/instrumented.h:112 [inline] | atomic_long_try_cmpxchg_acquire include/linux/atomic/atomic-instrumented.h:4456 [inline] | __mutex_trylock_fast kernel/locking/mutex.c:161 [inline] | mutex_lock+0x4f/0xa0 kernel/locking/mutex.c:318 | l2cap_chan_timeout+0x5d/0x1b0 net/bluetooth/l2cap_core.c:422 | process_one_work kernel/workqueue.c:3326 [inline] | process_scheduled_works+0x7c8/0xfb0 kernel/workqueue.c:3409 | worker_thread+0x8a9/0xcf0 kernel/workqueue.c:3490 | kthread+0x346/0x430 kernel/kthread.c:436 | ret_from_fork+0x1a3/0x470 arch/x86/kernel/process.c:158 | ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245 | </TASK> | | Allocated by task 320: | l2cap_conn_add+0xa7/0x820 net/bluetooth/l2cap_core.c:7075 | l2cap_connect_cfm+0xdb/0xd70 net/bluetooth/l2cap_core.c:7452 | hci_connect_cfm include/net/bluetooth/hci_core.h:2139 [inline] | hci_remote_features_evt+0x52f/0x9f0 net/bluetooth/hci_event.c:3760 | hci_event_func net/bluetooth/hci_event.c:7796 [inline] | hci_event_packet+0x561/0xa70 net/bluetooth/hci_event.c:7847 | hci_rx_work+0x370/0x890 net/bluetooth/hci_core.c:4040 | process_one_work kernel/workqueue.c:3326 [inline] | process_scheduled_works+0x7c8/0xfb0 kernel/workqueue.c:3409 | worker_thread+0x8a9/0xcf0 kernel/workqueue.c:3490 | kthread+0x346/0x430 kernel/kthread.c:436 | ret_from_fork+0x1a3/0x470 arch/x86/kernel/process.c:158 | ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245 | | Freed by task 322: | hci_disconn_cfm include/net/bluetooth/hci_core.h:2154 [inline] | hci_conn_hash_flush+0x101/0x1f0 net/bluetooth/hci_conn.c:2736 | hci_dev_close_sync+0x889/0xde0 net/bluetooth/hci_sync.c:5405 | hci_dev_do_close net/bluetooth/hci_core.c:502 [inline] | hci_unregister_dev+0x1f7/0x370 net/bluetooth/hci_core.c:2679 | vhci_release+0x12a/0x180 drivers/bluetooth/hci_vhci.c:690 | __fput+0x369/0x890 fs/file_table.c:510 | task_work_run+0x160/0x1d0 kernel/task_work.c:233 | get_signal+0xf5b/0x1120 kernel/signal.c:2810 | arch_do_signal_or_restart+0x4d/0x600 arch/x86/kernel/signal.c:337 | __exit_to_user_mode_loop kernel/entry/common.c:64 [inline] | exit_to_user_mode_loop+0x85/0x510 kernel/entry/common.c:98 | do_syscall_64+0x263/0x3d0 arch/x86/entry/syscall_64.c:100 | entry_SYSCALL_64_after_hwframe+0x77/0x7f | | The buggy address belongs to the object at ffff8881298d9400 | which belongs to the cache kmalloc-512 of size 512 | The buggy address is located 336 bytes inside of | freed 512-byte region [ffff8881298d9400, ffff8881298d9600) Fix it by having chan->conn hold a reference to l2cap_conn (via l2cap_conn_get) when the channel is added to the connection, and releasing it in the channel destructor. This ensures the l2cap_conn remains alive as long as the channel exists. A new FLAG_DEL channel flag is introduced to indicate that the ch ---truncated---

Affected packages

Ecosystem Package Introduced Fixed