← Tornar als articles
Seguretat· 3 min de lectura

CVE-2026-31408: use-after-free a la pila Bluetooth SCO del nucli Linux

El subsistema Bluetooth del nucli Linux arrossega un error de tipus use-after-free a la ruta SCO, la que gestiona l’àudio síncron de mans lliures i auriculars. Se li ha assignat l’identificador CVE-2026-31408 i una puntuació CVSS de 8.8 (alta).

Què falla exactament

El problema és a la funció sco_recv_frame(), dins de net/bluetooth/sco.c. Aquesta funció llegeix la referència al socket (conn->sk) sota el bloqueig sco_conn_lock(), però allibera el lock immediatament sense haver pres una referència ferma sobre l’objecte socket. Entre que deixa anar el bloqueig i l’accés posterior a sk->sk_state, una operació concurrent de tancament (close()) pot alliberar aquest socket. El resultat és un accés a memòria ja alliberada: un use-after-free de manual provocat per una condició de cursa.

La descripció oficial ho resumeix així: la funció llegeix conn->sk sota el lock però l’allibera sense retenir una referència, de manera que un close() concurrent pot alliberar el socket abans de l’accés següent.

A qui afecta

A qualsevol sistema Linux amb Bluetooth en ús. Això inclou portàtils, ordinadors d’escriptori, dispositius IoT, sistemes d’infoentreteniment d’automoció i un bon grapat de plaques encastades. El rang de versions vulnerables és ampli: comença a la 2.6.12 i arriba a branques molt recents. Segons les dades de NVD queden afectades, entre altres, totes les sèries fins a 5.15.203, de 5.16 a 6.1.167, de 6.2 a 6.6.130, de 6.7 a 6.12.79, de 6.13 a 6.18.20 i de 6.19 a 6.19.10. Si mantens un nucli LTS, mira en quin punt exacte de la teva sèrie va entrar l’arranjament.

Com de greu és

El vector CVSS és AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. L’AV:A (Adjacent) és important: no és un error explotable des de l’altra punta d’internet, sinó des de la xarxa de proximitat Bluetooth. Un atacant ha d’estar dins del radi d’abast i forçar la condició de cursa entre la recepció de trames SCO i el tancament del socket. Aconseguir-ho no és trivial, perquè depèn de la temporització, però l’impacte potencial sí que és seriós: des de la caiguda del nucli fins a, en el pitjor cas, execució de codi. Per això confidencialitat, integritat i disponibilitat consten com a altes.

La part tranquil·litzadora és que el vector de proximitat redueix molt la superfície davant d’un error remot pur. La part incòmoda és que el Bluetooth sol estar encès per defecte a portàtils i cotxes.

Mitigació

La correcció introdueix un comptatge de referències correcte. S’afegeix sco_sock_hold() per retenir el socket abans de deixar anar el bloqueig i es crida sock_put() a totes les rutes de sortida, igual que ja feien altres funcions del mateix fitxer. Amb això el socket no es pot alliberar mentre sco_recv_frame() l’estigui fent servir.

Què fer a la pràctica:

  • Actualitza el nucli a la primera versió de la teva sèrie que incorpori el pegat i reinicia.
  • Si per algun motiu no pots pegar de seguida i no fas servir Bluetooth, desactivar-lo (rfkill block bluetooth o aturant el servei) deixa l’exposició a zero mentrestant.
  • En flotes de dispositius IoT o encastats, prioritza els que tinguin Bluetooth sempre actiu i a l’abast físic de tercers.

Per saber en quin punt de manteniment és el teu sistema, consulta la fitxa de Linux kernel.

Font