Skip to main content

Zephyr RTOS EUVDEUVD-2026-97106

| CVE-2026-19935 HIGH
Use After Free (CWE-416)
2026-10-11 zephyr
7.5
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Pair/establish CoC channel on dynamic PSM
  2. Delivery
    Send data K-frame queuing rx_work
  3. Exploit
    Immediately send L2CAP Disconnect Request
  4. Execution
    Teardown frees channel via released() callback
  5. Persist
    Workqueue dereferences dangling channel reference
  6. Impact
    Memory corruption or code execution

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Memory lifecycle management
MITRE ATT&CK

2 techniques across 2 tactics: Execution, Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a build with CONFIG_BT_L2CAP_DYNAMIC_CHANNEL enabled and a channel using a dynamic PSM in the 0x0080-0x00FF range; SIG-assigned PSMs such as EATT (0x0027) and OTS (0x0025) use the inline receive path and are NOT affected, nor are configurations without dynamic-channel support. The attacker must have an established CoC channel and send a data K-frame immediately followed by an L2CAP Disconnect Request to queue rx_work before teardown. Impact is further gated by the default CONFIG_BT_RECV_WORKQ_BT setting (RX processing on the dedicated Bluetooth workqueue while rx_work runs on the system workqueue) and, critically, by the application freeing or re-accepting the channel memory in its released() callback. Limiting factors: adjacent (in-radio-range) access only, a cooperative-scheduling race that must be won, and application-dependent memory handling - these reduce realistic exploitability below the raw 7.5 score.

Impact

Signals are mixed and point to a real-but-conditional risk rather than an urgent mass-exploitation threat. The CVSS 3.1 vector (AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H, base 7.5) describes an adjacent (Bluetooth radio range), unauthenticated attack with HIGH attack complexity and full C/I/A impact - the HIGH complexity is well-justified because exploitation depends on winning a race between the system workqueue and the higher-priority Bluetooth RX workqueue AND on application-specific behavior (freeing or re-accepting the channel from the released() callback). There is no CISA KEV listing and no EPSS score provided, and no public exploit code is referenced, so there is no evidence of active or opportunistic exploitation. The adjacency requirement (AV:A, not AV:N) and the race-plus-application-dependency conditions substantially limit real-world exploitability despite the HIGH-severity C/I/A claim, so this reads as a credible defect to patch on affected builds rather than a drop-everything emergency. A notable nuance: whether the flaw yields code execution/disclosure or merely a workqueue-corruption denial of service depends heavily on how the downstream application manages channel memory - the vulnerability is in the Zephyr host, but impact is co-determined by application code.

Exploit ScenarioDerived

A remote, unauthenticated peer within Bluetooth range establishes an L2CAP connection-oriented channel on a dynamic PSM (0x0080-0x00FF), then sends a data K-frame immediately followed by an L2CAP Disconnect Request. The K-frame queues rx_work on the system workqueue that cannot run before teardown completes, so after the released() callback the application frees or re-accepts the channel while the workqueue still holds a dangling reference, leading to a use-after-free dereference of a list node and handler pointer, workqueue list corruption, or a teardown race. No public exploit code is identified at time of analysis; successful exploitation also requires winning the cooperative-scheduling race and application memory handling that frees/reuses the channel.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.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 11, 2026

