CVE-2026-15894: memory-safety in zephyrproject zephyr
Description
The Bluetooth Mesh On-Demand Private Proxy solicitation handler in subsys/bluetooth/mesh/solicitation.c copies a received Solicitation PDU into a fixed 17-byte stack buffer without bounding the source length. In sol_pdu_decrypt(), out is allocated as NET_BUF_SIMPLE(17) and then filled with net_buf_simple_add_mem(out, in->data, in->len); net_buf_simple_add() guards its tailroom only with __ASSERT_NO_MSG, which is compiled out in production builds, so when in->len > 17 the underlying memcpy writes attacker-controlled bytes past the 17-byte stack buffer. The copy occurs before any decryption or authentication, so no key material is required to trigger it. The oversized length arises because the mesh scan callback in subsys/bluetooth/mesh/adv.c calls net_buf_simple_restore() before dispatching to bt_mesh_sol_recv(), leaving buf->len covering the entire remaining advertising payload rather than just the Solicitation Service Data. After the parser locates the Service Data AD and consumes the Identification Type byte, the remaining buf->len is the 17-octet Network PDU plus any trailing advertising bytes, and prior to this fix there was no maximum-length check (only a minimum). An attacker can therefore append extra AD structures or padding after the Solicitation Service Data to make buf->len exceed 17. bt_mesh_scan_cb() is registered directly as the BLE scan callback, so buf is raw, unauthenticated advertising data received over the air. Any device in radio range can send a non-connectable advertisement carrying a crafted mesh Proxy Solicitation to a node that has CONFIG_BT_MESH_OD_PRIV_PROXY_SRV enabled and is currently eligible to be solicited (GATT proxy disabled, On-Demand Private Proxy enabled), with no pairing, bonding, or provisioning. The result is an attacker-controlled stack overwrite — plausibly leading to remote code execution and at minimum a reliable remote denial of service. The fix trims buf->len to the spec-fixed 17 octets (dropping the PDU if fewer remain) before decryption.
CVSS v3.1
Score 8.8high
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 Zephyr's Bluetooth Mesh On-Demand Private Proxy solicitation handler (subsys/bluetooth/mesh/solicitation.c) where a Solicitation PDU is copied into a fixed 17-byte stack buffer without checking that the source length does not exceed 17 bytes. The function sol_pdu_decrypt() allocates a 17-byte buffer and copies data from the input buffer without enforcing length bounds, relying on __ASSERT_NO_MSG which is disabled in production builds. The oversized length arises because the mesh scan callback restores the buffer length to cover the entire advertising payload, which can include extra data beyond the expected 17 bytes. An attacker can send crafted non-connectable BLE advertisements with extra data appended to exceed the buffer size. This leads to a stack overwrite before any decryption or authentication, requiring no key material. The vulnerability affects Zephyr versions from 3.4.0 up to but not including 4.4.2. The fix trims the buffer length to 17 bytes as per specification before processing the PDU.
Potential Impact
An attacker within radio range can send crafted unauthenticated BLE advertisements to a vulnerable Zephyr device with CONFIG_BT_MESH_OD_PRIV_PROXY_SRV enabled and GATT proxy disabled. This causes a stack buffer overflow leading to memory corruption. The impact includes potential remote code execution and at minimum a reliable remote denial of service. No pairing, bonding, or provisioning is required to exploit this vulnerability.
Mitigation Recommendations
A fix is available that trims the buffer length to the specification-fixed 17 bytes before processing the Solicitation PDU, preventing the overflow. Users should upgrade to Zephyr version 4.4.2 or later where this issue is resolved. Until patched, disabling the On-Demand Private Proxy feature (CONFIG_BT_MESH_OD_PRIV_PROXY_SRV) or enabling GATT proxy may mitigate exposure. Patch status is confirmed by the vendor advisory indicating the fix is included in version 4.4.2.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- zephyr
- Date Reserved
- 2026-07-15T17:38:10.947Z
- Cvss Version
- 3.1
- State
- PUBLISHED
Threat ID: 6ac60e7e2cdf04f656324a74
Added to database: 10/07/2026, 09:18:54 UTC
Last enriched: 10/07/2026, 09:33:24 UTC
Last updated: 10/07/2026, 18:56:10 UTC
Views: 15
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.