Linux-Kernel: Vier Local-Root-Exploits veröffentlicht — DirtyAH6, TUNderflow, PPPoEject, DiagSpill

Was geschah

Der Sicherheitsforscher Asim Manizada hat am 18. September funktionierende Exploit-Codes für vier Linux-Kernel-Schwachstellen veröffentlicht, die jeweils lokale Privilegieneskalation bis root ermöglichen. Die Bugs tragen die Namen DirtyAH6, TUNderflow, PPPoEject und DiagSpill — und sie sind alt. Zwischen 10 und 21 Jahre lebten sie im Kernel, unentdeckt, bis Manizadas KI-gestützte Analyse sie fand.

Alle vier sind mittlerweile im Mainline-Kernel behoben. Wer einen aktuellen Kernel fährt, ist sicher. Wer nicht patcht und einen älteren Kernel einsetzt, sollte das schnellstens ändern — die Exploits sind öffentlich auf GitHub verfügbar.


Die vier Schwachstellen

DirtyAH6 — CVE-2026-80844

  • Komponente: IPsec Authentication Header für IPv6 (AH6/XFRM)
  • CVE: CVE-2026-80844
  • Voraussetzung: Unprivileged User Namespaces (für LPE), CAP_NET_ADMIN + CAP_NET_RAW
  • Remote möglich: Ja, aber nur unter engen Bedingungen — Host muss IPv6-Router/Gateway sein und AH im Transport-Mode einsetzen. Remote-Root nur im Lab mit vorherigem Memory-Grooming erreicht.

Der Bug sitzt in ipv6_rearrange_rthdr(). Die Funktion liest die Anzahl Adressen aus hdrlen und nutzt segments - segments_left, um einen Adress-Zeiger zu verschieben — ohne vorher zu prüfen, ob segments_left <= segments. Ein crafted IPv6-Paket mit hdrlen=2 und segments_left=255 verschiebt den Zeiger um 4.064 Bytes aus dem Buffer heraus und übergibt diese Länge an memmove(). Out-of-Bounds-Write.

Der Exploit korruptiert skb_shared_info über einen separaten AH6-Routing-Header-OOB und bringt einen nachfolgenden ESP-Decrypt dazu, in ein file-backed Fragment zu schreiben — und ersetzt dabei pam_rootok.so durch pam_permit.so. Ein su reicht danach für root.

TUNderflow — CVE-2026-81000

  • Komponente: TUN/TAP virtuelle Netzwerkgeräte
  • CVE: CVE-2026-81000
  • CVSS: 7.8 (High)
  • Voraussetzung: Unprivileged User Namespaces, TUN/TAP-Support
  • Remote möglich: Nein

tun_set_headroom() speichert den Receive-Headroom direkt in tun->align. tun_get_user() nutzt denselben Wert sowohl als reservierten Platz als auch als Größe. Ein netkit-Device mit 4.096 Bytes konfiguriertem Headroom, unter einem VXLAN-Device und einem Open vSwitch-Datapath, kann 4.160 Bytes an einen raw TUN-Port weitergeben. Dann unterläuft SKB_MAX_HEAD(4160) — der negative good_linear-Wert wird zu einem riesigen size_t, und tun_alloc_skb() platziert skb->data 64 Bytes hinter seiner 4.096-Byte-Allokation. Die nachfolgende Paketverarbeitung liest und schreibt außerhalb des skb-Heads.

Der Exploit arrangiert file-backed Pipe-Buffer neben dem fehlerhaften TUN-Paket. Der OOB-Write setzt PIPE_BUF_FLAG_CAN_MERGE auf einen davon, und ein Pipe-Write ersetzt pam_rootok.so durch pam_permit.so.

PPPoEject — CVE-2026-68121

  • Komponente: PPP over Ethernet (PPPoE)
  • CVE: CVE-2026-68121
  • Voraussetzung: Unprivileged User Namespaces, PPPoE-Support
  • Remote möglich: Nein

pppoe_sendmsg() hält einen Zeiger in den skb-Head, während es dev_hard_header() aufruft. Ein Device-Callback kann dabei pskb_expand_head() triggern und den alten Head freigeben. PPPoE schreibt danach in den freigegebenen Speicher — ein klassischer Use-After-Free.

Der Exploit racet gefüllte FD-Tables in den freigegebenen skb-Head und nutzt die PPPoE-Writes, um einen Live-Eintrag auf ein gefälschtes struct file umzuleiten. Schließen dieses FDs ruft einen kontrollierten Kernel-Callback auf, installiert root-Credentials und öffnet eine root-Shell.

DiagSpill — CVE-2026-74469

  • Komponente: SCTP-Diagnostik (sctp_diag)
  • CVE: CVE-2026-74469
  • Voraussetzung: Keine. Keine User Namespaces, keine speziellen CAPs. SCTP + sctp_diag müssen verfügbar sein.
  • Remote möglich: Crash/DoS ja, Remote-Root nein

Eine SCTP-Assoziation kann 65.536 Peer-Transports haben. transport_count ist aber nur 16 Bit breit — der 65.536ste Transport setzt den Zähler auf 0 zurück. sctp_diag reserviert daraufhin keinen Platz für die Peer-Liste, kopiert aber die volle Liste — und überschreibt etwa 8 MiB über das Ende des Netlink-Response-Buffers hinaus.

Remote-Crash ist möglich, wenn ASCONF/ADD-IP aktiviert sind (standardmäßig aus) und entweder SCTP-AUTH oder net.sctp.addip_noauth_enable=1 steht. Ein bösartlicher Peer fügt genug Transports hinzu, und ein ss-Aufruf auf dem Target triggert die Überschreibung. Remote-Root sieht Manizada auch mit perfektem Memory-Grooming nicht als realistischen Pfad.

Der Exploit groomed die sock_diag-Überschreibung in Page Tables, nutzt die korruptierten Page Tables um Host-Memory zu mappen, findet und überschreibt ein Credential-Objekt, installiert eine sudoers-Regel und öffnet eine root-Shell.


Überblick

NameCVEKernel-BereichUser-NS nötig?Remote?
DirtyAH6CVE-2026-80844IPsec AH6 (IPv6)JaCrash unter engen Bedingungen; Remote-Root nur im Lab
TUNderflowCVE-2026-81000TUN/TAPJaNein
PPPoEjectCVE-2026-68121PPPoEJaNein
DiagSpillCVE-2026-74469SCTP (sctp_diag)NeinCrash unter engen Bedingungen; kein Remote-Root

Drei der vier Lücken brauchen unprivileged User Namespaces — ein Linux-Feature, das normalen Usern erlaubt, als root in einer privaten Sandbox zu agieren. Die meisten Distributionen aktivieren dies standardmäßig. DiagSpill ist die Ausnahme: Es braucht weder User Namespaces noch besondere Privilegien, solange SCTP und sctp_diag verfügbar sind.


Betroffene Kernel-Versionen

Die Bugs sind alt — zwischen 10 und 21 Jahre. Die ersten stabilen Kernel-Releases mit allen vier Fixes:

  • 5.10.270
  • 5.15.221
  • 6.1.188
  • 6.6.157
  • 6.12.109
  • 6.18.50
  • 7.2.4

Wer eine Distribution nutzt (Debian, Ubuntu, Red Hat, SUSE), sollte das jeweilige Security-Advisory prüfen — Distros verwenden eigene Versionsnummern und backporten die Fixes nach eigenem Zeitplan.


Was tun

Patchen. Das ist die einzig echte Lösung. Manizada empfiehlt ausdrücklich, zu patchen statt Features zu deaktivieren — es könnten andere Pfade zu denselben Bugs existieren.

Wenn Patchen kurzfristig nicht möglich ist:

  • Unprivileged User Namespaces deaktivieren — schließt den Ordinary-User-Pfad zu DirtyAH6, TUNderflow und PPPoEject. DiagSpill bleibt erreichbar. Container oder Prozesse mit entsprechenden CAPs sind ebenfalls nicht geschützt.
  • Betroffene Features deaktivieren, wenn ungenutzt: AH6, TUN/TAP, PPPoE, SCTP/sctp_diag.

KI-gestützte Bug-Jagd

Manizada fand die vier Lücken mit einem KI-gestützten Prozess, der eine Karte der Kernel-Memory-Verwaltung baut und über die Memory-Layout-Geometrie nachdenkt. Der Kernel-Commit für DirtyAH6 enthält eine Assisted-by-Zeile, die sein KI-Tooling creditiert.

Das ist Teil eines längeren Trends: 2026 sah eine Reihe von Linux-Kernel-LPEs, mehrere davon mit Hilfe von LLMs gefunden. Manizada selbst disclosed im Juli OVSwrap, eine ähnliche Open vSwitch-Lücke. Einer der neuen Exploits nutzt auch eine Technik aus Dirty Frag (CVE-2026-43284), einer anderen Kernel-Root-Lücke von Mai 2026.

Manizada schreibt, dass dieser Batch wahrscheinlich die öffentliche Phase seines KI-gestützten Bug-Huntings abschließt.


Eigene Systeme prüfen

Schneller Check, ob der eigene Kernel verwundbar ist:

# Kernel-Version prüfen
uname -r

# User-Namespaces-Status
cat /proc/sys/kernel/unprivileged_userns_clone 2>/dev/null || echo "nicht gesetzt"

# SCTP-Modul verfügbar?
modprobe -n sctp_diag 2>/dev/null && echo "verfügbar" || echo "nicht verfügbar"

Wer auf dem Proxmox-Host oder den LXC-Containern einen Kernel < 7.2.4 fährt (bzw. den entsprechenden Distro-Äquivalenten), sollte die Distro-Advisories checken. Bei uns läuft der Host auf 7.0.2-6-pve — PVE backportet die Fixes in den eigenen Kernel, also das Proxmox-Security-Advisory prüfen.


Quellen