Use-after-free in the Zephyr RTOS Bluetooth LE host lets an adjacent, unauthenticated peer with an established L2CAP connection-oriented channel (CoC) on a dynamic PSM (0x0080-0x00FF) leave a pending work item pointing into channel memory that the application has already been told it may free. The attacker only needs to send a data K-frame immediately followed by an L2CAP Disconnect Request; because the Bluetooth RX workqueue outranks the system workqueue under cooperative scheduling, the deferred rx_work item cannot run before teardown, so the stack's released() callback fires while the system workqueue still holds a reference, producing memory corruption, information disclosure, or a corrupted workqueue pending list. The vector (CVSS:3.1/AV:A/AC:H/PR:N/UI:N) reflects adjacent-only access, no privileges, and a scheduling race that must be won, and realistic exploitability is further reduced by the requirement that the application free or re-accept the channel in released(). No public exploit code has been identified at time of analysis and the flaw is not in CISA KEV; an upstream fix commit is available.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - the corrective commit is 22896cb8d6f23feffe4b637119fb3e974ac3bed8 (https://github.com/zephyrproject-rtos/zephyr/commit/22896cb8d6f23feffe4b637119fb3e974ac3bed8), described in GHSA-6gp4-cwf7-2vp8 (https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-6gp4-cwf7-2vp8), so integrators should update their Zephyr tree to a revision that contains it and re-flash affected devices. Where immediate updating is not possible, the most effective compensating control is to disable CONFIG_BT_L2CAP_DYNAMIC_CHANNEL, which removes dynamic-PSM CoC support entirely and eliminates the vulnerable code path, at the cost of breaking any profile that relies on dynamically assigned PSMs; builds that only use SIG-assigned PSMs (EATT 0x0027, OTS 0x0025) already take the inline receive path and need no change. Applications can also reduce exposure by not immediately freeing or re-accepting a channel object inside the released() callback - quarantining or delaying reuse of that memory narrows the window in which the orphaned work item can dereference reused memory - although this treats the symptom rather than the root cause and still allows the concurrent teardown race against le_chan->_sdu and chan->conn. Because the attack is adjacent (in-radio-range) and requires a completed CoC channel setup on a dynamic PSM, requiring pairing/authentication before accepting dynamic-PSM L2CAP CoC connections and limiting radio-range exposure of vulnerable devices materially lower the practical risk while patching proceeds.

Affected VersionsENISA

Zephyr 2.0.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 Zephyr Bluetooth LE host defers received L2CAP connection-oriented channel data through a struct k_work embedded in the channel object (le_chan->rx_work, whose handler is l2cap_rx_process()) whenever the channel uses a dynamic PSM in the 0x0080-0x00FF range; SIG-assigned PSMs such as EATT (0x0027) and OTS (0x0025) take an inline receive path and are unaffected, as are builds without CONFIG_BT_L2CAP_DYNAMIC_CHANNEL. This is a classic CWE-416 use-after-free driven by lifecycle asymmetry: l2cap_chan_destroy() in subsys/bluetooth/host/l2cap.c cancels the retransmission-timeout work and drains the RX FIFO but never cancels rx_work. In the default configuration (CONFIG_BT_RECV_WORKQ_BT), HCI receive processing runs on the dedicated Bluetooth RX workqueue at K_PRIO_COOP(CONFIG_BT_RX_PRIO) while rx_work is submitted to the system workqueue at CONFIG_SYSTEM_WORKQUEUE_PRIORITY; because both are cooperative-priority threads, the lower-priority system workqueue item cannot be scheduled before the following Disconnect Request is handled in le_disconn_req() -> l2cap_chan_del() -> l2cap_chan_destroy(). The stack then invokes released(), which the API documents as meaning the stack has dropped every reference and the application may free the channel - but the system workqueue still holds the item in its pending list. If the memory is freed and reallocated, the workqueue later dereferences a list node and a handler function pointer read from reused memory; if the object is re-accepted for a later connection, l2cap_chan_add() calls k_work_init() on a still-enqueued item, corrupting the workqueue's pending list so unrelated work items are dropped or the queue spins on a looped list. A related variant lets l2cap_rx_process() run concurrently with teardown, racing the net_buf unref of le_chan->_sdu and the clearing of chan->conn. The upstream fix is structural rather than local: it routes the channel RX work onto the Bluetooth workqueue - the same context in which every teardown path runs, so non-blocking cancellations are guaranteed to be effective - and adds an explicit k_work_cancel() of le_chan->rx_work in l2cap_chan_destroy() so no reference to the channel can survive the released() callback. The commit also converts a wide set of host work items (adv, att, conn, gatt, id) from k_work_* to bt_work_* variants to make workqueue affinity consistent across the host.

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 7.5 HIGH
AV:A/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.5 HIGH

Bluetooth radio range gives AV:A; the cooperative-scheduling race plus app-dependent free/reuse justifies AC:H; no pairing/auth needed so PR:N; use-after-free enables full C/I/A impact.

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

