Zephyr RTOS: Stack buffer overflow in Bluetooth Mesh solicitation handling
Summary
The Bluetooth Mesh On-Demand Private Proxy solicitation handler in Zephyr RTOS copies a received Solicitation PDU into a fixed 17-byte stack buffer without checking the length. Because the buffer length is not trimmed after the scan callback, an attacker can append extra advertising data to overflow the stack. The attack requires radio proximity to a device with CONFIG_BT_MESH_OD_PRIV_PROXY_SRV enabled and eligible for solicitation, but no pairing or authentication, and the overwrite may lead to a crash or potentially code execution.
Affected
- Zephyr RTOS 3.4.0 up to but not including 4.4.2
- Only builds with CONFIG_BT_MESH_OD_PRIV_PROXY_SRV enabled (not default)
- Affected device firmware depends on the vendor's Zephyr version
Fixed in
- Zephyr RTOS 4.4.2 (vendor advisory GHSA-x37p-38wq-cgwj)
- Fix commit 4416ad13677259d180f35ce44338578694e48184
- Backport status for 4.3.x and 3.7.x LTS lines: unconfirmed
Workaround
- No vendor-documented workaround.
- If the On-Demand Private Proxy server feature is not needed, disabling it removes the affected code path (confirm with the device vendor first).
Exploitation
- Not known to be exploited.
- No public proof of concept found.
- CISA SSVC: Exploitation none, Automatable no, Technical Impact total.
Our recommendation
- Inventory Bluetooth Mesh devices and ask vendors whether they run Zephyr and which version.
- Request firmware updates to a Zephyr version containing the fix, or a vendor advisory confirming the fix.
- Where the feature is unused, disable it after vendor confirmation.
- Monitor GHSA-x37p-38wq-cgwj for backports and exploitation reports.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- Zephyr fix commit 4416ad1 github.com
- GitHub Security Advisory GHSA-x37p-38wq-cgwj github.com
- OSV entry CVE-2026-15894 osv.dev
- Zephyr v4.4.2 release github.com
- Zephyr v4.3.2 release github.com
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 31 Oct 2026, 21:25.
Original description (NVD)
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.
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
