CVE-2026-12236: dos in zephyrproject zephyr
The Bluetooth host GATT client function parse_read_std_char_desc() in subsys/bluetooth/host/gatt.c parses an ATT Read By Type Response received from a remote GATT server during BT_GATT_DISCOVER_STD_CHAR_DESC discovery. The per-entry stride rsp->len is taken directly from the peer's PDU, and the parse loop both tests its exit condition (length >= rsp->len) and advances (length -= rsp->len, pdu += rsp->len) using that value. The minimum value of rsp->len was never validated before the loop. A malicious or malfunctioning peer can reply with rsp->len = 0. Because length is unsigned and never decreases, the loop condition stays true forever and the read pointer never advances; as long as the body is at least a few bytes with a non-zero handle and a matching descriptor UUID, the host repeatedly re-parses the same bytes and invokes the discovery callback, never terminating. This hangs the Bluetooth host processing thread (CWE-835, loop with unreachable exit condition). The condition is reachable by any connected peer once the local device initiates standard-descriptor-value discovery; GATT discovery does not require bonding or encryption, so an unauthenticated adjacent attacker that the device connects to can trigger it. The impact is denial of service of the Bluetooth subsystem (and likely a watchdog reset on constrained targets); there is no memory disclosure or corruption. The fix adds a rsp->len < sizeof(struct bt_att_data) check before the loop, rejecting under-length responses so the stride is always non-zero and the loop terminates. The sibling parsers parse_include() and parse_characteristic() already validated rsp->len and are unaffected.
AI Analysis
Technical Summary
The vulnerability exists in the Zephyr Bluetooth host GATT client function parse_read_std_char_desc() in subsys/bluetooth/host/gatt.c. When processing an ATT Read By Type Response during standard descriptor discovery, the code uses the per-entry stride rsp->len directly from the peer's PDU without validating that rsp->len is non-zero. A malicious or malfunctioning peer can send rsp->len = 0, causing the parsing loop to never advance or exit, resulting in an infinite loop that hangs the Bluetooth host processing thread. This denial of service can be triggered by any connected peer without authentication. The fix adds a check to reject responses where rsp->len is less than the size of the expected data structure, ensuring the loop terminates properly.
Potential Impact
An unauthenticated adjacent attacker connected to the device can trigger a denial of service of the Bluetooth subsystem by sending a crafted ATT Read By Type Response with zero-length entries. This causes the Bluetooth host processing thread to hang indefinitely, likely leading to a watchdog reset on constrained devices. There is no impact on confidentiality or integrity, and no memory corruption occurs.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. The described fix involves validating the rsp->len value before parsing to prevent zero-length entries. Until an official fix is available, avoid connecting to untrusted Bluetooth peers or initiating standard descriptor discovery with untrusted devices.
CVE-2026-12236: dos in zephyrproject zephyr
Description
The Bluetooth host GATT client function parse_read_std_char_desc() in subsys/bluetooth/host/gatt.c parses an ATT Read By Type Response received from a remote GATT server during BT_GATT_DISCOVER_STD_CHAR_DESC discovery. The per-entry stride rsp->len is taken directly from the peer's PDU, and the parse loop both tests its exit condition (length >= rsp->len) and advances (length -= rsp->len, pdu += rsp->len) using that value. The minimum value of rsp->len was never validated before the loop. A malicious or malfunctioning peer can reply with rsp->len = 0. Because length is unsigned and never decreases, the loop condition stays true forever and the read pointer never advances; as long as the body is at least a few bytes with a non-zero handle and a matching descriptor UUID, the host repeatedly re-parses the same bytes and invokes the discovery callback, never terminating. This hangs the Bluetooth host processing thread (CWE-835, loop with unreachable exit condition). The condition is reachable by any connected peer once the local device initiates standard-descriptor-value discovery; GATT discovery does not require bonding or encryption, so an unauthenticated adjacent attacker that the device connects to can trigger it. The impact is denial of service of the Bluetooth subsystem (and likely a watchdog reset on constrained targets); there is no memory disclosure or corruption. The fix adds a rsp->len < sizeof(struct bt_att_data) check before the loop, rejecting under-length responses so the stride is always non-zero and the loop terminates. The sibling parsers parse_include() and parse_characteristic() already validated rsp->len and are unaffected.
CVSS v3.1
Score 6.5medium
Affected software
zephyrproject
zephyr
Run on your own infrastructure? Check whether these packages are installed with threat-finder — our free open-source scanner.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
The vulnerability exists in the Zephyr Bluetooth host GATT client function parse_read_std_char_desc() in subsys/bluetooth/host/gatt.c. When processing an ATT Read By Type Response during standard descriptor discovery, the code uses the per-entry stride rsp->len directly from the peer's PDU without validating that rsp->len is non-zero. A malicious or malfunctioning peer can send rsp->len = 0, causing the parsing loop to never advance or exit, resulting in an infinite loop that hangs the Bluetooth host processing thread. This denial of service can be triggered by any connected peer without authentication. The fix adds a check to reject responses where rsp->len is less than the size of the expected data structure, ensuring the loop terminates properly.
Potential Impact
An unauthenticated adjacent attacker connected to the device can trigger a denial of service of the Bluetooth subsystem by sending a crafted ATT Read By Type Response with zero-length entries. This causes the Bluetooth host processing thread to hang indefinitely, likely leading to a watchdog reset on constrained devices. There is no impact on confidentiality or integrity, and no memory corruption occurs.
Mitigation Recommendations
Patch status is not yet confirmed — check the vendor advisory for current remediation guidance. The described fix involves validating the rsp->len value before parsing to prevent zero-length entries. Until an official fix is available, avoid connecting to untrusted Bluetooth peers or initiating standard descriptor discovery with untrusted devices.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- zephyr
- Date Reserved
- 2026-06-15T01:56:07.073Z
- Cvss Version
- 3.1
- State
- PUBLISHED
Threat ID: 6a7dfe6cbf8831d539856562
Added to database: 08/13/2026, 17:27:08 UTC
Last enriched: 08/13/2026, 17:48:02 UTC
Last updated: 09/26/2026, 01:47:40 UTC
Views: 54
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.