CVE-2022-48910 in Linux
Zusammenfassung
von VulDB • 27.05.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
net: ipv6: sicherstellen, dass ipv6_mc_down() höchstens einmal aufgerufen wird
Es gibt zwei Gründe, warum addrconf_notify() mit NETDEV_DOWN aufgerufen wird: Entweder das Netzwerkgerät wird tatsächlich heruntergefahren, oder IPv6 wurde auf der Schnittstelle deaktiviert.
Wenn einer von beiden heruntergefahren bleibt, während der andere umgeschaltet wird, wird der Code für NETDEV_DOWN, einschließlich ipv6_mc_down(), wiederholt aufgerufen, ohne dass dazwischen das entsprechende ipv6_mc_up() aufgerufen wird. Dies führt dazu, dass für jede Multicast-Gruppe, der die Schnittstelle beigetreten ist, ein neuer Eintrag in idev->mc_tomb zugewiesen wird, was wiederum einen struct ifmcaddr6 pro nicht-trivialer Multicast-Gruppe, der die Schnittstelle beigetreten ist, leakt.
Der folgende Reproducer wird mindestens $n Objekte leaken:
ip addr add ff2e::4242/32 dev eth0 autojoin sysctl -w net.ipv6.conf.eth0.disable_ipv6=1 for i in $(seq 1 $n); do ip link set up eth0; ip link set down eth0 done
Das Beitreten von Gruppen mit IPV6_ADD_MEMBERSHIP (unprivilegiert) oder das Festlegen des sysctl net.ipv6.conf.eth0.forwarding auf 1 (=> Beitreten von ff02::2) kann ebenfalls verwendet werden, um eine nicht-triviale idev->mc_list zu erstellen, die bei der richtigen Up-Down-Sequenz Objekte leakt.
Basierend auf beiden Quellen für NETDEV_DOWN-Ereignisse sollte der IPv6-Status der Schnittstelle berücksichtigt werden:
- nicht bereit, wenn das Netzwerkinterface nicht bereit IST ODER IPv6 dafür deaktiviert ist - bereit, wenn das Netzwerkinterface bereit IST UND IPv6 dafür aktiviert ist
Die Funktionen ipv6_mc_up() und ipv6_down() sollten nur ausgeführt werden, wenn sich dieser Status ändert.
Dies wird implementiert, indem gespeichert wird, wann der IPv6-Status bereit ist, und ipv6_mc_down() nur dann ausgeführt wird, wenn er tatsächlich von bereit auf nicht bereit geändert wurde.
Die andere Richtung (nicht bereit -> bereit) funktioniert bereits korrekt, da:
- der durch die Schnittstellenbenachrichtigung ausgelöste Codepfad für NETDEV_UP / NETDEV_CHANGE frühzeitig zurückkehrt, wenn ipv6 deaktiviert ist, und - der durch disable_ipv6=0 ausgelöste Codepfad die vollständige Initialisierung der Schnittstelle überspringt, solange addrconf_link_ready(dev) false zurückgibt - das wiederholte Aufrufen von ipv6_mc_up() nichts leakt
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.