CVE-2026-82388
Received Received - Intake

Memory Corruption in Zephyr RTOS Bluetooth HFP

Vulnerability report for CVE-2026-82388, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-10-26

Last updated on: 2026-10-26

Assigner: Zephyr Project

Description

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.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-10-26
Last Modified
2026-10-26
Generated
2026-10-26
AI Q&A
2026-10-26
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
zephyrproject zephyr 4.4.0

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-416 The product reuses or references memory after it has been freed. At some point afterward, the memory may be allocated again and saved in another pointer, while the original pointer references a location somewhere within the new allocation. Any operations using the original pointer are no longer valid because the memory "belongs" to the code that operates on the new pointer.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability in Zephyr RTOS's Bluetooth Classic stack occurs when a failed RFCOMM connection leads to improper cleanup of an HFP Hands-Free object. The function bt_hfp_hf_connect() allocates an object and starts SDP discovery before attempting RFCOMM connection. If RFCOMM fails, memset() wipes the entire object while SDP discovery is still active, corrupting SDP client's request list and work queue. This leaves dangling references causing crashes or hangs in the Bluetooth host thread.

Detection Guidance

This vulnerability is specific to Zephyr RTOS with Bluetooth Classic and HFP Hands-Free Profile enabled. Detection requires checking if your system runs affected Zephyr versions (4.4.0 to 4.4.2) with CONFIG_BT_CLASSIC and CONFIG_BT_HFP_HF enabled. No direct network commands detect this, but system logs may show Bluetooth host crashes or hangs during HFP connection attempts.

Impact Analysis

The vulnerability can cause denial of service by crashing or hanging the Bluetooth host thread. An attacker can exploit it by providing invalid RFCOMM channels or controlling connection timing, leading to system instability. The impact is limited to systems using Zephyr RTOS with Bluetooth Classic and HFP Hands-Free Profile enabled.

Mitigation Strategies
  • Upgrade Zephyr RTOS to version 4.5.0 or later where the fix is implemented.
  • Disable CONFIG_BT_CLASSIC and CONFIG_BT_HFP_HF if Bluetooth Classic HFP functionality is not required.
  • Monitor Bluetooth host logs for crashes or hangs during HFP connection attempts as potential indicators of exploitation.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-82388. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart