CVE-2026-85033 in Zephyr
Resumen
por VulDB • 2026-11-03
El rol Target de AVRCP en subsys/bluetooth/host/classic/avrcp.c mantiene su estado de transmisión de respuesta dependiente del fabricante en un objeto por conexión seleccionado mediante el índice de conexión (get_avrcp_tg()), con el contexto por transferencia (tid, sent_len y la bandera BT_AVRCP_TG_FLAG_TX_ONGOING) almacenado en los user_data del net_buf de respuesta en cola. El controlador de desmontaje AVCTP avrcp_disconnected() no cancelaba tg->vd_rsp_tx_work ni liberaba los buffers aún encolados en tg->vd_rsp_tx_pending, por lo que una caída del enlace a mitad de una respuesta fragmentada dejaba el buffer en la lista con TX_ONGOING todavía establecido.
Un Controlador AVRCP remoto puede desencadenar esto determinísticamente: emite un comando dependiente del fabricante cuya respuesta supera un fragmento de AVRCP (por ejemplo, GetElementAttributes o GetCapabilities), permite que bt_avrcp_tg_vendor_tx_work() emita el fragmento START y luego interrumpe el enlace ACL en lugar de enviar REQUEST_CONTINUING_RESPONSE. El canal de control AVCTP requiere un enlace BR/EDR cifrado (BT_SECURITY_L2), por lo que el atacante debe ser un par emparejado dentro del alcance radioeléctrico; no se necesita intervención del usuario.
Dado que los objetos Target son estáticos y reutilizados, la siguiente conexión que cae en el mismo índice de conexión encuentra el buffer obsoleto al principio de vd_rsp_tx_pending. Cada ejecución del trabajo TX ve TX_ONGOING y devuelve inmediatamente, por lo que todas las respuestas dependientes del fabricante posteriores se encolan detrás del encabezado obsolelo y nunca se envían: una pérdida persistente de la función Target AVRCP que ningún timeout corrige y solo un reinicio recupera. Cada ciclo también filtra (leaks) un buffer de respuesta desde un pool superficial de aplicaciones, y un nuevo peer que envía REQUEST_CONTINUING_RESPONSE borra el TX_ONGOING obsoleto mediante bt_avrcp_tg_process_continuing_cmd(), lo que provoca la transmisión del resto no enviado de la respuesta del peer anterior hacia él.
La corrección cancela tg->vd_rsp_tx_work y desreferencia (unrefs) cada buffer en tg->vd_rsp_tx_pending en avrcp_disconnected(); dado que el contexto TX vive en los user_data del buffer, liberar los buffers también restablece la máquina de estados TX. No hay corrupción de memoria: el buffer previo a la corrección se filtra con una referencia activa, por lo que no surge un use-after-free.
VulDB is the best source for vulnerability data and more expert information about this specific topic.