Primary rating from Vendor (zephyr).

CVSS VectorVendor: zephyr

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

DescriptionCVE.org

The Bluetooth LE host queues received L2CAP connection-oriented channel (CoC) data for deferred processing through a struct k_work embedded in the channel object (le_chan->rx_work, handler l2cap_rx_process()) whenever the channel uses a dynamic PSM (0x0080-0x00FF). Channel teardown in l2cap_chan_destroy() in subsys/bluetooth/host/l2cap.c cancels the retransmission-timeout work and drains the RX FIFO, but never cancels rx_work. Because that work item was submitted to the system workqueue while HCI receive processing runs on the dedicated Bluetooth RX workqueue (CONFIG_BT_RECV_WORKQ_BT, the default), a queued rx_work item can outlive the channel it points into.

A remote, unauthenticated peer with an established CoC channel triggers this by sending a data K-frame immediately followed by an L2CAP Disconnect Request. The K-frame submits rx_work to the system workqueue; because both workqueue threads are cooperative and the Bluetooth RX workqueue runs at the higher priority (K_PRIO_COOP(CONFIG_BT_RX_PRIO) versus CONFIG_SYSTEM_WORKQUEUE_PRIORITY), the pending item cannot run before the following Disconnect Request is processed in le_disconn_req() -> l2cap_chan_del() -> l2cap_chan_destroy(). The stack then invokes the released() callback, which the API documents as meaning the stack has dropped all references and the application may free the channel memory.

The application therefore frees or re-accepts into an object that the system workqueue still holds in its pending list. If the memory is freed and reallocated, the workqueue later dereferences a list node and a handler function pointer read from reused memory; if the object is re-used for a later connection, l2cap_chan_add() calls k_work_init() on a still-enqueued work item, corrupting the workqueue's pending list so that unrelated work items are dropped or the queue spins on a looped list. A related variant lets l2cap_rx_process() run concurrently with teardown, racing the net_buf unref of le_chan->_sdu and the clearing of chan->conn.

The fix routes the channel RX work to the Bluetooth workqueue - the same context in which every teardown path runs - and adds an explicit k_work_cancel() of le_chan->rx_work in l2cap_chan_destroy(), so no reference to the channel survives the released() callback. Configurations without CONFIG_BT_L2CAP_DYNAMIC_CHANNEL, or that only use SIG-assigned PSMs (EATT 0x0027, OTS 0x0025) which take the inline receive path, are not affected.

Technical POC Analysis

CWE-416 (use-after-free) in the Zephyr Bluetooth host, subsys/bluetooth/host/l2cap.c.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

A high-severity memory-safety flaw in the Zephyr RTOS Bluetooth Low Energy host affects any product built on that stack, allowing a nearby attacker within radio range to corrupt memory or leak data on devices that accept dynamic L2CAP channel-oriented connections. Because Zephyr is widely embedded in IoT, medical, industrial, and consumer endpoints, leadership should treat this as a fleet-wide firmware exposure rather than a single-product defect, with remediation dependent on downstream vendors shipping updated images. The practical risk is bounded by the attacker needing physical proximity and a narrow scheduling race, but the affected population is large and patching is slow.

Business Impact: Medium
Compensating Controls

Patch available per vendor advisory. Until firmware can be rebuilt and distributed, interim mitigations include disabling or restricting dynamic L2CAP CoC PSMs (0x0080-0x00FF), limiting Bluetooth LE discoverable/connectable periods, reducing physical proximity exposure of affected devices, and auditing released() callbacks so channels are not freed or re-accepted while teardown is still pending on the system workqueue.

Threat Intelligence Overview

EPSS Score
0.2%
Top 93% exploitable
Prevalence
Medium
Zephyr is a common embedded/IoT RTOS; BT CoC dynamic-channel feature narrows footprint
Social Media
3
Sightings
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 HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Medium

Priority Score

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

Attack Technique

Use-after-free vulnerabilities occur when a program continues to access memory through a pointer after that memory has been deallocated.

Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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