Zum Inhalt springen
CVE-2026-53362HighCVSS: 7.8

Linux-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