HIGH 8.0

CVE-2026-53256 Linux Kernel Bluetooth RFCOMM Use-After-Free

A use-after-free vulnerability exists in the Linux kernel's Bluetooth RFCOMM module. When a device attempts to establish a Bluetooth connection, the kernel retrieves a reference to a listening socket but fails to properly protect it from being freed by a simultaneous socket closure. An attacker with local Bluetooth access and user-level privileges can trigger this race condition, potentially causing the kernel to crash or execute arbitrary code. The vulnerability requires specific timing and local access, making it a moderate but credible threat in multi-user or shared-device environments.

Source data · NVD / CISA · public domain

CVSS
3.1 · 8.0 HIGH · CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weaknesses (CWE)
CWE-416
Affected products
12 configuration(s)
Published / Modified
2026-06-25 / 2026-07-08

NVD description (verbatim)

In the Linux kernel, the following vulnerability has been resolved: Bluetooth: RFCOMM: hold listener socket in rfcomm_connect_ind() rfcomm_get_sock_by_channel() scans rfcomm_sk_list under the list lock, but returns the selected listener after dropping that lock without taking a reference. rfcomm_connect_ind() then locks the listener, queues a child socket on it, and may notify it after unlocking it. The buggy scenario involves two paths, with each column showing the order within that path: rfcomm_connect_ind(): listener close: 1. Find parent in 1. close() enters rfcomm_get_sock_by_channel() rfcomm_sock_release(). 2. Drop rfcomm_sk_list.lock 2. rfcomm_sock_shutdown() without pinning parent. closes the listener. 3. Call lock_sock(parent) and 3. rfcomm_sock_kill() bt_accept_enqueue(parent, unlinks and puts parent. sk, true). 4. Read parent flags and may 4. parent can be freed. call sk_state_change(). If close wins the race, parent can be freed before rfcomm_connect_ind() reaches lock_sock(), bt_accept_enqueue(), or the deferred-setup callback. Take a reference on the listener before leaving rfcomm_sk_list.lock. After lock_sock() succeeds, recheck that it is still in BT_LISTEN before queueing a child, cache the deferred-setup bit while the parent is locked, and drop the reference after the last parent use. KASAN reported a slab-use-after-free in lock_sock_nested() from rfcomm_connect_ind(), with the freeing stack going through rfcomm_sock_kill() and rfcomm_sock_release().

8 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability resides in rfcomm_connect_ind(), which calls rfcomm_get_sock_by_channel() to locate a listener socket for an incoming RFCOMM connection. The function returns a pointer to the listener after releasing the rfcomm_sk_list lock, but does not acquire a reference count on the socket. A concurrent close() operation can then execute rfcomm_sock_release() → rfcomm_sock_shutdown() → rfcomm_sock_kill(), freeing the listener before rfcomm_connect_ind() calls lock_sock() or bt_accept_enqueue(). The race window is narrow but exploitable: the listener can be deallocated between the unlock at step 2 and the lock_sock() call at step 3 in the connection path. The fix involves taking a reference on the listener before dropping rfcomm_sk_list.lock, rechecking the listener's BT_LISTEN state after acquiring the socket lock, caching the deferred-setup bit while the parent is locked, and releasing the reference after all parent uses complete. KASAN has detected this as a slab-use-after-free in lock_sock_nested().

Business impact

Successful exploitation could result in local kernel denial-of-service (crash/reboot) or potentially kernel code execution, depending on heap memory state and attacker capability. Systems providing Bluetooth services to multiple local users or running Bluetooth-connected IoT devices are at risk. The impact is magnified in containerized or virtualized environments where Bluetooth is exposed to guest users. Organizations relying on Bluetooth connectivity for critical device communication or authentication should prioritize patching to maintain availability and prevent privilege escalation.

Affected systems

The Linux kernel across all actively maintained stable branches is affected. The vulnerability impacts any system with Bluetooth RFCOMM support enabled (the module is commonly compiled as a module or built-in on desktop, laptop, and IoT distributions). Systems with Bluetooth disabled or kernel builds without RFCOMM support are not vulnerable. Specific kernel versions vary by distribution; verify your kernel version against the respective Linux vendor advisory for exact ranges and available patches.

Exploitability

Exploitation requires local access (AV:A in the CVSS vector), meaning the attacker must be authenticated on the system or have physical Bluetooth proximity. The low complexity (AC:L) and low privilege requirement (PR:L) indicate that once local access is obtained, triggering the race is straightforward: send a connection request while concurrently closing a listening socket. No user interaction is required. The race window is tight but reliably triggerable in controlled scenarios, making this a practical threat in multi-user or guest-facing systems. Public exploit proof-of-concept code would likely appear quickly after disclosure.

Remediation

Apply the kernel patch that implements proper reference counting for the listener socket in rfcomm_connect_ind(). The fix ensures the listener is pinned via refcount_inc() before rfcomm_sk_list.lock is released, the listener's state is rechecked after acquiring lock_sock(), and the reference is dropped only after all uses complete. Organizations must rebuild and redeploy kernels with the patch, or wait for their distribution vendor to provide patched kernel images. No userspace workaround exists; kernel-level patching is mandatory.

Patch guidance

Contact your Linux distribution vendor for patched kernel packages. Major distributions (Red Hat, Canonical, SUSE, Debian) will issue kernel updates through their respective security channels. Verify the patch commit hash or kernel version against the vendor advisory to confirm the fix is included. Test patched kernels in a non-production environment to ensure stability and compatibility with your Bluetooth stack before rolling out widely. Plan maintenance windows for kernel updates, as they typically require system reboot.

Detection guidance

Monitor system logs for kernel crashes or KASAN warnings mentioning 'rfcomm_connect_ind', 'lock_sock_nested', or 'slab-use-after-free'. Kernel dmesg logs will show 'BUG: KASAN: use-after-free' with a stack trace implicating the RFCOMM module. Enable CONFIG_KASAN in your kernel build if available for enhanced detection during pre-production testing. Intrusion detection systems with kernel event monitoring (e.g., via eBPF or kernel audit) can alert on abnormal Bluetooth socket state transitions. In production, runtime kernel integrity tools may detect exploitation attempts, though after-the-fact detection is inherently difficult for in-kernel race conditions.

Why prioritize this

This vulnerability scores HIGH (CVSS 8.0) due to the potential for kernel code execution combined with achievable local access requirements. Although it requires low-privilege local access and tight race timing, the impact (C:H, I:H, A:H) justifies immediate patching in any environment where multiple users access Bluetooth services or where untrusted guest access is possible. Organizations should prioritize patching production systems ahead of other non-critical kernel updates, particularly for devices in shared or IoT deployments.

Risk score, explained

The CVSS 3.1 score of 8.0 (HIGH) reflects: (1) attack vector of adjacent (Bluetooth proximity), (2) low complexity to trigger the race, (3) low privilege required for exploitation, (4) no user interaction needed, (5) scope unchanged (only the local system), and (6) confidentiality, integrity, and availability all rated HIGH due to potential kernel code execution or sustained denial-of-service. The score does not account for the current lack of KEV status or public exploits, which would further elevate real-world risk if those factors change.

Frequently asked questions

Can an attacker on the network exploit this without local access?

No. The CVSS vector specifies adjacent (AV:A), meaning the attacker must have Bluetooth proximity to the target device or be a local system user. Remote network-based exploitation is not possible.

Will applying the patch require a reboot?

Yes. Kernel patches require a system reboot to take effect. Plan maintenance windows accordingly, especially for critical systems.

Does this affect Bluetooth on all Linux devices?

Only systems with the RFCOMM module enabled are vulnerable. Check if the module is loaded via 'lsmod | grep rfcomm'. Devices with Bluetooth completely disabled or kernels built without RFCOMM are not at risk.

What is the difference between use-after-free and similar memory bugs?

A use-after-free occurs when code accesses memory that has been freed. In this case, rfcomm_connect_ind() reads or modifies a listener socket after rfcomm_sock_kill() has deallocated it, leading to corruption or crash. Unlike buffer overflows, the attacker does not overwrite adjacent memory; instead, they trigger undefined behavior on an already-freed object.

This analysis is based on the vulnerability description and CVSS scoring as of the publication date. Exploit code and real-world attack reports have not been observed at the time of this writing, but may emerge post-disclosure. Patch availability and version numbers vary by Linux distribution; consult your vendor's security advisory for specific update guidance. This document is for informational purposes and does not constitute legal, compliance, or specific remediation advice. Organizations should conduct their own risk assessment and testing before deploying patches. SEC.co makes no warranty regarding the accuracy or completeness of this analysis. Source: NVD (public-domain), retrieved 2026-08-03. Analysis generated by SEC.co (claude-haiku-4-5).