CVE-2026-99012 in Linuxinformation

Résumé

par VulDB • 23/10/2026

Dans le noyau Linux, la vulnérabilité suivante a été corrigée :

Bluetooth: ISO : Synchroniser les appels de connexion concurrents

iso_sock_connect() vérifie l'état du socket avant d'acquérir le verrou du socket et relâche ce dernier avant d'établir une connexion. Deux appelants peuvent tous deux réussir la vérification d'accès lorsque le socket est ouvert ou lié (bound).

L'appelant A peut copier sa destination pour la sélection de route, puis l'appelant B peut remplacer la destination du socket avant que A ne lie (bind) ou n'établisse une connexion CIS. A utilise alors la destination de B avec la route sélectionnée pour sa propre requête. B peut également continuer après qu'A ait attaché une connexion et défini BT_CONNECT. Pour l'initialisation différée d'un BIS, B peut lier un deuxième BIS et écraser iso_pi(sk)->conn, laissant les références de la première connexion ainsi que le pointeur arrière conn->sk orphelins. Des connexions CIS concurrentes peuvent également remplacer la connexion du socket. La désactivation ultérieure ne détache que la connexion actuelle ; une callback sur l'ancienne connexion peut alors subir une condition de concurrence (race condition) avec la libération du socket et accéder à un socket déjà libéré.

KASAN a signalé :

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

Alloué par la tâche 121 : sk_alloc+0x2b/0x6d0 bt_sock_alloc+0x29/0x370 iso_sock_alloc.constprop.0+0x19/0x300 iso_sock_create+0x94/0x100

Libéré par la tâche 121 : kfree+0x121/0x3c0 __sk_destruct+0x42b/0x540 iso_sock_release+0x29d/0x340 __sock_release+0xa1/0x260

Vérifier l'accès sous le verrou du socket et marquer l'opération de connexion comme en cours avant de publier sa destination. Maintenir ce drapeau actif tout au long de la recherche de route et de l'établissement de la connexion, en rejetant une autre connexion avec -EBADFD avant qu'elle ne puisse modifier la destination ou attacher une connexion. Effacer le drapeau après le retour de chaque fonction utilitaire, y compris en cas d'échec, afin qu'une configuration échouée puisse être réessayée.

Un drapeau distinct est nécessaire car le verrou du socket doit être relâché avant d'acquérir le verrou de l'appareil HCI, tandis que BT_CONNECT nécessite une connexion attachée. Conserver les transitions d'état existantes et la finalisation différée du CIS via iso_sock_recvmsg().

Rejeter un attachement de socket existant dans __iso_chan_add() avant d'acquérir une nouvelle référence ou de publier l'un des pointeurs, afin que chaque appelant préserve l'association de connexion. Conserver le cas de succès « même-socket, même-connexion » pour la configuration CIS différée. Rejeter un socket attaché avant la configuration BIS afin qu'un BIS réutilisable ne soit pas réclamé avant que l'attachement ne soit rejeté.

Lors de la configuration du CIS, rejeter une connexion HCI différente avant iso_conn_add() et libérer directement le verrou (hold) par tentative HCI. Un iso_conn non propriétaire peut toujours porter une autre référence après sa détachement ; il est donc impossible de s'appuyer sur sa destruction pour libérer ce verrou.

iso_listen_bis() crée un couple HCI/ISO PA frais sous le verrou de l'appareil, afin que le iso_conn_put() temporaire libère le candidat ISO et relâche son verrou HCI en cas de rejet. iso_conn_ready() utilise un enfant fraîchement alloué, non publié, sans connexion, rendant le rejet côté socket inaccessible.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

Responsable

Linux

Réserver

25/09/2026

Divulgation

23/10/2026

Modérer

accepté

Entrée

VDB-425859

EPSS

0.00000

KEV

non

Activités

faible

Sources

Might our Artificial Intelligence support you?

Check our Alexa App!