CVE-2026-64459 in Linuxinformation

Résumé

par VulDB • 25/07/2026

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

tcp: rétablir la période de grâce RCU dans tcp_ao_destroy_sock

Le commit 51e547e8c89c (« tcp: Libérer les informations/clés TCP-AO/TCP-MD5 sans RCU ») a supprimé le rappel call_rcu() de tcp_ao_destroy_sock(), arguant que « la destruction des informations/clés est retardée jusqu'au destructeur du socket » et par conséquent « plus personne ne peut les découvrir ».

Cet argument n'est pas valable pour l'appelant dans tcp_connect() (net/ipv4/tcp_output.c:4327-4332). À ce stade, le socket est en état TCP_SYN_SENT, a déjà été inséré dans la table de hachage inet (ehash) par inet_hash_connect() dans tcp_v4_connect(), et est donc très facilement découvrable : n'importe quel softirq exécutant tcp_v4_rcv() sur un autre CPU peut retirer le socket de l'ehash, parcourir tcp_inbound_hash(), et charger tp->ao_info via RCU implicite avant que bh_lock_sock_nested() ne soit acquis sur le CPU effectuant la destruction.

Le chemin en lecture entre ensuite dans __tcp_ao_do_lookup() (net/ipv4/tcp_ao.c:208) qui recharge tp->ao_info via rcu_dereference_check(); ce rechargement peut encore observer le pointeur (sur le point d'être libéré) car il n'y a pas de synchronize_rcu() entre rcu_assign_pointer(tp->ao_info, NULL) et tcp_ao_info_free() dans tcp_ao_destroy_sock(). Le pointeur capturé est ensuite parcouru à la ligne 223 :

hlist_for_each_entry_rcu(key, &ao->head, node, ...)

Le kfree() synchrone de l'écrivain peut se terminer entre le re-fetch à la ligne 218 et l'itération hlist à la ligne 223. Le slab est réutilisé (ou simplement estampillé LIST_POISON1 s'il n'a pas encore été réutilisé) et l'itération parcourt de la mémoire contrôlée par un attaquant ou empoisonnée dans le contexte d'un softirq.

Reproducteur (sans shim de débogage, x86_64 v7.1-rc2 SMP+KASAN standard, QEMU+KVM) : un processus non privilégié uid=1000 à l'intérieur de CLONE_NEWUSER|CLONE_NEWNET installe TCP_MD5SIG + TCP_AO_ADD_KEY sur un socket TCP, pulvérise des segments TCP-AO forgés vers son 4-uplet final via des sockets bruts (raw), puis appelle connect(). La réconciliation md5-wins dans tcp_connect() déclenche tcp_ao_destroy_sock(); le lecteur de file d'attente arrière-plan softirq sur le chemin NAPI en boucle locale plante lors du parcours de ao->head.first libéré :

Oops: general protection fault, probablement pour une adresse non canonique 0xfbd59c000000002f KASAN: accès mémoire potentiellement erroné dans la plage [0xdead000000000178-0xdead00000000017f]
CPU : 0 UID : 1000 PID : 100 Comm: repro_userns RIP : 0010:__tcp_ao_do_lookup+0x107/0x1c0 Pile d'appels (Call Trace) :

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Responsable

Linux

Réserver

19/07/2026

Divulgation

25/07/2026

Modérer

accepté

Entrée

VDB-383247

CPE

prêt

EPSS

0.00173

KEV

non

Activités

très faible

Sources

Might our Artificial Intelligence support you?

Check our Alexa App!