Skip to main content

Zephyr RTOS EUVDEUVD-2026-109974

| CVE-2026-82388 MEDIUM
Use After Free (CWE-416)
2026-10-26 zephyr
5.3
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Connect within Bluetooth range as HFP AG
  2. Delivery
    Advertise SDP record with out-of-range RFCOMM channel
  3. Exploit
    Trigger failed bt_rfcomm_dlc_connect and live-object wipe
  4. Execution
    NULL pool/func deref or self-referential SDP list
  5. Impact
    Bluetooth host thread fault or unrecoverable hang

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

Only builds with CONFIG_BT_CLASSIC and CONFIG_BT_HFP_HF enabled are affected, on Zephyr 4.4.0 through 4.4.2, with the device acting as an HFP Hands-Free unit. The attacker must be within Bluetooth (Adjacent) range and act as a remote Audio Gateway. The failure branch is driven either by advertising an HFP AG SDP record whose RFCOMM channel is outside 1-30 (bt_sdp_get_proto_param() and bt_hfp_hf_connect() perform no range check, so bt_rfcomm_dlc_connect() returns -EINVAL), or by controlling connection timing so the RFCOMM session is in BT_RFCOMM_STATE_DISCONNECTING or the ACL is dropped between object creation and the RFCOMM call. A key LIMITING factor: exploitation requires application code that passes the peer-discovered RFCOMM channel into bt_hfp_hf_connect() - the only in-tree caller is the shell sample and no in-tree sample does this, so reachability depends on vulnerable product application code rather than any default Zephyr build.

Impact

This is a medium-severity, denial-of-service-only flaw (CVSS 5.3, CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H) whose signals point to a real but low-urgency issue rather than an emergency. Impact is limited to availability (A:H) - a fault or unrecoverable hang in the Bluetooth host thread; the stray indirect call goes through an all-zero pointer the attacker does not control, so there is no code-execution or data-exposure path (C:N/I:N). The attack vector is Adjacent (AV:A): the attacker must be within Bluetooth range and acting as, or impersonating, a remote HFP Audio Gateway. There is no CISA KEV listing and no public exploit or PoC reference in the input, so exploitation status is 'no public exploit identified at time of analysis'. No EPSS score was provided, so probabilistic exploitation likelihood cannot be weighed; this gap should be noted rather than assumed low. The vuln.today decision label is 'this_month' (not act_now/emergency), consistent with a patch-on-normal-cadence priority. A significant mitigating factor from the vendor's own evidence: the only in-tree caller of bt_hfp_hf_connect() is a shell sample, and no in-tree sample feeds a discovered RFCOMM channel, so reachability is limited to product application code that passes the peer-supplied channel without validation. PR:N honestly reflects that no local authentication is required, but real-world exposure depends on both the niche build configuration (CONFIG_BT_CLASSIC + CONFIG_BT_HFP_HF) and the presence of vulnerable application code.

Exploit ScenarioDerived

A remote Bluetooth device within range advertises an HFP Audio Gateway SDP record containing an RFCOMM channel outside the valid 1-30 range; when the Zephyr Hands-Free device reads that channel and calls bt_hfp_hf_connect(), bt_rfcomm_dlc_connect() returns -EINVAL and the pre-fix failure branch memset-wipes a still-live HFP object whose SDP discovery request remains linked in the SDP client's list. Subsequent SDP processing then dereferences a now-NULL pool pointer or calls through a NULL func pointer, faulting the Bluetooth host thread, or re-linking the zeroed node produces a self-referential list that hangs the host's list walkers. No public exploit code is identified; the same outcome is also reachable without a malformed channel when the peer controls connection 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 26, 2026

A use-after-free in the Zephyr RTOS Bluetooth Classic host lets an adjacent, unauthenticated remote Audio Gateway crash or permanently hang the Bluetooth host thread on devices running 4.4.0 through 4.4.2 as an HFP Hands-Free unit (CONFIG_BT_CLASSIC and CONFIG_BT_HFP_HF enabled). When bt_hfp_hf_connect() starts an SDP discovery and the following bt_rfcomm_dlc_connect() fails, the old code wiped the live HFP HF object with memset(), destroying a node still linked into the SDP client's request list and a possibly-queued work item; the host later dereferences the NULL pool and function pointers or walks a self-referential list. Impact is denial of service only (CVSS 5.3, AV:A/AC:H/PR:N/UI:N/C:N/I:N/A:H, CWE-416) - the stray indirect call goes through an all-zero pointer the attacker does not control, so there is no code execution. No public exploit code was identified at time of analysis, but reachability depends on product application code that feeds a peer-discovered RFCOMM channel into bt_hfp_hf_connect(); the only in-tree caller is the shell sample, which limits exposure in default builds.

RemediationAI

