Skip to main content

Zephyr Bluetooth Host CVE-2026-85034

| EUVDEUVD-2026-115822 MEDIUM
Out-of-bounds Write (CWE-787)
2026-11-03 zephyr
6.7
CVSS 3.1 · Vendor: zephyr
View

Attack ChainAIDerived

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

  1. Access
    Act as GATT server victim connects to
  2. Delivery
    Victim subscribes to notified handle
  3. Exploit
    Send notification value over 512 octets
  4. Execution
    Overflow 512-byte att_buf via net_buf_simple_add_mem
  5. Persist
    Corrupt adjacent net_buf_simple data/len/size fields
  6. Impact
    Long-read accumulation writes attacker-controlled bytes

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Bounds checking, write limits
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: (1) Bluetooth radio proximity (AV:A); (2) the victim device has already connected to and subscribed to the attacker's GATT server - i.e. a malicious, spoofed or compromised server on a subscribed handle; and (3) a non-default build whose negotiated ATT MTU exceeds 515 octets, meaning CONFIG_BT_L2CAP_TX_MTU and CONFIG_BT_BUF_ACL_RX_SIZE are raised for full-length attribute support - the shipped defaults (27/69/70/200/265) are too small to reach the overflow. The concrete out-of-bounds write is scoped to a subscriber sizing its buffer to the 512-octet spec limit: the in-tree LE Audio unicast client (unicast_client_ep_notify) and BAP Broadcast Assistant (notify_handler), plus any out-of-tree spec-sized subscriber; other in-tree subscribers (tbs_client, mcc) clamp and are not affected. CONFIG_NET_BUF_HARDENING is off by default, so production builds perform the copy rather than asserting. Limiting factors: adjacency, an established subscription relationship, and the atypical high-MTU configuration all substantially narrow real-world exposure below the raw CWE-787 severity.

Impact

This is a genuine memory-corruption flaw but a conditional, lower-tier priority rather than a drop-everything emergency, and the signals are consistent rather than conflicting. The CVSS 3.1 vector (AV:A/AC:H/PR:L/UI:N/S:U/C:L/I:H/A:H, 6.7 Medium) already encodes the two biggest limiters: AV:A means the attacker must be within Bluetooth radio range, and AC:H reflects that a concrete out-of-bounds write only occurs on non-default builds whose ATT MTU exceeds 515 octets (CONFIG_BT_L2CAP_TX_MTU and CONFIG_BT_BUF_ACL_RX_SIZE raised for full-length attribute support) - the shipped Zephyr defaults (27/69/70/200/265) are far smaller and are not exploitable into the overflow. PR:L reflects that the attacker must already be a peer the victim has connected to and subscribed to (a malicious, spoofed or compromised GATT server). No EPSS score, KEV listing, or public exploit is present in the input, so there is no evidence of active exploitation; the only exploitation framework signal is the vendor's own 'this_month' priority label, which aligns with a serious-but-not-critical, config-dependent bug. The vuln.today priority of this_month and the Medium CVSS agree. Net: real and worth patching on a normal cycle, but realistic risk is bounded to proximity, an established subscription, and an atypical high-MTU LE Audio (or out-of-tree 512-byte-subscriber) build.

Exploit ScenarioDerived

A device running a vulnerable Zephyr LE Audio unicast client (or BAP Broadcast Assistant), built with an ATT MTU above 515 octets, connects to and subscribes to a GATT server that is attacker-controlled, spoofed, or compromised and within Bluetooth range. The malicious server sends a Handle Value Notification/Indication whose value exceeds 512 octets on the subscribed handle; unicast_client_ep_notify() copies it into the 512-byte att_buf with net_buf_simple_add_mem() and no tailroom check, overflowing into the adjacent net_buf_simple fields. No public exploit code is present in the supplied data; AV:A and AC:H mean the attack needs radio proximity, an established subscription, and a non-default large-MTU build.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available

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

Alert me

AnalysisAIv1 – Nov 03, 2026

