Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2023-32233-reproduction — Reproduktion und Ursachenanalyse von CVE-2023-32233, einem Use-after-free in Linux-Kernel-nf_tables, der lokale Rechteausweitung ermöglicht, mit PoC und Exploit-Hinweisen. | Kitploit
Tools/GitHubGitHub/adeadukagi/cve-2023-32233-reproduction
DefensivwerkzeugePrivilege EscalationSpeicherforensikSchwachstellenanalyseExploitationPapers & ForschungLernen & BildungBinary-Exploitation

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
GitHub
adeadukagi/cve-2023-32233-reproduction

CVE-2023-32233-reproduction

Reproduktion und Ursachenanalyse von CVE-2023-32233, einem Use-after-free in Linux-Kernel-nf_tables, der lokale Rechteausweitung ermöglicht, mit PoC und Exploit-Hinweisen.

Repository anzeigen
1vor 1 MonatNoch nicht geprüft
Teilen

CVE-2023-32233 — nf_tables Use-After-Free: Reproduktion & Ursachenanalyse

Worum es in diesem Repo geht: meine praktische Reproduktion und Untersuchung von CVE-2023-32233, einem Use-After-Free im Netfilter-nf_tables-Subsystem des Linux-Kernels, das lokale Rechteausweitung ermöglicht und im Mai 2023 von Patryk Sondej und Piotr Krysiuk öffentlich bekannt gegeben wurde.

Danksagung: der PoC (exploit.c) und der ursprüngliche Write-up stammen von @Liuk3r. Meine Arbeit in diesem Repo besteht darin, den Exploit in meinem eigenen Labor (Ubuntu 23.04, Kernel 6.2.0-20) zu reproduzieren und die Ursache sowie die Exploit-Kette unten zu dokumentieren. Alle Tests wurden auf dedizierten Laborrechnern durchgeführt.


Meine Analysenotizen

Ursache

nf_tables verarbeitet Konfigurationsaktualisierungen als atomaren Batch. Die Validierung jeder Operation gegen die Zustandsänderungen von vorherigen Operationen im selben Batch ist unzureichend. Konkret:

  1. Beginne mit einer nft_rule, die einen lookup-Ausdruck auf einem anonymen enthält, das einige Elemente hält.
