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

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-85036— Bluetooth Classic AVDTP session reuse re-initializes a queued work item, corrupting the system work queue

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.

经典蓝牙(Bluetooth Classic)的 AVDTP 层在释放会话流端点时存在延迟处理问题: 函数(位于 )以调用 结尾,将嵌入的 对象提交至系统工作队列的待处理列表中。然而,当同一 对象立即被复用于新的信令连接时,会话内存会被重新初始化——具体而言, 函数(位于 )会对整个 执行 清零操作;与此同时, 或 函数会对 调用 。此时,该工作项仍被链接在 列表中。对已链接的 结构体执行清零操作会导致链表被截断,而链表的尾指针仍指向截断之后的位置,从而引发链表结构损坏。 该漏洞的触发窗口是确定性的,而非竞态条件。

CVSS 5.7 · Medium

Possible ATT&CK Techniques 1 AI

T1499.003 · Application Exhaustion Flood
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-85036

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 Classic AVDTP session reuse re-initializes a queued work item, corrupting the system work queue
Source: CVE Program / CVE List V5
Vulnerability Description
The Bluetooth Classic AVDTP layer defers releasing a session's stream endpoints: bt_avdtp_l2cap_disconnected() in subsys/bluetooth/host/classic/avdtp.c ends with k_work_submit(&session->_release_work), placing the embedded struct k_work on the system work queue's pending list. When the same struct bt_avdtp object is immediately reused for a new signalling connection, the session memory is re-initialized — a2dp_get_connection() in subsys/bluetooth/host/classic/a2dp.c memset()s the whole struct bt_a2dp, and bt_avdtp_l2cap_accept() / bt_avdtp_connect() call k_work_init() on session->_release_work — while that work item is still linked into k_sys_work_q.pending. Zeroing a linked sys_snode_t truncates the list while its tail pointer keeps pointing past the truncation. The reuse window is deterministic rather than a race. All host RX processing runs on the Bluetooth RX work queue at a cooperative priority (CONFIG_BT_RX_PRIO), while _release_work is submitted to the lower-priority system work queue, so the release handler cannot run until the RX thread blocks. Because l2cap_br_recv() processes every signalling command contained in a single L2CAP signalling PDU back-to-back, a peer can send one PDU holding an L2CAP Disconnection Request for the AVDTP signalling channel followed by a Connection Request for PSM 0x0019; the second command reaches the session-reuse path with the release work provably still queued. The peer must already hold an encrypted AVDTP signalling channel, i.e. be a paired/bonded BR/EDR device. The result is corruption of the global system work queue's pending list: either the queue silently stops executing any work at all (subsequent submissions are appended to a chain the head can no longer reach, and the orphaned items keep their K_WORK_QUEUED flag forever) or, in the tail variant, the list acquires a self-referencing node that the queue thread spins on. The written values are pointers to other struct k_work objects and are not attacker-controlled, so the impact is a device-wide, reboot-required denial of service rather than a controllable write primitive. Only builds with CONFIG_BT_CLASSIC and CONFIG_BT_A2DP are affected. The fix is a two-commit unit, and neither commit closes the path on its own. ec822ceed83b adds a pending-release check to bt_avdtp_connect() and bt_avdtp_l2cap_accept(), but the A2DP upper layer's a2dp_get_connection() memset()s the session — including the queued work item's list node and flags — before those checks run, so k_work_busy_get() would observe an already-cleared state. 2bd5ea88c69b closes that by making a2dp_get_connection() itself skip the reuse and return NULL while the release work is still pending, which both callers already handle by rejecting the connection attempt. Apply both commits together; either one alone leaves the device vulnerable.
Source: CVE Program / CVE List V5
CVSS Information
CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:N/I:N/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 4.3.0 ~ 4.3.2 -

II. Public POCs for CVE-2026-85036

# 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-85036

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

Other References for CVE-2026-85036 (3)

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-87040 8.3 HIGH Bluetooth LE Controller accepts received PDUs whose length field exceeds the configured ma
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-87043 4.8 MEDIUM sys_rand_get() silently returns an unwritten buffer when the entropy device is not ready

IV. Related Vulnerabilities