Skip to main content

Zephyr A2DP EUVDEUVD-2026-98924

| CVE-2026-19939 MEDIUM
Expired Pointer Dereference (CWE-825)
2026-10-13 zephyr
6.3
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Pair over encrypted BR/EDR link
  2. Delivery
    Open AVDTP signalling channel
  3. Exploit
    Victim issues AVDTP request, arms 6s timeout
  4. Install
    Disconnect without responding
  5. C2
    Reconnect within timeout window
  6. Execute
    memset recycles session, timeout node stays linked
  7. Impact
    Kernel 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Zephyr 3.7.0 ≤4.4.2

Affected Packages

euvd zephyr no fix

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

Vendor (zephyr) PRIMARY 6.3 MEDIUM
AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:H
vuln.today AI 5.7 MEDIUM

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).

3.1 AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
4.0 AV:A/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

Attack Vector
Adjacent
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
Low
Availability
High

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

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Low
experimental, non-default classic Bluetooth A2DP in an embedded RTOS
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Controlled
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

CVE-2025-65824 HIGH POC
8.8 Dec 10

Unauthenticated Bluetooth Low Energy OTA firmware upgrade in the Meatmeet Pro WiFi & Bluetooth Meat Thermometer firmware

CVE-2025-32879 HIGH POC
8.8 Jun 20

CVE-2025-32879 is a security vulnerability (CVSS 8.8) that allows an attacker. Risk factors: public PoC available.

CVE-2025-10457 HIGH POC
8.1 Sep 19

Zephyr's Bluetooth Low Energy connection-response handler fails to verify that a connection request was actually initiat

CVE-2025-20672 CRITICAL
9.8 Jun 02

Heap OOB write in Android Bluetooth driver via incorrect bounds check.

CVE-2026-55330 CRITICAL
9.8 Oct 06

A use-after-free in the Android Bluetooth stack (bluetooth_ccc.cc, function BluetoothCccHandlerCallbackImpl) lets an att

CVE-2020-10135 MEDIUM POC
5.4 May 19

Legacy pairing and secure-connections pairing authentication in Bluetooth BR/EDR Core Specification v5.2 and earlier may

CVE-2026-19570 HIGH
8.8 Oct 09

Memory corruption in the Zephyr RTOS LE Audio Broadcast Sink (subsys/bluetooth/audio/bap_broadcast_sink.c) lets an attac

CVE-2026-90255 HIGH
8.8 Sep 17

A memory leak combined with a use-after-free in the Linux kernel's Bluetooth HCI connection-setup path can crash the ker

CVE-2026-90256 HIGH
8.8 Sep 17

A race condition in the Linux kernel's Bluetooth L2CAP subsystem allows a use-after-free of the hci_conn::l2cap_data poi

CVE-2026-8374 HIGH
8.5 Oct 09

Bluetooth authentication bypass in SwitchBot Door Lock Series allows an attacker within BLE range to manipulate the lock

CVE-2026-89583 HIGH
8.1 Sep 11

Out-of-bounds read in the Linux kernel Bluetooth subsystem's eir_get_service_data() leaks kernel heap memory into usersp

CVE-2026-90092 HIGH
8.0 Sep 17

Use-after-free in the Linux kernel Bluetooth L2CAP stack lets a Bluetooth-adjacent attacker corrupt kernel memory by rac

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy