CVE-2026-5589
Description
Integer underflow in Bluetooth Mesh leads to out-of-bounds write, potentially causing arbitrary code execution or denial of service.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Integer underflow in Bluetooth Mesh leads to out-of-bounds write, potentially causing arbitrary code execution or denial of service.
Vulnerability
An integer underflow vulnerability exists in the bt_mesh_sol_recv() function within subsys/bluetooth/mesh/solicitation.c when CONFIG_BT_MESH_OD_PRIV_PROXY_SRV is enabled. The function parses solicitation PDUs from raw BLE advertising payloads. An attacker-controlled length byte (reported_len) is used in a calculation reported_len - 3. If reported_len is less than 3, this subtraction results in a negative value which bypasses a length guard and is then implicitly converted to a large size_t value when passed to net_buf_simple_pull_mem(), leading to an out-of-bounds write. This affects Zephyr versions prior to the patches mentioned in reference [1].
Exploitation
An attacker with a nearby BLE device can trigger this vulnerability by sending a non-connectable advertisement containing a UUID16 AD structure and a crafted length byte. No pairing or prior association is required. The crafted length byte causes the reported_len - 3 calculation to yield a negative number, which bypasses the intended buffer length check. This negative value is then used to advance the data pointer far out of bounds, allowing subsequent reads to dereference invalid memory.
Impact
Successful exploitation of this vulnerability can lead to an out-of-bounds write, potentially resulting in arbitrary code execution. In real-time operating systems like Zephyr, which often lack common memory protection systems, this can be particularly severe. Even on systems with memory protection, the vulnerability can cause a crash, leading to a denial of service.
Mitigation
Patches for this vulnerability are available in Zephyr's main branch (#105585), v4.3 (#108334), and v3.7 (#108333) as detailed in reference [1]. Users are advised to update to a patched version of Zephyr. No workarounds are specified in the available references.
AI Insight generated on Jun 4, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected products
2(expand)+ 1 more
- (no CPE)
- (no CPE)
Patches
5159c7d424d89doc: release/4.4: Add CVE under embargo
1 file changed · +4 −0
doc/releases/release-notes-4.4.rst+4 −0 modified@@ -133,10 +133,14 @@ The following CVEs are addressed by this release: * :cve:`2026-5067` Under embargo until 2026-05-23 +* :cve:`2026-5068` Under embargo until 2026-05-21 + * :cve:`2026-5071` Under embargo until 2026-05-18 * :cve:`2026-5072` Under embargo until 2026-05-18 +* :cve:`2026-5589` Under embargo until 2026-06-03 + API Changes ***********
b5589fcc7b15doc: vuln: Add CVE under embargo
1 file changed · +5 −0
doc/security/vulnerabilities.rst+5 −0 modified@@ -2257,3 +2257,8 @@ Under embargo until 2026-05-18 ---------------- Under embargo until 2026-05-18 + +:cve:`2026-5589` +---------------- + +Under embargo until 2026-06-03
ed7adfd635a9bluetooth: mesh: fix solicitation data length
1 file changed · +3 −2
subsys/bluetooth/mesh/solicitation.c+3 −2 modified@@ -234,8 +234,9 @@ void bt_mesh_sol_recv(struct net_buf_simple *buf, uint8_t uuid_list_len) break; } - if (buf->len <= reported_len - 3) { - LOG_DBG("Invalid length (%u) Solicitation PDU", buf->len); + if (reported_len < 3 || buf->len <= reported_len - 3) { + LOG_DBG("Invalid length: buf->len=%u reported_len=%u Solicitation PDU", + buf->len, reported_len); return; }
35592afcfeb7bluetooth: mesh: fix solicitation data length
1 file changed · +3 −2
subsys/bluetooth/mesh/solicitation.c+3 −2 modified@@ -234,8 +234,9 @@ void bt_mesh_sol_recv(struct net_buf_simple *buf, uint8_t uuid_list_len) break; } - if (buf->len <= reported_len - 3) { - LOG_DBG("Invalid length (%u) Solicitation PDU", buf->len); + if (reported_len < 3 || buf->len <= reported_len - 3) { + LOG_DBG("Invalid length: buf->len=%u reported_len=%u Solicitation PDU", + buf->len, reported_len); return; }
fda7ed8613a9bluetooth: mesh: fix solicitation data length
1 file changed · +3 −2
subsys/bluetooth/mesh/solicitation.c+3 −2 modified@@ -230,8 +230,9 @@ void bt_mesh_sol_recv(struct net_buf_simple *buf, uint8_t uuid_list_len) break; } - if (buf->len <= reported_len - 3) { - LOG_DBG("Invalid length (%u) Solicitation PDU", buf->len); + if (reported_len < 3 || buf->len <= reported_len - 3) { + LOG_DBG("Invalid length: buf->len=%u reported_len=%u Solicitation PDU", + buf->len, reported_len); return; }
Vulnerability mechanics
Root cause
"An integer underflow in Bluetooth Mesh solicitation handling leads to an out-of-bounds write."
Attack vector
An attacker can trigger this vulnerability by sending a non-connectable BLE advertisement with a UUID16 AD structure and a crafted length byte. This advertisement is processed by the `bt_mesh_sol_recv()` function when `CONFIG_BT_MESH_OD_PRIV_PROXY_SRV` is enabled. No pairing or prior association is required for this attack to succeed. The crafted length byte causes an integer underflow during length calculation, bypassing security checks and leading to an out-of-bounds write [ref_id=1].
Affected code
The vulnerability resides in the `bt_mesh_sol_recv()` function within the file `subsys/bluetooth/mesh/solicitation.c`. Specifically, the issue occurs in the AD parsing loop where an attacker-controlled length byte (`reported_len`) is read. The problematic calculation `reported_len - 3` and the subsequent call to `net_buf_simple_pull_mem()` are located within this loop [ref_id=1].
What the fix does
The patch addresses the integer underflow by ensuring that the `reported_len` is at least 3 before performing the subtraction. This prevents the calculation of a negative value, which was then incorrectly converted to a large `size_t` and used to advance the data pointer out of bounds. By adding a check for `reported_len >= 3`, the vulnerability is mitigated, and subsequent memory accesses remain within valid buffer boundaries [patch_id=4832860].
Preconditions
- configCONFIG_BT_MESH_OD_PRIV_PROXY_SRV must be enabled.
- inputA BLE advertisement payload with a UUID16 AD structure and a crafted length byte where reported_len < 3.
- networkThe attacker must be within BLE range of the vulnerable device.
Generated on Jun 4, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
1News mentions
0No linked articles in our index yet.