CVE-2025-38248
bridge : mcast : Correction de l'utilisation après libération lors de la configuration du port routeur
- Publié
- 9 juil. 2025
- Mise à jour
- 5 août 2026
- Attribution de CNA
- Linux
- Preuve observée
- 8 août 2026
CVSS primaire
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:HFaible · 30 prochains jours
- Percentile
- 18,5 %
- Date du modèle
- 21 sept. 2026
EPSS est une estimation statistique, et non une certitude ou une mesure d'impact. Combinez-le avec CVSS, le statut KEV, l'exposition et votre environnement.
Résumé
Dans le noyau Linux, la vulnérabilité suivante a été corrigée : bridge : mcast : Correction d'une use-after-free lors de la configuration du port routeur Le bridge maintient une liste globale des ports derrière lesquels se trouve un routeur multicast. La liste est consultée lors du forwarding pour garantir que les paquets multicast sont transmis à ces ports, même si les ports ne sont pas membres de l'entrée MDB correspondante. Lorsque le snooping multicast par VLAN est activé, le contexte multicast par port est désactivé sur chaque port et le port est retiré de la liste globale des ports routeurs : # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 # ip link add name dummy1 up master br1 type dummy # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 1 $ bridge -d mdb show | grep router Cependant, le port peut être réajouté à la liste globale même lorsque le snooping multicast par VLAN est activé : # ip link set dev dummy1 type bridge_slave mcast_router 0 # ip link set dev dummy1 type bridge_slave mcast_router 2 $ bridge -d mdb show | grep router router ports on br1: dummy1 Depuis le commit 4b30ae9adb04 ("net: bridge: mcast: re-implement br_multicast_{enable, disable}_port functions"), lorsque le snooping multicast par VLAN est activé, la désactivation du multicast sur un port désactivera les contextes multicast par {port, VLAN} et non celui par port. Par conséquent, un port restera dans la liste globale des ports routeurs même après sa suppression. Cela conduira à une use-after-free [1] lors du parcours de la liste (par exemple, lors de l'ajout d'un nouveau port à la liste) : # ip link del dev dummy1 # ip link add name dummy2 up master br1 type dummy # ip link set dev dummy2 type bridge_slave mcast_router 2 De même, des entrées obsolètes peuvent également être trouvées dans la liste des ports routeurs par VLAN. Lorsque le snooping multicast par VLAN est désactivé, les contextes par {port, VLAN} sont désactivés sur chaque port et le port est retiré de la liste des ports routeurs par VLAN : # ip link add name br1 up type bridge vlan_filtering 1 mcast_snooping 1 mcast_vlan_snooping 1 # ip link add name dummy1 up master br1 type dummy # bridge vlan add vid 2 dev dummy1 # bridge vlan global set vid 2 dev br1 mcast_snooping 1 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 # ip link set dev br1 type bridge mcast_vlan_snooping 0 $ bridge vlan global show dev br1 vid 2 | grep router Cependant, le port peut être réajouté à la liste par VLAN même lorsque le snooping multicast par VLAN est désactivé : # bridge vlan set vid 2 dev dummy1 mcast_router 0 # bridge vlan set vid 2 dev dummy1 mcast_router 2 $ bridge vlan global show dev br1 vid 2 | grep router router ports: dummy1 Lorsque le VLAN est supprimé du port, le contexte multicast par {port, VLAN} ne sera pas désactivé car le snooping multicast n'est pas activé sur le VLAN. Par conséquent, le port restera dans la liste des ports routeurs par VLAN même après qu'il ne soit plus membre du VLAN. Cela conduira à une use-after-free [2] lors du parcours de la liste (par exemple, lors de l'ajout d'un nouveau port à la liste) : # ip link add name dummy2 up master br1 type dummy # bridge vlan add vid 2 dev dummy2 # bridge vlan del vid 2 dev dummy1 # bridge vlan set vid 2 dev dummy2 mcast_router 2 Corrigez ces problèmes en retirant le port de la liste des ports routeurs pertinente (globale ou par VLAN) dans br_multicast_port_ctx_deinit(). La fonction est invoquée lors de la suppression du port avec le contexte multicast par port et lors de la suppression du VLAN avec le contexte multicast par {port, VLAN}. Notez que la suppression du minuteur du routeur multicast ne suffit pas car il ne gère que les états temporaires du routeur multicast (1 ou 3) et non l'état permanent (2). [1] BUG: KASAN: slab-out-of-bounds in br_multicast_add_router.part.0+0x3f1/0x560 Write of size 8 at addr ffff888004a67328 by task ip/384 [...] Call Trace: <TASK> dump_stack ---tronqué---
Utilisation responsable
Utilisez les informations de vulnérabilité uniquement sur les systèmes que vous possédez ou que vous êtes autorisé à tester. Kitploit renvoie aux métadonnées de la recherche publique et ne stocke pas de code d'exploitation ni de charges utiles malveillantes.