Live › vulnerability › CVE-2026-85033
Zephyr's Bluetooth AVRCP Target code does not release a half-sent vendor-dependent response when the link drops, so the stale state persists on the reused connection slot. A paired nearby peer can stop further AVRCP vendor responses from being sent and leak a buffer each cycle, and a later peer can receive the remainder of the earlier peer's response.
Summary written from the sources below. Check the originals before acting.
First seen by InfraStack 2026-11-03 14:21 UTC. All times on this page are UTC.
Only devices running Zephyr firmware with Bluetooth Classic AVRCP Target role enabled are exposed. The attacker must already be a paired peer within radio range, since AVCTP requires an encrypted BR/EDR link, and no user interaction is needed. Teams using Zephyr in embedded products should check whether AVRCP Target is compiled in.
No product ranges from the sources yet.
subsys/bluetooth/host/classic/avrcp.c present in the build).Unknown from the sources.
Each row is the first time that source carried this signal. The analyst’s rows are its own findings.
The AVRCP Target role in subsys/bluetooth/host/classic/avrcp.c keeps its vendor-dependent response transmit state in a per-connection object selected by connection index (get_avrcp_tg()), with the per-transfer context (tid, sent_len, and the BT_AVRCP_TG_FLAG_TX_ONGOING flag) stored in the user_data of the queued response net_buf. The AVCTP teardown handler avrcp_disconnected() did not cancel tg->vd_rsp_tx_work and did not release the buffers still queued on tg->vd_rsp_tx_pending, so a link drop in the middle of a fragmented response left the buffer on the list with TX_ONGOING still set.
A remote AVRCP Controller can trigger this deterministically: it issues a vendor-dependent command whose response exceeds one AVRCP fragment (for example GetElementAttributes or GetCapabilities), lets bt_avrcp_tg_vendor_tx_work() emit the START fragment, and then drops the ACL link instead of sending REQUEST_CONTINUING_RESPONSE. The AVCTP control channel requires an encrypted BR/EDR link (BT_SECURITY_L2), so the attacker must be a paired peer within radio range; no user interaction is needed.
Because the Target objects are static and reused, the next connection landing on the same connection index finds the stale buffer at the head of vd_rsp_tx_pending. Every run of the TX work sees TX_ONGOING and returns immediately, so all further vendor-dependent responses queue behind the stale head and are never sent — a persistent loss of AVRCP Target function that no timeout clears and only a reboot recovers. Each cycle also leaks one response buffer from a shallow application pool, and a new peer that sends REQUEST_CONTINUING_RESPONSE clears the stale TX_ONGOING via bt_avrcp_tg_process_continuing_cmd(), causing the un-sent remainder of the previous peer's response to be transmitted to it.
The fix cancels tg->vd_rsp_tx_work and unrefs every buffer on tg->vd_rsp_tx_pending in avrcp_disconnected(); since the TX context lives in the buffer user_data, releasing the buffers also resets the TX state machine. There is no memory corruption: the pre-fix buffer is leaked with a live reference, so no use-after-free arises.
This page as .md · .json · in your agent: get_signal("CVE-2026-85033")
NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.