nft_set
  • Sende einen Batch mit zwei Operationen:
    • NFT_MSG_DELRULE — löscht die Regel, was implizit den lookup-Ausdruck und das anonyme nft_set löscht;
    • NFT_MSG_DELSETELEM — löscht ein Element des bereits gelöschten anonymen Sets.
  • Der Batch wird akzeptiert. nf_tables_commit_release() reiht Ressourcen in nf_tables_destroy_list ein, die später von nf_tables_trans_destroy_work() verarbeitet werden:
    • zuerst nft_commit_release() → nf_tables_rule_destroy() → nft_lookup_destroy() → nft_set_destroy() → kvfree() gibt das nft_set frei;

    • dann ruft für NFT_MSG_DELSETELEM nf_tables_set_elem_destroy() nft_set_elem_ext() auf, was das freigegebene nft_set dereferenziert:

      root@kitploit:~
      static inline struct nft_set_ext *nft_set_elem_ext(const struct nft_set *set,
                                                         void *elem)
      {
          return elem + set->ops->elemsize;
      }
      
  • Wenn set->ops->elemsize korrumpiert ist, wird eine vom Angreifer gewählte Speicherstelle als nft_set_ext interpretiert — das Primitiv, auf dem alles Weitere aufbaut.

    Exploit-Kette (wie reproduziert)

    1. Das Rennen gewinnen gegen nf_tables_trans_destroy_work(), das auf einem Hintergrund-Worker-Thread läuft: eine große Set-Destroy-Operation als kontrollierte Verzögerung einfügen, andere CPUs beschäftigt halten und den freigegebenen nft_set-Chunk von derselben CPU mit einem nft_set eines anderen Typs (anderes elemsize) neu belegen → Typverwechslung.
    2. Korrupte nft_set_ext-Header mit außerhalb des gültigen Bereichs liegenden Offsets erzeugen, sodass nf_tables_set_elem_destroy() benachbarte Chunks als Liste von nft_expr durchläuft, um sie zu zerstören.
    3. nft_log-Ausdrücke mit kontrolliertem NFTA_LOG_PREFIX sprayen; nft_log_destroy() gibt priv->prefix frei, was ein überlappendes Allokationsprimitiv in kmalloc-{8..192} liefert (zunächst durch NULL-Bytes eingeschränkt).
    4. Mit nft_object->udata zurückgewinnen, um die NULL-Byte-Beschränkung beim Dangling-Read aufzuheben.
    5. nft_dynset-Element-Spray für zwei zustandsbehaftete Ausdruckstypen:
      • nft_counter — leakt nft_counter_ops → Basis von nf_tables.ko (umgeht KASLR für das Modul);
      • nft_quota — der consumed-Zeiger ermöglicht beliebiges Lesen (NFT_MSG_GETSETELEM → nft_quota_do_dump() → NFTA_QUOTA_CONSUMED) und beliebiges Schreiben (nft_overquota() addiert skb->len zu *priv->consumed bei Loopback-Verkehr).
    6. modprobe_path überschreiben ("/sbin/modprobe" → "//tmp/modprobe") → Ausführung eines Root-Prozesses mit vom Angreifer kontrolliertem Inhalt.

    Bemerkenswert ist, dass die gewählten Primitive alles vermeiden, was CFI blockieren würde — zu keinem Zeitpunkt ist eine Indirect-Call-Übernahme erforderlich.

    Defensive Erkenntnisse

    • Fix: Upstream validiert Batch-Operationen gegen den vollständigen Transaktionszustand; gepatchte Kernel lehnen die DELRULE+DELSETELEM-Sequenz auf dem anonymen Set ab. Siehe die im NVD-Eintrag referenzierten Fixing-Commits.
    • Mitigations, die die Hürde erhöhen: Slab-Freelist-Hardening (SLAB_FREELIST_HARDENED), INIT_ON_FREE und Einschränkungen der per-CPU-Slab-Wiederverwendung greifen alle Schritt 1 an; CFI (wo vorhanden) beschränkt Schritt 3+.
    • Erkennungsideen: Audit-Regeln auf nf_tables-Batch-Netlink-Nachrichten, die DELRULE+DELSETELEM auf anonymen Sets enthalten; Crash-Triage für nft_set_elem_ext / nf_tables_trans_destroy_work im Stack.
    • Reduzierung der Angriffsfläche: nftables erfordert CAP_NET_ADMIN, aber unprivilegierte User-Namespaces gewähren es — deshalb ist kernel.unprivileged_userns_clone=0 ein sinnvoller Hardening-Schalter.

    Reproduktionsanleitung

    Getestet unter Ubuntu 23.04 (Lunar Lobster), Kernel 6.2.0-20-generic.

    Build-Abhängigkeiten installieren

    root@kitploit:~
    sudo apt install gcc libmnl-dev libnftnl-dev
    

    Binary bauen

    root@kitploit:~
    gcc -Wall -o exploit exploit.c -lmnl -lnftnl
    

    Profil

    Das eingebaute Profil zielt auf die Ubuntu-23.04-Binärkernel (linux-image-6.2.0-20-generic 6.2.0-20.20). Um andere Kernel zu testen, extrahiere Symbole in eine profile-Datei:

    root@kitploit:~
    modprobe nf_tables
    egrep ' (nft_counter_ops|nft_counter_destroy|free_percpu|modprobe_path)(\s|$)' /proc/kallsyms > profile
    

    Das Maschinencode-Layout von nft_counter_destroy() variiert je nach Compiler und Optionen; siehe ORIGIN.md für die vollständige Parameterreferenz (nft_counter_destroy_call_offset/mask/check) und Race-Tuning-Schalter (race_lead_sleep usw.). Die berichtete Erfolgswahrscheinlichkeit liegt bei ≥80 % auf unbelasteten Bare-Metal-Intel- Systemen; einige Mikroarchitekturen (z. B. Alder Lake) benötigen zusätzliches Tuning.

    Sicherheitswarnung

    Der PoC hinterlässt den Kernel nach einem erfolgreichen Lauf in einem instabilen Zustand mit korrumpiertem Speicher. Nur auf einem dedizierten, entbehrlichen System oder VM-Snapshot testen — niemals auf etwas mit Daten, die dir wichtig sind.


    Dateien

    • exploit.c — PoC-Quellcode (von @Liuk3r)
    • ORIGIN.md — ursprünglicher Write-up zu Schwachstelle & Ausnutzung (von Liuk3r)
    • README.md — diese Datei: Reproduktion + meine Analysenotizen

    Referenzen

    • NVD — CVE-2023-32233
    • Liuk3r/CVE-2023-32233 — ursprünglicher PoC & Write-up
    • Theori — CVE-2023-32233: Linux Kernel Privilege Escalation Analysis

    Forschung für defensive/edukative Zwecke in einer isolierten Laborumgebung durchgeführt.

    Tool herunterladen