Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-87040— Bluetooth LE Controller accepts received PDUs whose length field exceeds the configured maximum receive length, causing out-of-bounds read and write

Quick assessment

Affected
zephyrproject zephyr
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

开源蓝牙低功耗(BLE)控制器中,nRF 链路层接收路径未将接收到的协议数据单元(PDU)的空中传输 LENGTH 字段与用于配置无线电的最大接收长度进行校验。在 中的 函数,仅在执行序列号检查(以及加密链路下的 MIC 检查)后,便将任何非空数据 PDU 入队;而 、 、 和 中对应的 处理器对 ISO 及扩展广播 PDU 也执行了相同的操作。nRF 无线电会原样存储接收到的帧头,并仅在 处截断载荷;因此,若某帧声明的字节数超过已配置的最大值,其对应的节点缓冲区 字段将描述超出缓冲区实际容量的数据量。 任何处于无

CVSS 8.3 · High
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-87040

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
Bluetooth LE Controller accepts received PDUs whose length field exceeds the configured maximum receive length, causing out-of-bounds read and write
Source: CVE Program / CVE List V5
Vulnerability Description
The nRF link-layer receive paths of the open-source Bluetooth LE Controller did not validate the on-air LENGTH field of a received PDU against the maximum receive length that was used to program the radio. isr_rx_pdu() in subsys/bluetooth/controller/ll_sw/nordic/lll/lll_conn.c enqueued any non-empty data PDU after only the sequence-number and (for encrypted links) MIC checks, and the corresponding isr_rx() handlers in lll_central_iso.c, lll_peripheral_iso.c, lll_sync_iso.c and lll_scan_aux.c did the same for ISO and extended-advertising PDUs. The nRF radio stores the received header verbatim and truncates only the payload at PCNF1.MAXLEN, so a frame declaring more octets than were configured leaves a node buffer whose len field describes more data than the buffer holds. An attacker within radio range that can emit a hand-crafted link-layer PDU — for a connection, any peer that establishes an unencrypted LE connection to a connectable advertiser; for CONFIG_BT_CTLR_SYNC_ISO, any broadcaster the device is synchronised to — can set the length byte up to 255 while the controller has programmed a much smaller maximum (lll->dle.eff.max_rx_octets, which is 27 until a Data Length Update, or the negotiated cis_lll->rx.max_pdu). No pairing, authentication or user interaction is required. On encrypted links the CCM MIC check normally rejects such a frame first, so the exposure is on unencrypted traffic, which is why the added check is placed after decryption. The unchecked length reaches hci_acl_encode() in subsys/bluetooth/controller/hci/hci.c, which performs net_buf_add(buf, pdu_data->len) followed by a memcpy() of that many bytes out of the node_rx pool element. Because CONFIG_BT_CTLR_DATA_LENGTH_MAX and CONFIG_BT_BUF_ACL_RX_SIZE both default to 27, this is an out-of-bounds read of up to roughly 228 bytes past the received PDU and a corresponding out-of-bounds write past the HCI ACL buffer into neighbouring buffers of the same pool; the tailroom test in net_buf_simple_add() is only enforced when CONFIG_NET_BUF_HARDENING (or CONFIG_ASSERT) is enabled. On the ISO paths the same unchecked length makes isoal_rx_append_to_sdu() read past the ISO node buffer and emit adjacent controller RAM to the host as ISO data. The practical result is remote memory corruption and controller crashes, plus disclosure of controller memory into the host data path. The fix rejects any received PDU whose length exceeds the value that was used to configure the radio reception. Note that lll_sync.c (periodic advertising sync reception) was not changed and still enqueues received PDUs without an equivalent bound.
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:H
Source: CVE Program / CVE List V5
Vulnerability Type
未进行输入大小检查的缓冲区拷贝(传统缓冲区溢出)
Source: CVE Program / CVE List V5

Affected Products

Vendor Product Affected Versions CPE Subscribe
zephyrproject zephyr 1.6.0 ~ 4.3.2 -

II. Public POCs for CVE-2026-87040

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-87040

请登录查看更多情报信息。

Other References for CVE-2026-87040 (2)

Same Patch Batch · zephyrproject · 2026-11-04 · 8 CVEs total

CVE-2026-16511 8.8 HIGH Unvalidated user pointers in RTIO syscall verifiers allow a user-mode thread to write kern
CVE-2026-87039 7.8 HIGH I2S configure syscall handler passes an unvalidated user-supplied kernel object pointer to
CVE-2026-87041 7.8 HIGH Inverted memory-permission check in the RTIO syscall verifier allows a user-mode thread to
CVE-2026-87038 7.0 HIGH Time-of-check/time-of-use double fetch in the Zephyr i3c_transfer() syscall handler allows
CVE-2026-87044 6.5 MEDIUM Memory leak in the Mbed TLS crypto shim on failed cipher/AEAD operations leads to remotely
CVE-2026-85036 5.7 MEDIUM Bluetooth Classic AVDTP session reuse re-initializes a queued work item, corrupting the sy
CVE-2026-87043 4.8 MEDIUM sys_rand_get() silently returns an unwritten buffer when the entropy device is not ready

IV. Related Vulnerabilities