
Exposition-Checker und sicheres Einweg-VM-Labor für CVE-2026-23111 (Linux nf_tables Use-After-Free Local Privilege Escalation). Defensiv: Erkennung, Abmilderung, Multi-Distro-Labor. Kein Exploit.
Defensives Werkzeug und ein reproduzierbares Virtual-Machine-Labor für CVE-2026-23111,
den nf_tables Use-After-Free Local Privilege Escalation im Linux-Kernel (eine
invertierte Element-Aktivitätsprüfung in nft_map_catchall_activate(), der "off by !"-Bug).
Ein unprivilegierter lokaler Benutzer kann sich zu Root hochstufen und aus einem Container
ausbrechen, und zwar durch unprivilegierte User Namespaces.
Dieses Repository enthält keinen Exploit. Es enthält einen schreibgeschützten Exposure-Checker, ein Skript zum Erstellen eines wirklich unprivilegierten Benutzers sowie VM-Definitionen, damit Sie den Bug sicher erreichen und die öffentliche Forschung studieren können. Die vollständige Root-Kette befindet sich in den unten verlinkten Offenlegungen, nicht hier.
Ausführliche Beschreibung: https://techearl.com/cve-2026-23111-nftables-lpe
check-exposure.sh – schreibgeschützter Detektor: Kernelversion im Vergleich zum behobenen Build, Vorhandensein von nf_tables, die Vorbedingung des unprivilegierten User-Namespace und Crash-Signaturen im Kernel-Log.setup-unprivileged-user.sh – erstellt einen labuser ohne sudo und weist nach, dass er unprivilegiert ist. Der Sinn eines LPE-Tests ist, von einem Benutzer zu starten, der nicht bereits Root werden kann.Vagrantfile – wegwerfbare Debian 12- und AlmaLinux 10-VMs (die Distributionen, die Multipass nicht starten kann).Ein Container teilt sich den Host-Kernel. Das Ausführen eines Kernel-Exploits in einem Container führt ihn gegen Ihren echten Host-Kernel aus, sodass ein „Test“ die tatsächliche Maschine gefährden kann. Verwenden Sie eine Wegwerf-VM mit eigenem Kernel.
Multipass startet nur Ubuntu, weshalb die anderen Vagrant verwenden.
Jede Distribution benötigte einen anderen Trick, um einen echt vor-Fix-Kernel zu booten, der dennoch funktionierendes Netzwerk auf einer Cloud-VM hat:
linux-aws, nicht linux-generic. Der generische
Kernel hat keinen ENA-NIC-Treiber von AWS und verliert SSH auf einer Nitro-Instanz.
sudo apt install -y linux-image-6.8.0-1028-aws (unter dem behobenen 6.8.0-1051),
setzen Sie ihn als Standard in GRUB, rebooten. Auf lokaler Virt ist der generische Kernel in Ordnung.cloud-Kernel (behält ENA):
deb [check-valid-until=no trusted=yes] https://snapshot.debian.org/archive/debian/20251201T000000Z/ bookworm main,
dann apt install -y linux-image-6.1.0-39-cloud-amd64=6.1.148-1 (unter dem behobenen 6.1.164-1, DSA-6163-1).el10_1-Kernel befinden sich im 10.1-Vault.
Zeigen Sie dnf auf https://vault.almalinux.org/10.1/BaseOS/x86_64/os/ und
, dann .# 1. Create a real unprivileged user and prove it cannot sudo.
# (useradd, not Debian's adduser, so it works on RHEL too.)
sudo bash setup-unprivileged-user.sh labuser
# 2. Exposure verdict.
sudo ./check-exposure.sh
# 3. As labuser, the precondition, then the public nft trigger inside a netns.
sudo -u labuser unshare -Ur id # uid=0 in a new userns = precondition open
# (denied on stock Ubuntu 24.04 = mitigation working)
# The public FuzzingLabs trigger (catchall GOTO + aborted batch). Inlined here as
# documentation; this repo does not ship an executable exploit/trigger file.
sudo -u labuser unshare -Urn bash -c '
nft add table inet t; nft add chain inet t c
nft add map inet t m "{ type ipv4_addr : verdict; }"
nft add element inet t m "{ * : goto c }"
printf "delete element inet t m { * }\ndelete element inet t m { 1.2.3.4 }\n" > /tmp/b.nft
nft -f /tmp/b.nft; nft flush ruleset'
Der ehrliche Befund zum Trigger: Bei einem Standard-Produktionskernel ist er still.
Er durchläuft den fehlerhaften Abbruchpfad ohne Absturz und ohne dmesg-Ausgabe,
selbst in einer Schleife mit Frei-und-Wiederverwendung. Die KASAN: slab-use-after-free-Ausgabe
in den Berichten stammt von einem KASAN/Debug-Kernel; die Ausnutzung des latenten
Use-After-Free erfordert das Heap-Spray des Exploits (nicht in diesem Repository).
Das Labor beweist, dass der unprivilegierte Benutzer den Bug erreicht, zeigt die
Standard-AppArmor-Einschränkung von Ubuntu, die diesen Pfad blockiert, und gibt ein
klares Ergebnis EXPOSED / MITIGATED / fixed. Es gibt Ihnen keine Root-Shell, bewusst.
Schränken Sie unprivilegierte User Namespaces ein (schließt den realistischen Pfad für die öffentlichen Exploits), dann patchen Sie den Kernel.
# Ubuntu 23.10+ (AppArmor-basiert, hält legitime userns-Benutzer funktionsfähig):
echo "kernel.apparmor_restrict_unprivileged_userns=1" | sudo tee /etc/sysctl.d/99-restrict-userns.conf
sudo sysctl --system
# Elsewhere (blanket disable; set both on Debian/Ubuntu):
printf 'kernel.unprivileged_userns_clone=0\nuser.max_user_namespaces=0\n' | sudo tee /etc/sysctl.d/99-restrict-userns.conf
sudo sysctl --system
# Patch (Ubuntu 24.04 generic fixed at 6.8.0-107.107):
sudo apt update && sudo apt install --only-upgrade linux-image-generic && sudo reboot
MIT. Defensiv und zu Bildungszwecken.
| Distro | Starten mit | Grund |
|---|
| Ubuntu 24.04 / 22.04 | Multipass (nur Ubuntu) | Exodus wurde auf beiden reproduziert; 24.04 liefert die AppArmor-User-Namespace-Einschränkung standardmäßig aktiviert aus, sodass die Abschwächung gezeigt wird. |
| Debian 12 | Vagrant (vagrant up debian) | Exodus wurde darauf reproduziert; unprivilegierte User-Namespaces sind standardmäßig offen. |
| AlmaLinux / Rocky 10.1 | Vagrant (vagrant up alma) | Entspricht dem Zielkernel 6.12.0-124.x.el10 von FuzzingLabs, sodass ihr öffentlicher Trigger wie veröffentlicht reproduziert wird. |
dnf install kernel-6.12.0-124.38.1.el10_1grubby --set-default| Distribution | Gestarteter verwundbarer Kernel | userns Standard | Ergebnis |
|---|
| Ubuntu 24.04 | 6.8.0-1028-aws | restricted (AppArmor) | MITIGATED, not fixed |
| Debian 12 | 6.1.0-39-cloud (6.1.148-1) | offen | EXPOSED |
| AlmaLinux 10.1 | 6.12.0-124.38.1.el10_1 | offen | EXPOSED |