CVE Catalog

CVE-2026-19738

MediumCVSS 6.5
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.10%

1th percentile - higher than 1% of all known CVEs

Summary

The Bluetooth Link Layer Control Procedure (LLCP) implementation for Connected Isochronous Stream (CIS) creation leaks a retained RX node (ctx->node_ref.rx). When the invalid PDU paths in ull_llcp_cc.c terminate the connection without releasing that retained node, the invariant checked in llcp_lr_check_done() and llcp_rr_check_done() is broken. A peer device within radio range can trigger this with a single extra LL Control PDU on an unauthenticated, unencrypted ACL link.

Risk Assessment

In default builds the retained-node assertion fires immediately, causing a controller fatal error and typically a system reset. With assertions disabled, each attempt permanently loses one node from the small LL notification pool, and repeating the attack cycle exhausts the pool, stalling RX flow control. Impact is limited to availability, and recovery requires a reboot.

Recommendation

Update the Bluetooth controller firmware/software to a version that releases the retained node in the invalid PDU paths. If updating is not possible, consider disabling CIS features (CONFIG_BT_CTLR_PERIPHERAL_ISO / CONFIG_BT_CTLR_CENTRAL_ISO) or restricting radio range to trusted devices.

Other vulnerabilities in Zephyr Bluetooth Controller

Original NVD description (English source)

The Bluetooth Link Layer Control Procedure (LLCP) implementation for Connected Isochronous Stream (CIS) creation retains an RX node (ctx->node_ref.rx, marked NODE_RX_TYPE_RETAIN) so it can later be reused as the host notification — on the peripheral while awaiting the Host's reply to an LL_CIS_REQ, and on the central for the whole duration of a locally initiated CIS Create. In subsys/bluetooth/controller/ll_sw/ull_llcp_cc.c, the "invalid PDU received" paths of llcp_rp_cc_rx() and llcp_lp_cc_rx() terminated the connection and completed the procedure without releasing that retained node, breaking the invariant checked in llcp_lr_check_done() and llcp_rr_check_done() and orphaning the node's memory. A peer device within radio range can reach this with a single extra LL Control PDU on an unauthenticated, unencrypted ACL link. Against a peripheral, the attacker sends a valid LL_CIS_REQ and then, before the Host replies, any unrelated LL Control PDU (for example LL_VERSION_IND), which ull_cp_rx() routes into the active remote procedure. Against a central performing a CIS Create, a malicious peripheral answers with LL_UNKNOWN_RSP for CIS_REQ, which is dispatched into the active local procedure. No pairing, encryption or user interaction is required; the code is compiled in when CONFIG_BT_CTLR_PERIPHERAL_ISO or CONFIG_BT_CTLR_CENTRAL_ISO is enabled. In default builds (CONFIG_BT_CTLR_ASSERT_DEBUG is default y) the retained-node assertion fires immediately, producing a controller fatal error and, typically, a system reset from one injected PDU. With the development assertions disabled, each attempt permanently loses one node from the controller's small LL notification pool (LL_PDU_RX_CNT, 2 * CONFIG_BT_CTLR_LLCP_CONN) together with its memq_link_t; repeating the connect-attack-reconnect cycle exhausts the pool, after which notification allocation always fails, RX flow control stalls, and the non-disableable LL_ASSERT_ERR() in llcp_lp_cc_flush() faults. The impact is limited to availability — the leaked node is orphaned, never reused or double-freed — and recovery requires a reboot.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS