Skip to main content

Zephyr RTOS CVE-2026-19940

| EUVDEUVD-2026-98925 MEDIUM
Use After Free (CWE-416)
2026-10-13 zephyr
6.5
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Within Bluetooth radio range of HFP-AG device
  2. Delivery
    Send AT+CIND? to arm 10s ongoing-call timer
  3. Exploit
    Disconnect then immediately re-open RFCOMM DLC on same ACL slot
  4. Execution
    Zeroed k_work re-init corrupts kernel timeout list
  5. Impact
    System fault or hang (denial of service)

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

Exploitation requires the device to be built with CONFIG_BT_HFP_AG enabled (a profile the Zephyr project marks experimental and ships DISABLED by default) AND the application must implement the asynchronous get_ongoing_call callback, which is what schedules the vulnerable ag->ongoing_call_work timer (default CONFIG_BT_HFP_AG_GET_ONGOING_CALL_TIMEOUT 10000 ms). The attacker must be within Bluetooth radio range (AV:A) acting as a Hands-Free unit, and must send AT+CIND? during SLC establishment, then tear down and re-open the HFP RFCOMM DLC on the same ACL link within the ~10-second window before the application answers via bt_hfp_ag_ongoing_calls(); the same connection-index pool slot is reused deterministically, so no race-winning luck is needed. Limiting factors: experimental non-default profile, dependency on the optional callback being implemented, and physical Bluetooth proximity - these sharply reduce the exposed population below what the 6.5 score alone implies.

Impact

This is a genuine but conditional denial-of-service, not a top-tier priority. The CVSS 3.1 vector (AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, base 6.5) correctly reflects an adjacent-network (Bluetooth radio range) attack with low complexity, no privileges, and no user interaction, where the only impact is availability (A:H) - consistent with the description's conclusion that no attacker-controlled data is written and code execution is not achievable. There is no CISA KEV listing and no public exploit identified at time of analysis, so exploitation status is theoretical despite a working vendor-confirmed root-cause analysis and patch. The dominant risk-limiting signal overrides the CVSS score: the vulnerable code path exists only in builds with CONFIG_BT_HFP_AG, which the project marks experimental and ships disabled by default, AND only when the application implements the asynchronous get_ongoing_call callback. The 'RCE' tag in the input directly contradicts the description and should be disregarded - this is a CWE-416 use-after-free that manifests as kernel timeout-list corruption (NULL-pointer writes / list cycle walked with interrupts locked), yielding a hang/fault, not memory corruption an attacker can steer. Net: a real, radio-reachable DoS for the narrow set of devices that both enable an experimental profile and wire up the optional callback, but low real-world exposure for the Zephyr population at large.

Exploit ScenarioDerived

An attacker within Bluetooth radio range of a Zephyr device acting as a Hands-Free Profile Audio Gateway sends AT+CIND? during Service Level Connection setup, causing the AG to arm a 10-second get_ongoing_call timer, then disconnects the HFP RFCOMM DLC and immediately re-opens it on the same ACL link before the timer fires. The re-creation path zeroes and re-initialises a k_work_delayable whose timeout node is still linked in the kernel list, corrupting it and faulting or hanging the entire system. No public exploit code is identified at time of analysis, but the vendor advisory describes a deterministic, remotely-driven trigger sequence.

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

A use-after-free in Zephyr RTOS's Bluetooth Classic Hands-Free Profile Audio Gateway (HFP AG) lets an adjacent Bluetooth peer crash or hang the entire device, producing a denial of service. The flaw is reachable only in builds where CONFIG_BT_HFP_AG is enabled (a profile Zephyr marks experimental and ships disabled by default) and where the application implements the optional asynchronous get_ongoing_call callback; a Hands-Free unit sends AT+CIND? during Service Level Connection setup, then tears down and re-opens the HFP RFCOMM DLC on the same ACL link within the ~10-second timeout window, deterministically reusing the same static pool slot while ag->ongoing_call_work is still armed and linked into the kernel timeout list. The repeated memset and k_work_init_delayable corrupt the kernel timeout dlist under an interrupts-locked announce loop, causing a fault or system hang; no attacker-controlled data is written, so code execution is not demonstrated. No public exploit code or in-the-wild exploitation was identified at time of analysis, and the exposed population is sharply limited by the non-default experimental configuration and physical Bluetooth proximity.