An out-of-bounds write in the Zephyr Bluetooth host's GATT client allows a malicious, spoofed or compromised GATT server within radio range to hand a subscribed client more than the 512-octet maximum attribute length defined by the Core Specification, corrupting memory in subscribers that size their receive buffers to that documented limit. Affected releases are Zephyr 3.4.0 through 4.3.1 and 4.4.0 through 4.4.x (fixed in 4.3.2 and 4.5.0), specifically the in-tree LE Audio unicast client and BAP Broadcast Assistant as well as any out-of-tree subscriber that assumes the 512-octet ceiling. Practical exploitation is heavily conditional: the device must already be connected and subscribed to the attacker's handle, and the build must negotiate an ATT MTU above 515 octets, which the shipped defaults (27/69/70/200/265) never reach; the assessed vector (PR:L) reflects that established subscription relationship rather than classic credential authentication, and no public exploit has been identified at time of analysis.

RemediationAI

Vendor-released patch: Zephyr 4.3.2 and 4.5.0, which add a length > BT_ATT_MAX_ATTRIBUTE_LEN rejection in call_notify_cb_and_maybe_unsubscribe() in subsys/bluetooth/host/gatt.c before any subscriber callback runs, covering notification, indication and each multiple-notification tuple (remaining tuples are still delivered and oversized indications are still confirmed). The fix is merged as commit 64b1e7447856f635ee8bce9eab7c615da78133b8 on main (PR #117275) and backported via PR #118962 (v4.4-branch), #118961 (v4.3-branch) and #118960 (v3.7-branch); apply the corresponding branch update or cherry-pick the commit. Note the vendor positions this host-side bound as the central mitigation for four related sink-side advisories (GHSA-vx38-37v3-h369, GHSA-qpp3-cwhw-cw6h, GHSA-pmp8-48gp-7hw4, GHSA-73c7-3rh7-v5p9), which remain valid and warrant independent subscriber-side length checks because fixing only the sinks would leave out-of-tree subscribers exposed and fixing only the host would leave the sinks fragile if the bound is ever relaxed. Where an immediate upgrade is not possible, the overflow cannot be reached on builds whose CONFIG_BT_L2CAP_TX_MTU and CONFIG_BT_BUF_ACL_RX_SIZE keep the negotiated ATT MTU at or below 515 octets, so keeping those settings at the shipped defaults (27/69/70/200/265) removes the trigger at the cost of giving up full-length attribute support; alternatively enabling CONFIG_NET_BUF_HARDENING converts the unchecked net_buf_simple_add_mem() copy into an assertion failure, trading a memory-corruption path for a controlled crash, and out-of-tree subscribers can add an explicit net_buf_simple_tailroom() check mirroring the long-read path, at the cost of dropping oversized notifications themselves. Full technical details and patch links are at https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-47vq-phhp-rhxq.

Affected VersionsENISA

Zephyr 4.4.0 <4.5.0
Zephyr 3.4.0 <4.3.2

Affected Packages

euvd zephyr fix: 4.3.2, 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 sits in the GATT client of the Zephyr Bluetooth host (subsys/bluetooth/host), where bt_att_recv() in att.c validates only a minimum PDU length for Handle Value Notification, Indication and Multiple Handle Value Notification and never enforces the negotiated ATT MTU; the fixed ATT L2CAP channel in l2cap.c likewise applies no rx.mtu check, so the sole ceiling on the delivered value is the ACL reassembly buffer CONFIG_BT_BUF_ACL_RX_SIZE (BT_L2CAP_RX_MTU = CONFIG_BT_BUF_ACL_RX_SIZE - BT_L2CAP_HDR_SIZE). Because att_notify(), att_indicate() and att_notify_mult() forward buf->len verbatim to call_notify_cb_and_maybe_unsubscribe() in gatt.c, which dispatches to every bt_gatt_subscribe_params::notify callback with no upper bound, any subscriber that trusts BT_ATT_MAX_ATTRIBUTE_LEN (512, include/zephyr/bluetooth/att.h) can be overrun - a CWE-787 write rooted in a missing length ceiling rather than in any single sink. The concrete corruption is in the LE Audio unicast client: unicast_client_ep_notify() in bap_unicast_client.c copies the notification into the 512-byte att_buf of struct unicast_client with net_buf_simple_add_mem() and no tailroom check whenever length equals bt_audio_get_max_ntf_size(conn) (negotiated ATT MTU minus three), and notify_handler() in bap_broadcast_assistant.c has the same shape. att_buf is immediately followed in uni_cli_insts[] by a struct net_buf_simple, so peer-controlled bytes overwrite its data, __buf, len and size fields, and the subsequent long-read accumulation uses that clobbered descriptor as its destination - turning a linear overflow into a controlled write. The copy is not caught at runtime because net_buf_simple_add() only issues __ASSERT_NO_MSG() on short tailroom unless CONFIG_NET_BUF_HARDENING is enabled, and that Kconfig has no default, so ordinary production builds perform it; the sibling long-read path in the same file does check net_buf_simple_tailroom(buf) < length, confirming the notify path is the outlier. Other in-tree subscribers such as tbs_client and mcc clamp lengths and are unaffected.

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

AV:A for Bluetooth range; AC:H because the write needs a non-default >515-octet ATT MTU build; PR:L as the device must have an established subscription to the attacker's server; I:H/A:H for the controlled OOB write, C:L.

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

DescriptionCVE.org

The Bluetooth host's GATT client passed the value of a received Handle Value Notification, Handle Value Indication or Multiple Handle Value Notification to bt_gatt_subscribe_params::notify callbacks using only the length derived from the received ATT PDU. bt_att_recv() in subsys/bluetooth/host/att.c validates only a minimum PDU length and does not enforce the negotiated ATT MTU, and the fixed ATT L2CAP channel in subsys/bluetooth/host/l2cap.c applies no rx.mtu check either, so the only ceiling was the ACL reassembly buffer CONFIG_BT_BUF_ACL_RX_SIZE. Values longer than the 512-octet maximum attribute length defined by the Bluetooth Core Specification (Vol 3, Part F, Section 3.2.9) could therefore be handed to subscribers that size their buffers to that documented limit.

A remote peer that a device has connected and subscribed to - a malicious, spoofed or compromised GATT server within radio range - triggers the flaw by sending a notification or indication whose value exceeds 512 octets on a subscribed handle. In the LE Audio unicast client this reaches a concrete out-of-bounds write: unicast_client_ep_notify() in subsys/bluetooth/audio/bap_unicast_client.c copies the notification into the 512-byte att_buf of struct unicast_client with net_buf_simple_add_mem() and no tailroom check whenever length equals bt_audio_get_max_ntf_size(), i.e. the negotiated ATT MTU minus three. notify_handler() in subsys/bluetooth/audio/bap_broadcast_assistant.c has the same shape. Reaching the overflow requires a build whose ATT MTU exceeds 515 octets (CONFIG_BT_L2CAP_TX_MTU and CONFIG_BT_BUF_ACL_RX_SIZE set for full-length attribute support); the shipped defaults are far smaller.

The overflow writes peer-controlled bytes past att_buf directly over the adjacent struct net_buf_simple net_buf - its data, __buf, len and size fields - which the subsequent long-read accumulation then uses as its destination, turning a small linear overflow into a controlled write. net_buf_simple_add() only asserts on insufficient tailroom unless CONFIG_NET_BUF_HARDENING is enabled, and that option is disabled by default, so ordinary production builds perform the copy. Beyond the in-tree LE Audio clients, any application subscriber that sized its receive buffer to the specification's 512-octet limit was exposed to the same overflow.

The fix rejects notification, indication and multiple-notification values longer than BT_ATT_MAX_ATTRIBUTE_LEN in call_notify_cb_and_maybe_unsubscribe() in subsys/bluetooth/host/gatt.c before any subscriber callback is invoked, so no subscriber can be handed more than the specified maximum. Remaining tuples of a multiple handle value notification are still delivered and oversized indications are still confirmed.

Threat Intelligence Overview

Prevalence
Medium
popular embedded/IoT RTOS, but vulnerable path needs non-default LE Audio build
Data Quality
3 sources
Confidence: Low

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 N/A
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

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

Attack Technique

A buffer overflow occurs when a program writes more data to a memory buffer than it was allocated to hold, causing the excess data to spill into adjacent memory regions.

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.

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-118603 HIGH
8.0 Oct 28

A stack-based buffer overflow in the vCard parser of the Alpine iLX-F511 in-dash multimedia receiver (build 7.0.0000) le

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