CVE-2026-99239
Publiée le 2026-11-02 · Dernière modification le 2026-11-02
Le sous-système Bluetooth du noyau Linux contient une faille dans le protocole L2CAP, qui gère les liaisons logiques entre les appareils. Une condition de concurrence basée sur le timing existe lorsque deux opérations simultanées — la connexion et la liaison d'un socket — peuvent induire le système en erreur et lier un canal à une connexion deux fois. Cela enfreint une règle interne fondamentale sur laquelle le noyau s'appuie pour le nettoyage correct de la mémoire et la gestion des états.
Un attaquant disposant d'un accès local avec des privilèges restreints sur le système peut exploiter cela pour compromettre la confidentialité, l'intégrité et la disponibilité de l'hôte. Étant donné que la faille déclenche une mauvaise gestion de la mémoire, elle pourrait entraîner un plantage du système ou une éventuelle élévation de privilèges. L'attaque est relativement facile à exécuter techniquement, bien qu'elle nécessite que l'attaquant possède déjà un compte connecté sur la machine.
DÉTAIL DU VECTEUR CVSS
RÉFÉRENCES
Description officielle du NVD (en anglais)
In the Linux kernel, the following vulnerability has been resolved: Bluetooth: L2CAP: refuse __l2cap_chan_add if chan already has conn l2cap_chan may be linked to l2cap_conn at most once. This is assumed in several places, eg l2cap_chan_del cleanup. There is a TOCTOU race where the invariant is violated: [Task 1] [Task 2] l2cap_chan_connect l2cap_sock_bind l2cap_chan_lock lock_sock l2cap_state_change if (sk->sk_state != BT_OPEN) chan->state = BT_CONNECT l2cap_sock_state_change_cb chan->state = BT_BOUND sk->sk_state = BT_BOUND lock_sock <------------------ release_sock sk->sk_state = BT_CONNECT l2cap_sock_connect() does not check sk->sk_state, so since chan->state is now BT_BOUND, subsequent connect() ends up with second __l2cap_chan_add. Explicitly document and check the invariant in __l2cap_chan_add with WARN_ON_ONCE. The only callsite where it could be hit is l2cap_chan_connect, so add pre-check there to avoid relying on chan->state. chan->state read/write is not properly guarded currently so there can be other TOCTOUC problems. Add l2cap_lock_chan in l2cap_sock_bind() to guard chan->state write.