Upgrade to Zephyr 4.5.0 once released (the advisory's projected fixed version; the fix is merged on main but was not yet tagged at the time of the advisory, so confirm against the actual release). If a version bump is not immediately possible, apply the upstream commit https://github.com/zephyrproject-rtos/zephyr/commit/6119da5d632594131304dec85000a75dc17743d2, which is merged on main via PR #116192 and backported to the v4.4-branch via PR #118170, or cherry-pick that backport; this keeps the HFP HF object allocated with BT_HFP_HF_FLAG_RELEASING and defers release to bt_hfp_hf_discover_cb(). Where patching is not possible, the most effective compensating control is to build without CONFIG_BT_HFP_HF, which removes the Hands-Free role entirely and with it the reachable code path, at the cost of losing HFP HF functionality on that image. Additionally, product application code that feeds a peer-supplied RFCOMM channel into bt_hfp_hf_connect() should range-check the value returned by bt_sdp_get_proto_param() against channels 1-30 before calling the API, which blocks the -EINVAL trigger but does not protect against the timing-driven branches (RFCOMM session in BT_RFCOMM_STATE_DISCONNECTING or the ACL being dropped between object creation and the RFCOMM call), so it is a partial mitigation only. Vendor advisory: https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-398x-f7rq-5jj9.

Affected VersionsENISA

Zephyr 4.4.0 <4.5.0

Affected Packages

euvd zephyr fix: 4.5.0

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 a classic use-after-free (CWE-416) rooted in ownership mismatch between the Bluetooth Classic HFP Hands-Free layer and the SDP client. hfp_hf_create() allocates a per-connection struct bt_hfp_hf whose embedded sdp_param and sys_snode_t _node are handed to bt_sdp_discover(); sdp_client_discovery_start() then links that caller-owned node into session->reqs in subsys/bluetooth/host/classic/sdp.c, so the SDP client retains a raw pointer into the HF object for the lifetime of the discovery. The pre-fix failure branch for a failed bt_rfcomm_dlc_connect() did (void)memset(new_hf, 0, sizeof(*new_hf)), zeroing the still-linked list node together with the request's func, uuid and pool pointers and the hf->slc_work work item that may already be queued on the system workqueue. Synchronous teardown was not an option because bt_sdp_discover_cancel() is declared in include/zephyr/bluetooth/classic/sdp.h but has no implementation in the tree. Unchecked NULL dereferences in sdp_client_alloc_buf() (net_buf_alloc(session->param->pool, ...)) and in the SDP receive paths (session->param->func()) follow; because memset() also cleared hf->acl, the only in-use marker, the slot becomes re-allocatable while its node is still linked, so a retry or an incoming HFP connection re-appends the same node and turns session->reqs into a self-referential list that sdp_client_params_iterator() never leaves. The upstream fix introduces BT_HFP_HF_FLAG_RELEASING: the object is kept allocated and marked on the RFCOMM failure path, and bt_hfp_hf_discover_cb() releases it (clearing hf->acl and returning BT_SDP_DISCOVER_UUID_STOP) once the outstanding discovery completes, cancelling slc_work if discovery already finished.

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

Adjacent Bluetooth range (AV:A), no authentication (PR:N); AC:H reflects the timing-race path and the dependency on vulnerable app code; availability-only impact (A:H, C/I:N).

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

DescriptionCVE.org

bt_hfp_hf_connect() in subsys/bluetooth/host/classic/hfp_hf.c allocates the per-connection HFP Hands-Free object with hfp_hf_create(), which starts an SDP discovery by passing the object's embedded hf->sdp_param to bt_sdp_discover(). That call links the caller-owned parameter block into the SDP client's request list (session->reqs in subsys/bluetooth/host/classic/sdp.c). If the subsequent bt_rfcomm_dlc_connect() then failed, the affected code wiped the entire object with (void)memset(new_hf, 0, sizeof(*new_hf)) while that discovery was still outstanding, zeroing the sys_snode_t _node that is still linked in the SDP client's list along with the request's func, uuid and pool pointers, and zeroing the hf->slc_work work item that may already be queued on the system workqueue. The discovery could not be retracted instead: bt_sdp_discover_cancel() is declared in include/zephyr/bluetooth/classic/sdp.h but has no implementation.

The failing branch is reachable with peer-supplied input. The documented use of bt_hfp_hf_connect() is to pass the RFCOMM channel read out of the remote Audio Gateway's SDP record; neither bt_sdp_get_proto_param() nor bt_hfp_hf_connect() range-checks that value, so a remote device advertising an HFP AG record with an RFCOMM channel outside 1-30 makes bt_rfcomm_dlc_connect() return -EINVAL and drives the local device into the wipe. The same branch is reached without any application misuse when the remote peer controls connection timing, for example when the RFCOMM session is in BT_RFCOMM_STATE_DISCONNECTING or the ACL is dropped between object creation and the RFCOMM call.

Once the object has been wiped, the Bluetooth host continues to use it: sdp_client_alloc_buf() dereferences session->param->pool, which is now NULL, and the SDP receive paths call session->param->func() through a null function pointer, neither of which is NULL-checked. Because the wipe also clears hf->acl, the pool slot is considered free and a retry or an incoming HFP connection re-appends the same still-linked list node, turning session->reqs into a self-referential list that the host's list walkers never leave. The result is a fault or an unrecoverable hang in the Bluetooth host thread; the stray indirect call is through an all-zero pointer whose target the attacker does not control, so the practical impact is denial of service.

The fix keeps the object allocated and marks it with a new BT_HFP_HF_FLAG_RELEASING flag, letting bt_hfp_hf_discover_cb() release it once the discovery completes instead of destroying it under the SDP client. Only builds with CONFIG_BT_CLASSIC and CONFIG_BT_HFP_HF enabled are affected.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Low
Zephyr is widespread but BT Classic HFP-HF is a niche, config-gated subset
Data Quality
4 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
None
System Exposure· derived
Controlled
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
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.

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