Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconPair over encrypted BR/EDR link
-
DeliveryOpen AVDTP signalling channel
-
ExploitVictim issues AVDTP request, arms 6s timeout
-
InstallDisconnect without responding
-
C2Reconnect within timeout window
-
Executememset recycles session, timeout node stays linked
-
ImpactKernel timeout list corrupted, system crash/hang
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Expired pointer prevention
|
| Exploitation Conditions | Requires that the victim be built with the experimental CONFIG_BT_A2DP option enabled and acting as a classic Bluetooth BR/EDR A2DP endpoint, and that the local application issue an AVDTP procedure (the standard A2DP flow calls bt_a2dp_discover() from the connected callback, arming the 6-second AVDTP_TIMEOUT). The attacker must hold an encrypted - thus paired/bonded - BR/EDR link, then disconnect the AVDTP signalling channel without responding and re-open it within the remaining timeout window; the default CONFIG_TIMEOUT_BACKEND_DLIST timeout backend is required for the free-node mis-detection. Limiting factors: non-default experimental feature, mandatory paired/encrypted BR/EDR link (PR:L), adjacency (Bluetooth radio range, AV:A), and classic BR/EDR rather than BLE. No user interaction is needed, and because the attacker controls both the disconnect and reconnect timing, no race must be won. |
| Impact | This is a moderate-priority denial-of-service issue whose real-world risk is tightly bounded by its preconditions, not a widespread emergency. The CVSS 6.3 vector (AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H) correctly captures an adjacent-network (Bluetooth BR/EDR) attack requiring an encrypted - therefore paired/authenticated - link, which is why PR:L rather than PR:N is appropriate. Attack complexity is genuinely low: the description is explicit that the attacker chooses both the disconnect and reconnect instants, so 'no race has to be won,' making exploitation deterministic once preconditions are met. No EPSS score, KEV listing, or public POC was provided in the input, so there is no signal of active or probable exploitation - no public exploit identified at time of analysis. The impact is real and severe in kind (corruption of the kernel's single global timeout list via a use-after-free/expired-pointer dereference, CWE-825, yielding a system-wide crash or hang rather than a contained A2DP fault), but it is reachable only when the experimental CONFIG_BT_A2DP option is enabled and the device is a classic-Bluetooth A2DP target. Net: a legitimately exploitable availability bug for the narrow population of devices shipping experimental A2DP, but low aggregate risk because the feature is non-default and experimental and the attacker must already hold a paired, encrypted BR/EDR link. Note the C:N/I:L split in the input is debatable - the outcome described is purely a crash/hang, so an availability-only impact (I:N/A:H) is at least as defensible. |
| Exploit ScenarioDerived | An attacker already paired over an encrypted BR/EDR link opens the AVDTP signalling channel so the victim's A2DP stack issues bt_a2dp_discover() (arming the 6-second AVDTP_TIMEOUT), then tears the channel down without responding and reconnects within the timeout window. The reconnect path memset()s the bt_a2dp struct while its timeout work item is still linked in the kernel's global timeout list, and the subsequent reschedule corrupts that list, hanging or crashing the whole device. No public exploit code was identified in the provided data; exploitation is deterministic (AC:L) because the attacker controls both the disconnect and reconnect timing. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 13, 2026
Memory corruption in Zephyr's Bluetooth Classic A2DP/AVDTP host stack allows an adjacent, paired BR/EDR peer to crash or hang the entire device by forcing a delayable work item to survive a session teardown. The attacker opens the AVDTP signalling channel, lets the local application issue an AVDTP procedure (the standard A2DP flow calls bt_a2dp_discover(), arming the 6-second AVDTP_TIMEOUT), then tears the channel down without responding and re-opens it within the remaining window, so that a2dp_get_connection() memsets the session while its timeout node is still linked into the kernel's global timeout list. Preconditions are narrow - the victim must run the experimental CONFIG_BT_A2DP option with the default CONFIG_TIMEOUT_BACKEND_DLIST backend and accept an encrypted (paired) BR/EDR link, which is why the assessed severity is a bounded denial-of-service rather than a remote pre-auth compromise; no public exploit code was identified at time of analysis and the issue is not confirmed actively exploited (CISA KEV).
RemediationAI
Upstream fix available (commit a10d18c3be9d1a968574dbfbce6baee58ea398e8); a released patched version is not independently confirmed in the provided data, so teams should apply that commit or its backport to their Zephyr tree and confirm their downstream SDK/vendor release incorporates it, tracking https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-9mww-f3h4-mq95. The change cancels session->timeout_work at the top of bt_avdtp_l2cap_disconnected() and initializes the delayable work in bt_avdtp_connect() and bt_avdtp_l2cap_accept() instead of in avdtp_send_cmd(); because it alters work-item lifecycle, regression-test connect/disconnect and AVDTP procedure flows after backporting. If patching is not immediately possible, the most effective compensating control is to build with CONFIG_BT_A2DP disabled - this fully removes the vulnerable attack surface at the cost of losing Bluetooth Classic audio source/sink functionality. A second option is to avoid CONFIG_TIMEOUT_BACKEND_DLIST, since the free-node mis-detection requires that backend; switching timeout backends removes the specific corruption path but changes kernel timing behavior and costs performance, so it should be validated against real-time requirements. Reducing exposure by refusing or unpairing untrusted BR/EDR peers, disabling discoverable/pairing modes in the field, and keeping A2DP devices out of physically untrusted radio range raises the bar against the required encrypted-link precondition, but none of these replaces the fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is an expired-pointer / stale-structure dereference (CWE-825) rooted in Zephyr's kernel timeout infrastructure rather than in Bluetooth protocol parsing. In subsys/bluetooth/host/classic/avdtp.c, avdtp_send_cmd() initializes and arms session->timeout_work with a 6-second AVDTP_TIMEOUT, and every response handler cancels session->timeout_work before clearing the pending request - but bt_avdtp_l2cap_disconnected() only cleared session->req and left the delayable work armed. Because struct bt_avdtp is the first member of struct bt_a2dp, and struct bt_a2dp instances live in a static per-connection array, the memset() performed by a2dp_get_connection() in subsys/bluetooth/host/classic/a2dp.c once session->br_chan.chan.conn becomes NULL (which L2CAP arranges right after the disconnect callback returns) zeroes a live work item. With CONFIG_TIMEOUT_BACKEND_DLIST, the kernel determines a timeout is inactive by testing whether its list node is linked, so the zeroed-but-still-linked node is treated as free: the announce path pops a node with NULL links and a NULL handler pointer, and the next bt_work_reschedule() on the recycled session re-inserts an already-linked node. The result is corruption of the single kernel data structure underpinning every timer, timeslice and sleep, producing a system-wide crash or hang rather than a fault confined to the A2DP session. The vendor fix cancels session->timeout_work at the top of bt_avdtp_l2cap_disconnected() and moves k_work_init_delayable() out of avdtp_send_cmd() into the session-establishment paths bt_avdtp_connect() and bt_avdtp_l2cap_accept(), guaranteeing the work item is initialized before any disconnect callback can run.
Know when Bluetooth gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H
Adjacent Bluetooth radio (AV:A); encrypted link needs a paired peer (PR:L); attacker-chosen timing with no race (AC:L); outcome is a system-wide crash/hang only (C:N/I:N/A:H).
Primary rating from Vendor (zephyr).
CVSS VectorVendor: zephyr
DescriptionCVE.org
The AVDTP signalling layer arms a 6-second command timeout (AVDTP_TIMEOUT) in avdtp_send_cmd() whenever the local device issues an AVDTP request. Every response handler in subsys/bluetooth/host/classic/avdtp.c cancels session->timeout_work before clearing the pending request, but bt_avdtp_l2cap_disconnected() only cleared session->req and left the delayable work armed. The struct bt_avdtp session is the first member of struct bt_a2dp, whose instances live in a static per-connection array, and a2dp_get_connection() in subsys/bluetooth/host/classic/a2dp.c wipes a slot with memset() as soon as session->br_chan.chan.conn is NULL - which the L2CAP layer arranges immediately after the disconnect callback returns.
A remote Bluetooth BR/EDR peer triggers the condition by opening the AVDTP signalling channel, letting the local application issue an AVDTP procedure (the standard A2DP flow issues bt_a2dp_discover() from the connected callback), then tearing the signalling channel down without responding and re-opening it within the remaining timeout window. The reconnect reaches a2dp_accept() → a2dp_get_connection(), which zeroes the whole struct bt_a2dp while the work item's struct _timeout is still linked into the kernel's global timeout list. Both the disconnect and the reconnect instants are chosen by the attacker, so no race has to be won; an encrypted BR/EDR link is required, and CONFIG_BT_A2DP (experimental) must be enabled.
With the default CONFIG_TIMEOUT_BACKEND_DLIST backend the kernel decides a timeout is inactive by testing whether its list node is linked, so after the memset() the kernel treats a node that is still on the global timeout list as free: the announce path pops a node whose links and handler pointer are NULL, and the next bt_work_reschedule() on the recycled session re-inserts the same node into a list that already contains it. The consequence is corruption of the single kernel data structure every timer, timeslice and sleep depends on - writes through zeroed or stale list pointers and a NULL handler dispatch - producing a system-wide crash or hang rather than a fault confined to the A2DP session.
The fix cancels session->timeout_work at the top of bt_avdtp_l2cap_disconnected() and moves k_work_init_delayable() from avdtp_send_cmd() to the session-establishment paths bt_avdtp_connect() and bt_avdtp_l2cap_accept(), so the work item is always initialized before a disconnect callback can run.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Unauthenticated Bluetooth Low Energy OTA firmware upgrade in the Meatmeet Pro WiFi & Bluetooth Meat Thermometer firmware
CVE-2025-32879 is a security vulnerability (CVSS 8.8) that allows an attacker. Risk factors: public PoC available.
Zephyr's Bluetooth Low Energy connection-response handler fails to verify that a connection request was actually initiat
Heap OOB write in Android Bluetooth driver via incorrect bounds check.
A use-after-free in the Android Bluetooth stack (bluetooth_ccc.cc, function BluetoothCccHandlerCallbackImpl) lets an att
Legacy pairing and secure-connections pairing authentication in Bluetooth BR/EDR Core Specification v5.2 and earlier may
Memory corruption in the Zephyr RTOS LE Audio Broadcast Sink (subsys/bluetooth/audio/bap_broadcast_sink.c) lets an attac
A memory leak combined with a use-after-free in the Linux kernel's Bluetooth HCI connection-setup path can crash the ker
A race condition in the Linux kernel's Bluetooth L2CAP subsystem allows a use-after-free of the hci_conn::l2cap_data poi
Bluetooth authentication bypass in SwitchBot Door Lock Series allows an attacker within BLE range to manipulate the lock
Out-of-bounds read in the Linux kernel Bluetooth subsystem's eir_get_service_data() leaks kernel heap memory into usersp
Use-after-free in the Linux kernel Bluetooth L2CAP stack lets a Bluetooth-adjacent attacker corrupt kernel memory by rac
EUVD-2026-98924
NVD
CVE.org
EPSS
GitHub
Exploit-DB