CVE-2026-10658: Zephyr Bluetooth ISO Buffer Underflow Memory Corruption
A buffer handling flaw in Zephyr's Bluetooth ISO receive path allows an attacker with access to an established Bluetooth connection to read and write memory beyond buffer boundaries. When processing incoming ISO data packets, the code fails to validate that the packet contains enough bytes before extracting header information. An attacker on a compromised or adjacent Bluetooth device can craft malicious packets to cause out-of-bounds reads that corrupt data structures, and in multi-packet scenarios, trigger out-of-bounds writes that overwrite critical memory regions. The vulnerability affects Zephyr versions 2.6.0 through 4.4.0 when Bluetooth ISO receive functionality is enabled (typically for LE Audio applications).
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 7.1 HIGH · CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H
- Weaknesses (CWE)
- CWE-125, CWE-787
- Affected products
- 1 configuration(s)
- Published / Modified
- 2026-06-23 / 2026-07-14
NVD description (verbatim)
bt_iso_recv() in subsys/bluetooth/host/iso.c pulled the ISO SDU header (4 bytes) or, when the timestamp flag is set, the timestamped SDU header (8 bytes) from the inbound HCI ISO Data buffer via net_buf_pull_mem() without first checking buf->len. The upstream hci_iso() handler enforces buf->len == the controller-declared ISO Data_Load length, so a malicious or buggy controller / adjacent BLE peer on an established CIS/BIS can present a first-fragment (BT_ISO_START) or single (BT_ISO_SINGLE) PDU shorter than the SDU header. Because net_buf_simple_pull_mem only guards length with __ASSERT_NO_MSG (compiled out when CONFIG_ASSERT is disabled, the production default), the pull underflows buf->len (uint16_t, e.g. 0 - 8 = 0xFFF8) and advances buf->data past valid data: the subsequent reads of hdr->slen and hdr->sn are out-of-bounds reads of adjacent pool memory. For the multi-fragment (START) case the corrupted buffer is retained as iso->rx, and a following CONT/END fragment's net_buf_tailroom() guard underflows to a near-SIZE_MAX value, defeating the bounds check and causing net_buf_add_mem() to memcpy attacker-supplied fragment data far past the RX pool buffer (out-of-bounds write). The flaw affects ISO receive builds (CONFIG_BT_ISO_RX, selected by the default-off LE Audio options BT_ISO_PERIPHERAL/BT_ISO_CENTRAL/BT_ISO_SYNC_RECEIVER) and has existed since the ISO subsystem was introduced (v2.6.0) through v4.4.0. The fix adds explicit buf->len < sizeof(ts_hdr) and buf->len < sizeof(hdr) checks that drop the buffer before pulling.
2 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The bt_iso_recv() function in subsys/bluetooth/host/iso.c performs unsafe buffer operations on ISO SDU headers without pre-validation. The function uses net_buf_pull_mem() to extract a 4-byte header (or 8-byte timestamped header) from an HCI ISO Data buffer without first asserting that buf->len is sufficient. When CONFIG_ASSERT is disabled (production default), the assertion in net_buf_simple_pull_mem() is compiled out, causing the pull operation to underflow the uint16_t len field (e.g., 0 - 8 = 0xFFF8). This advances buf->data into adjacent pool memory, leading to out-of-bounds reads when the corrupted hdr->slen and hdr->sn fields are dereferenced. For multi-fragment PDUs (BT_ISO_START), the corrupted buffer is retained as iso->rx; subsequent CONT/END fragments trigger a net_buf_tailroom() underflow that bypasses the bounds check in net_buf_add_mem(), enabling memcpy of attacker-supplied data far beyond the RX pool buffer. The fix adds explicit length checks (buf->len < sizeof(hdr) and buf->len < sizeof(ts_hdr)) before pulling, dropping invalid packets.
Business impact
This vulnerability creates a risk of memory corruption within Zephyr-based Bluetooth devices and gateways. An attacker with proximity to a vulnerable device and an established CIS (Connected Isochronous Stream) or BIS (Broadcast Isochronous Stream) connection can trigger out-of-bounds reads to leak sensitive data from adjacent memory regions, or craft multi-fragment attacks to overwrite heap or stack memory. The impact depends on the device's architecture and what adjacent memory contains—on embedded systems with tightly-packed pools, this could lead to corruption of other Bluetooth data structures, network state, or security material. LE Audio applications (which commonly enable ISO receive) and mesh/IoT deployments using Zephyr are at elevated risk. Availability impact is high because malformed packets can crash the Bluetooth subsystem.
Affected systems
Zephyr Project versions 2.6.0 through 4.4.0 with CONFIG_BT_ISO_RX enabled (a configuration selected by default when BT_ISO_PERIPHERAL, BT_ISO_CENTRAL, or BT_ISO_SYNC_RECEIVER is enabled). This includes LE Audio stacks, mesh relay nodes, and any Bluetooth peripheral or gateway using Zephyr's ISO receive capabilities. Systems with CONFIG_ASSERT enabled are protected by runtime assertions, but production builds typically disable this. IoT devices, hearing aids, medical sensors, and audio accessories using Zephyr with LE Audio are primary targets.
Exploitability
Exploitation requires network proximity and an established ISO connection (CIS or BIS). The attack is not user-initiated; a malicious or malfunctioning Bluetooth peer can trigger the vulnerability by sending specially-crafted PDU fragments. No user interaction or elevated privileges are required. The low complexity and absence of authentication barriers make this practical for an attacker with Bluetooth range to the target device. The constraint is that an ISO stream must already be negotiated, which limits the attack surface but is standard for LE Audio and other ISO use cases.
Remediation
Update to Zephyr version 4.5.0 or later, which includes explicit length validation before header extraction in bt_iso_recv(). For versions 4.4.0 and earlier, backport the fix by adding buf->len checks before net_buf_pull_mem() calls in subsys/bluetooth/host/iso.c. Alternatively, disable CONFIG_BT_ISO_RX in production builds if ISO receive is not essential, or enable CONFIG_ASSERT to activate runtime length guards (noting that this incurs a performance cost).
Patch guidance
Verify the patch version against the Zephyr release notes and advisories. The fix is expected in v4.5.0 and later. Backport patches for LTS branches should be validated against the main repository commit that resolved this issue. Organizations using vendored or custom Zephyr builds should apply the buffer length validation checks from the upstream fix to their iso.c implementation.
Detection guidance
Monitor Zephyr device logs for ISO packet drops or assertion failures in bt_iso_recv(). Packet analyzer tools (e.g., Wireshark with Bluetooth dissectors) can help identify malformed ISO PDUs on the air, though the vulnerability is triggered at the device level. Runtime assertions (if enabled) will catch the underflow; enable CONFIG_ASSERT in test and staging environments to validate the issue. Fuzz testing with malformed ISO packet streams can help validate the fix before deployment.
Why prioritize this
HIGH priority due to the combination of memory corruption (out-of-bounds read and write), established connection requirement that is standard for LE Audio, and widespread presence in embedded and IoT deployments. The vulnerability has existed for four major versions (2.6 through 4.4), increasing the likelihood that vulnerable code is in production. Availability risk is significant; integrity and confidentiality risks depend on adjacent memory layout but should not be underestimated in constrained environments.
Risk score, explained
CVSS 3.1 score of 7.1 (HIGH) reflects attack vector Adjacent Network (established BLE connection), low complexity, no privileges required, no user interaction, and scope Unchanged. Confidentiality impact is Low (adjacent memory read), Integrity impact is None (direct write is out-of-bounds but does not corrupt ISO protocol state in the CVSS model), and Availability impact is High (crash via memory corruption). The score appropriately prioritizes availability and the realistic attack surface; the out-of-bounds write capability elevates risk above a purely read-based issue.
Frequently asked questions
Does this affect my Zephyr Bluetooth application if I'm not using LE Audio?
Only if you have explicitly enabled CONFIG_BT_ISO_RX in your build configuration. LE Audio (BT_ISO_PERIPHERAL, BT_ISO_CENTRAL, BT_ISO_SYNC_RECEIVER) selects this by default, but other Bluetooth profiles (classic, BR/EDR, mesh without ISO) are unaffected. Check your prj.conf or Kconfig settings for any ISO RX enablement.
Can an attacker exploit this without an established ISO connection?
No. The hci_iso() handler enforces that only packets on established CIS or BIS streams reach bt_iso_recv(). An attacker must first complete the ISO stream negotiation, which requires either control of an authorized peer device or a malfunction in the stream setup. This limits the threat to connected scenarios but does not eliminate it, especially in open or mesh networks.
What is the difference between a single-fragment attack and a multi-fragment attack?
Single-fragment (BT_ISO_SINGLE) or first-fragment (BT_ISO_START) PDUs trigger out-of-bounds reads of the header fields, corrupting the iso->rx buffer state. Multi-fragment attacks exploit the corrupted buffer's tailroom calculation to bypass bounds checks in subsequent CONT/END fragments, enabling a memcpy out-of-bounds write. Multi-fragment attacks have higher impact but both cases are exploitable.
I can't upgrade immediately. What mitigations are available?
Enable CONFIG_ASSERT in your build to activate runtime length assertions that will catch and drop malformed packets (with a performance cost). Disable CONFIG_BT_ISO_RX if ISO receive is not critical to your application. Restrict Bluetooth pairing and ISO stream negotiation to trusted devices via application-level access controls. Implement packet anomaly detection to identify malformed PDUs and disconnect suspicious peers.
This analysis is provided for informational and educational purposes. SEC.co makes no warranty regarding the accuracy, completeness, or applicability of this information to any specific environment or use case. Vulnerability details, patch availability, and affected versions are based on public sources and vendor advisories current as of the publication date. Organizations must independently validate all patch versions, compatibility, and testing before deployment in production. The presence of a vulnerability does not guarantee exploitability in a given configuration; security posture depends on network topology, access controls, device hardening, and monitoring. Consult Zephyr's official security advisories and your organization's security team for deployment-specific guidance. Source: NVD (public-domain), retrieved 2026-07-28. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-10941HIGHSkia Out-of-Bounds Memory Vulnerability in Chrome – Urgent Patch Required
- CVE-2026-11091HIGHCritical Chrome Memory Corruption Vulnerability in Dawn Graphics Engine
- CVE-2026-11690HIGHChrome Memory Safety Vulnerability on macOS – Patch & Detection Guide
- CVE-2026-12310HIGHFirefox and Thunderbird Memory Safety Vulnerability (CVSS 7.5)
- CVE-2026-12314HIGHFirefox & Thunderbird Memory Safety Vulnerability – Patch Now
- CVE-2026-49475HIGHFreeSWITCH STUN Parser Out-of-Bounds Memory Access (Denial of Service)
- CVE-2026-9889HIGHChrome Android Sandbox Escape via Memory Corruption – Critical Security Update
- CVE-2026-9910HIGHChrome ANGLE Out-of-Bounds Memory Access – Exploit & Patch Guide