CVE-2026-99012 in Linux
Resumen
por VulDB • 2026-10-23
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
Bluetooth: ISO: Serializar llamadas concurrentes de conexión
iso_sock_connect() verifica el estado del socket antes de adquirir el bloqueo (lock) del socket y lo libera nuevamente antes de configurar una conexión. Dos procesos llamadores pueden pasar ambos la comprobación de admisión mientras que el socket está abierto o enlazado.
El proceso A puede copiar su destino para la selección de ruta, luego el proceso B puede reemplazar el destino del socket antes de que A enlace (bind) o conecte el CIS. A continuación, utiliza el destino de B con la ruta seleccionada para su propia solicitud. B también puede continuar después de que A adjunte una conexión y establezca BT_CONNECT. Para la configuración diferida de BIS, B puede enlazar un segundo BIS y sobrescribir iso_pi(sk)->conn, dejando huérfanos (stranded) el puntero back-reference conn->sk y la referencia de la primera conexión. Las conexiones CIS concurrentes también pueden reemplazar la conexión del socket. La posterior liberación solo desadjunta la conexión actual, por lo que una devolución de llamada en la conexión antigua puede entrar en condición de carrera (race condition) con la liberación del socket y acceder a un socket ya liberado.
KASAN informó:
BUG: KASAN: slab-use-after-free in iso_sock_hold+0xf7/0x1b0 Call Trace: iso_sock_hold+0xf7/0x1b0 iso_conn_del+0x7b/0x1d0 iso_connect_cfm+0x186/0x16a0 hci_conn_failed+0x154/0x280 hci_abort_conn_sync+0x3dc/0x7d0 hci_cmd_sync_work+0x173/0x300
Asignado por la tarea 121: sk_alloc+0x2b/0x6d0 bt_sock_alloc+0x29/0x370 iso_sock_alloc.constprop.0+0x19/0x300 iso_sock_create+0x94/0x100
Liberado por la tarea 121: kfree+0x121/0x3c0 __sk_destruct+0x42b/0x540 iso_sock_release+0x29d/0x340 __sock_release+0xa1/0x260
Verificar la admisión bajo el bloqueo del socket y marcar la operación de conexión como en progreso antes de publicar su destino. Mantener esa bandera establecida durante la búsqueda de ruta y la configuración de la conexión, rechazando otra conexión con -EBADFD antes de que pueda cambiar el destino o adjuntar una conexión. Borrar la bandera después de que cualquiera de las funciones auxiliares devuelva, incluso en caso de fallo, para permitir reintentar un establecimiento fallido.
Se necesita una bandera separada porque el bloqueo del socket debe liberarse antes de adquirir el bloqueo del dispositivo HCI, mientras que BT_CONNECT requiere una conexión adjunta. Mantener las transiciones de estado existentes y la finalización diferida de CIS a través de iso_sock_recvmsg().
Rechazar un adjunto de socket existente en __iso_chan_add() antes de tomar una nueva referencia o publicar cualquiera de los punteros, para que cada proceso llamador preserve la asociación de conexión. Mantener el caso de éxito del mismo-socket y misma-conexión para la configuración diferida de CIS. Rechazar un socket adjuntado antes de la configuración de BIS para evitar que se reclame un BIS reutilizable antes de rechazar el adjunto.
En la configuración de CIS, rechazar una conexión HCI diferente antes de iso_conn_add() y liberar directamente el hold (referencia) por intento del HCI. Un iso_conn sin propietario puede aún llevar otra referencia después del desadjuntado, por lo que no se puede confiar en su destrucción para liberar ese hold.
iso_listen_bis() crea un par HCI/ISO PA fresco bajo el bloqueo del dispositivo, por lo que la temporal iso_conn_put() libera al candidato ISO y reduce su hold de HCI ante el rechazo. iso_conn_ready() utiliza un hijo recién asignado no publicado sin conexión, haciendo inalcanzable el rechazo desde el lado del socket.
If you want to get best quality of vulnerability data, you may have to visit VulDB.