RemediationAI

Upstream fix available (PR/commit); released patched version not independently confirmed - apply commit 204c36b896fe8d68ca3cb3d00216f245f91d14be in subsys/bluetooth/host/classic/hfp_ag.c (referenced at https://github.com/zephyrproject-rtos/zephyr/commit/204c36b896fe8d68ca3cb3d00216f245f91d14be and described in https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-v47w-8959-rx62), which adds k_work_cancel_delayable(&ag->ongoing_call_work) and k_work_cancel(&ag->slc_work) to hfp_ag_disconnected() so no still-linked timeout node survives into the next hfp_ag_create() on the same pool slot. Until that commit is in your tree, disable CONFIG_BT_HFP_AG entirely - the profile is experimental and off by default, so this restores the non-exposed configuration at the cost of removing HFP Audio Gateway capability. If HFP AG must stay enabled, do not implement the asynchronous get_ongoing_call callback, which is what arms ag->ongoing_call_work and is the sole precondition the attacker needs; the trade-off is loss of asynchronous ongoing-call reporting to the application, and this is a configuration-level mitigation rather than a code fix. Reducing the CONFIG_BT_HFP_AG_GET_ONGOING_CALL_TIMEOUT window narrows, but does not eliminate, the reconnect window and is not a substitute for patching.

Affected VersionsENISA

Zephyr 4.2.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

Zephyr's HFP Audio Gateway keeps its struct bt_hfp_ag instances in a static pool indexed by ACL connection index. On link teardown hfp_ag_disconnected() cancels ag->tx_work and the per-call work items and clears ag->acl_conn, which is the pool slot's only occupancy indicator, but it does not cancel ag->ongoing_call_work or ag->slc_work. When the next connection lands on the same slot, hfp_ag_create() tests only ag->acl_conn, then runs memset(ag, 0, sizeof(struct bt_hfp_ag)) and k_work_init_delayable() over a k_work_delayable whose struct _timeout node is still linked into the kernel timeout list - leaving the kernel with a reference to a node whose prev/next pointers have just been zeroed. Because hfp_ag_accept() calls hfp_ag_create() directly from the RFCOMM server accept path, the remote peer drives both teardown and re-creation, and the same connection index is reused deterministically so no race-winning is required. The work item is armed purely at the peer's request: AT+CIND? during SLC establishment with the application's asynchronous get_ongoing_call callback implemented schedules the work for CONFIG_BT_HFP_AG_GET_ONGOING_CALL_TIMEOUT milliseconds (default 10000), and the timer is cancelled only if the application answers in time via bt_hfp_ag_ongoing_calls(). The resulting class is CWE-416 (use after free) manifesting as corruption of the kernel's timeout dlist: sys_dlist_remove() on the zeroed node writes through NULL pointers from the clock-announce path, and rescheduling the re-initialised work re-inserts a node the list already references, creating a cycle that the announce loop walks with interrupts locked. The outcome is a fault or hang of the whole system with no attacker-controlled write, i.e. denial of service, not memory-corruption-to-code-execution.

Know when Zephyr 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.5 MEDIUM
AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
vuln.today AI 6.5 MEDIUM

Reachable from Bluetooth range (AV:A) via a deterministic slot-reuse sequence (AC:L) with no pairing/privilege or user interaction stated; impact is system hang only (A:H, C/I:N).

3.1 AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:A/AC:L/AT:N/PR:N/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
None
User Interaction
None
Scope
Unchanged
Confidentiality
None
Integrity
None
Availability
High

DescriptionCVE.org

The Bluetooth Classic Hands-Free Profile Audio Gateway implementation in subsys/bluetooth/host/classic/hfp_ag.c keeps its struct bt_hfp_ag objects in a static pool indexed by ACL connection index. On link teardown, hfp_ag_disconnected() cancels ag->tx_work and the per-call work items and then clears ag->acl_conn, which marks the pool slot as free - but it leaves ag->ongoing_call_work (and ag->slc_work) untouched. The next connection that lands on the same slot enters hfp_ag_create(), whose only occupancy test is ag->acl_conn, and immediately executes memset(ag, 0, sizeof(struct bt_hfp_ag)) followed by k_work_init_delayable(). Zeroing and re-initialising a k_work_delayable whose struct _timeout node is still linked into the kernel timeout list leaves the kernel holding a reference to a node with NULL prev/next links.

ag->ongoing_call_work is armed by the remote peer: when a Hands-Free unit sends AT+CIND? during Service Level Connection establishment and the application provides the asynchronous get_ongoing_call callback, the AG schedules the work for CONFIG_BT_HFP_AG_GET_ONGOING_CALL_TIMEOUT milliseconds (default 10000). The timer is cancelled only if the application answers in time via bt_hfp_ag_ongoing_calls(). A peer that sends AT+CIND?, then disconnects the HFP RFCOMM DLC, then immediately re-opens it on the same ACL link, reuses the same pool slot deterministically while the timeout is still pending - the AG's RFCOMM server accept path (hfp_ag_accept()) calls hfp_ag_create() directly, so the remote side drives both teardown and re-creation.

The result is corruption of the kernel's timeout list: sys_dlist_remove() on the zeroed node performs writes through NULL pointers from the clock-announce path, and rescheduling the re-initialised work re-inserts a node the list already references, creating a cycle that the announce loop walks with interrupts locked. The observable impact is a fault or hang of the whole system, i.e. a denial of service reachable from Bluetooth radio range; no attacker-controlled data is written, so this does not by itself yield code execution. Exposure is limited to builds with CONFIG_BT_HFP_AG (marked experimental and disabled by default) whose application implements the asynchronous get_ongoing_call callback.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
popular embedded/IoT RTOS, but vulnerable HFP-AG profile experimental and off by default
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

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.

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

More in Zephyr

View all
CVE-2023-4260 CRITICAL POC
10.0 Sep 27

Potential off-by-one buffer overflow vulnerability in the Zephyr fuse file system. Rated critical severity (CVSS 10.0),

CVE-2026-1678 CRITICAL POC
9.8 Mar 05

An out-of-bounds write in the Zephyr RTOS DNS resolver (dns_unpack_name()) lets a crafted DNS response corrupt memory on

CVE-2023-5055 CRITICAL POC
9.8 Nov 21

Possible variant of CVE-2021-3434 in function le_ecred_reconf_req. Rated critical severity (CVSS 9.8), this vulnerabilit

CVE-2023-4257 CRITICAL POC
9.8 Oct 13

Unchecked user input length in /subsys/net/l2/wifi/wifi_shell.c can cause buffer overflows. Rated critical severity (CVS

CVE-2023-3725 CRITICAL POC
9.8 Oct 06

Potential buffer overflow vulnerability in the Zephyr CAN bus subsystem. Rated critical severity (CVSS 9.8), this vulner

CVE-2021-3323 CRITICAL POC
9.8 Oct 12

Integer Underflow in 6LoWPAN IPHC Header Uncompression in Zephyr. Rated critical severity (CVSS 9.8), this vulnerability

CVE-2021-3625 CRITICAL POC
9.8 Oct 05

Buffer overflow in Zephyr USB DFU DNLOAD. Rated critical severity (CVSS 9.8), this vulnerability is remotely exploitable

CVE-2021-3319 CRITICAL POC
9.8 Oct 05

DOS: Incorrect 802154 Frame Validation for Omitted Source / Dest Addresses. Rated critical severity (CVSS 9.8), this vul

CVE-2018-1000800 CRITICAL POC
9.8 Sep 06

zephyr-rtos version 1.12.0 contains a NULL base pointer reference vulnerability in sys_ring_buf_put(), sys_ring_buf_get(

CVE-2023-4264 CRITICAL POC
9.6 Sep 27

Potential buffer overflow vulnerabilities n the Zephyr Bluetooth subsystem. Rated critical severity (CVSS 9.6), this vul

CVE-2024-1638 CRITICAL POC
9.1 Feb 19

The documentation specifies that the BT_GATT_PERM_READ_LESC and BT_GATT_PERM_WRITE_LESC defines for a Bluetooth characte

CVE-2023-5753 HIGH POC
8.8 Oct 25

Potential buffer overflows in the Bluetooth subsystem due to asserts being disabled in /subsys/bluetooth/host/hci_core.c

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