CVE-2026-53362HighCVSS: 7.8Linux-Kernel: Heap-Overlauf durch falsche Speicherberechnung in ipv6 (CVE-2026-53362)
Eine Schwachstelle im Linux-Kernel erlaubt es einem unprivilegierten Benutzer, über einen UDPv6-Socket (MSG_MORE + MSG_SPLICE_PAGES) einen Heap-Pufferüberlauf auszulösen. Ursache ist eine fehlerhafte Speicherallokation im paged-Zweig von __ip6_append_data(), die fraggap-Bytes nicht berücksichtigt. Ein Patch ist verfügbar.
METADATEN
- Entdeckt:
- 04.07.2026
- Patch verfügbar:
- Ja
BETROFFENE SYSTEME
- •Linux Kernel 6.0
- •Linux Kernel 6.1 (bis 6.1.176)
- •Linux Kernel 6.6 (bis 6.6.143)
- •Linux Kernel 6.12 (bis 6.12.94)
- •Linux Kernel 6.18 (bis 6.18.37)
- •Linux Kernel 7.1 (bis 7.1.2)
- •Linux Kernel 7.2 (bis 7.1.3)
- •Linux Kernel Patch 0
Zusammenfassung
In der Funktion __ip6_append_data() des Linux-Kernels wurde eine fehlerhafte Speicherberechnung im paged-allocation-Zweig (MSG_MORE / NETIF_F_SG / große fraglen) entdeckt. Beim Auftreten eines fraggap (datalen = length + fraggap) wird die lineare Speicherfläche um fraggap-Bytes unterdimensioniert und pagedlen entsprechend überdimensioniert. Dadurch schreibt die Kopierroutine über skb->end hinaus in das nachfolgende skb_shared_info und verursacht einen Heap-Pufferüberlauf.
Ein unprivilegierter Benutzer kann diese Schwachstelle über einen UDPv6-Socket mit MSG_MORE in Kombination mit MSG_SPLICE_PAGES auslösen. Dies kann zu einer Kernel-Panic, einem Denial-of-Service oder potenziell zur Ausführung von Schadcode führen.
Technische Details
Im paged-allocation-Zweig von __ip6_append_data() wurden alloclen und pagedlen wie folgt berechnet:
alloclen = fragheaderlen + transhdrlen;
pagedlen = datalen - transhdrlen;
Datalen enthält bereits den fraggap (datalen = length + fraggap). Ist fraggap ungleich null, handelt es sich nicht um das erste skb und transhdrlen ist null. Die vom vorherigen skb übernommenen fraggap-Bytes werden direkt hinter den Fragment-Headern im linearen Bereich des neuen skb kopiert. Der lineare Bereich ist daher um fraggap-Bytes unterdimensioniert, während pagedlen um denselben Betrag überdimensioniert ist – die Kopie schreibt über skb->end in das anhängende skb_shared_info.
Die fehlerhafte Berechnung wurde durch Commit 773ba4fe9104 (“ipv6: avoid partial copy for zc”) eingeführt. Vor Commit ce650a166335 (“udp6: Fix __ip6_append_data()’s handling of MSG_SPLICE_PAGES”) führte der negative Kopierwert zu einem -EINVAL-Fehler. Dieser spätere Commit erlaubte MSG_SPLICE_PAGES in diesem Fall, wodurch die Korruption auslösbar wurde.
Für die Behebung wird fraggap zu alloclen addiert und von pagedlen subtrahiert. Der nicht-paged-Zweig setzt alloclen bereits auf fraglen, das fraggap durch datalen berücksichtigt. Zusätzlich wurden ein veralteter Kommentar zur alten Arithmetik sowie die MSG_SPLICE_PAGES-Ausnahme in der negativen Kopierprüfung entfernt.
Betroffene Systeme
- Linux Kernel 6.0
- Linux Kernel 6.1 (Fix: Patch 6.1.177)
- Linux Kernel 6.6 (Fix: Patch 6.6.144)
- Linux Kernel 6.12 (Fix: Patch 6.12.95)
- Linux Kernel 6.18 (Fix: Patch 6.18.38)
- Linux Kernel 7.1 (Fix: Patch 7.1.3)
- Linux Kernel 7.2 (Fix: Patch 7.2)
- Alle Versionen zwischen Commit 773ba4fe9104a64a54d1c00f0fb6ffb95def2b03 und den jeweiligen Fix-Commits
- Linux Kernel Patch 0
Empfehlungen und Maßnahmen
- Systeme umgehend auf die gepatchten Kernel-Versionen aktualisieren: 6.1.177, 6.6.144, 6.12.95, 6.18.38, 7.1.3 und 7.2.
- Falls kein sofortiger Kernel-Update möglich ist, die betroffenen Fix-Commits als Sicherheits-Patch einspielen bzw. Backport vornehmen.
- Netzwerkzugriff auf UDPv6-Dienste einschränken und die Nutzung von MSG_SPLICE_PAGES durch unprivilegierte Prozesse überwachen.
- Sicherheitsmonitoring aktivieren, um auf anomales Systemverhalten oder Kernel-Panics zu reagieren.
Quellen
- https://git.kernel.org/stable/c/14200d435af9a9eeb444f529fc2f689a236b7962
- https://git.kernel.org/stable/c/65fb14cbebb0cd0eff903a22d33537ddc8b95769
- https://git.kernel.org/stable/c/46f201f8b4c39633a1fa3dc12459f506d470993d
- https://git.kernel.org/stable/c/6374fb9edf72c67a118a2c214a0dddd04c921e0a
- https://git.kernel.org/stable/c/e9eacf19281ea2498b36291b56c9606118c2d74e
- https://git.kernel.org/stable/c/736b380e28d0480c7bc3e022f1950f31fe53a7c5
REFERENZEN
- https://git.kernel.org/stable/c/14200d435af9a9eeb444f529fc2f689a236b7962
- https://git.kernel.org/stable/c/65fb14cbebb0cd0eff903a22d33537ddc8b95769
- https://git.kernel.org/stable/c/46f201f8b4c39633a1fa3dc12459f506d470993d
- https://git.kernel.org/stable/c/6374fb9edf72c67a118a2c214a0dddd04c921e0a
- https://git.kernel.org/stable/c/e9eacf19281ea2498b36291b56c9606118c2d74e
- https://git.kernel.org/stable/c/736b380e28d0480c7bc3e022f1950f31fe53a7c5