Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2023-32233-reproduction — Riproduce CVE-2023-32233, un use-after-free di nf_tables nel kernel Linux che porta a un'escalation locale dei privilegi. Include il codice sorgente del PoC, l'analisi della causa principale, la scomposizione della catena di sfruttamento e note difensive su rilevamento e mitigazione. | Kitploit
Strumenti/GitHubGitHub/burnskyup/cve-2023-32233-reproduction
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitApprendimento e FormazioneBinary Exploitation
GitHubburnskyup/cve-2023-32233-reproduction

CVE-2023-32233-reproduction

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →

Informazioni

Riproduce CVE-2023-32233, un use-after-free di nf_tables nel kernel Linux che porta a un'escalation locale dei privilegi. Include il codice sorgente del PoC, l'analisi della causa principale, la scomposizione della catena di sfruttamento e note difensive su rilevamento e mitigazione.

12 giorni faNon ancora revisionato
Condividi

CVE-2023-32233 — nf_tables Use-After-Free: riproduzione e analisi della causa principale

Cosa contiene questo repository: la mia riproduzione pratica e lo studio di CVE-2023-32233, un use-after-free nel sottosistema Netfilter nf_tables del kernel Linux che consente l'escalation locale dei privilegi, divulgato pubblicamente a maggio 2023 da Patryk Sondej e Piotr Krysiuk.

Riconoscimenti: il PoC (exploit.c) e il write-up originale sono di @Liuk3r. Il mio lavoro in questo repository consiste nel riprodurre l'exploit nel mio laboratorio (Ubuntu 23.04, kernel 6.2.0-20) e nel documentare la causa principale e la catena di sfruttamento qui sotto. Tutti i test sono stati eseguiti su macchine di laboratorio dedicate.


Le mie note di analisi

Causa principale

nf_tables elabora gli aggiornamenti di configurazione come un batch atomico. La validazione di ogni operazione rispetto alle modifiche di stato delle operazioni precedenti nello stesso batch è insufficiente. In concreto:

  1. Si parte con una nft_rule contenente un'espressione lookup su un nft_set anonimo che contiene alcuni elementi.
  2. Si invia un batch con due operazioni:
    • NFT_MSG_DELRULE — elimina la regola, che implicitamente elimina l'espressione lookup e il nft_set anonimo;
    • NFT_MSG_DELSETELEM — elimina un elemento del set anonimo già eliminato.
  3. Il batch viene accettato. nf_tables_commit_release() accoda le risorse su nf_tables_destroy_list, elaborate successivamente da nf_tables_trans_destroy_work():
    • prima nft_commit_release() → nf_tables_rule_destroy() → nft_lookup_destroy() → nft_set_destroy() → kvfree() libera il nft_set;

    • poi, per NFT_MSG_DELSETELEM, nf_tables_set_elem_destroy() chiama nft_set_elem_ext() che dereferenzia il nft_set liberato:

Se set->ops->elemsize viene corrotto, una posizione di memoria scelta dall'attaccante viene interpretata come un nft_set_ext — la primitiva su cui si basa tutto il resto.

Catena di sfruttamento (come riprodotta)

  1. Vincere la gara contro nf_tables_trans_destroy_work() in esecuzione su un thread worker in background: inserire una grande operazione di distruzione del set come ritardo controllato, tenere occupate le altre CPU e riallocare il chunk nft_set liberato dalla stessa CPU con un nft_set di tipo diverso (elemsize diverso) → type confusion.
  2. Creare header nft_set_ext corrotti con offset fuori intervallo, così nf_tables_set_elem_destroy() scorre i chunk adiacenti come una lista di nft_expr da distruggere.
  3. Effettuare spray di espressioni nft_log con NFTA_LOG_PREFIX controllato; nft_log_destroy() libera priv->prefix, fornendo una primitiva di allocazione sovrapposta in kmalloc-{8..192} (limitata dal byte NULL all'inizio).
  4. Riconquistare con nft_object->udata per rimuovere la restrizione del byte NULL sulla lettura dangling.

È interessante notare che le primitive scelte evitano qualsiasi cosa la CFI bloccherebbe — non è necessario alcun hijacking di chiamate indirette in nessun passaggio.

Considerazioni difensive

  • Correzione: il kernel upstream valida le operazioni del batch rispetto allo stato completo della transazione; i kernel patchati rifiutano la sequenza DELRULE+DELSETELEM sul set anonimo. Vedere i commit di correzione citati nella voce NVD.
  • Mitigazioni che alzano l'asticella: l'hardening della freelist degli slab (SLAB_FREELIST_HARDENED), INIT_ON_FREE e le restrizioni sul riutilizzo degli slab per-CPU attaccano tutte il passaggio 1; la CFI (dove presente) limita il passaggio 3+.
  • Idee per il rilevamento: regole di audit sui messaggi netlink di batch nf_tables che contengono DELRULE+DELSETELEM su set anonimi; triage dei crash per nft_set_elem_ext / nf_tables_trans_destroy_work nello stack.
  • Riduzione della superficie d'attacco: nftables richiede CAP_NET_ADMIN, ma gli user namespace non privilegiati lo concedono — ecco perché kernel.unprivileged_userns_clone=0 è un parametro di hardening significativo.

Guida alla riproduzione

Testato su Ubuntu 23.04 (Lunar Lobster), kernel 6.2.0-20-generic.

Installazione delle dipendenze di compilazione

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

Compilazione del binario

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

Profilo

Il profilo integrato è pensato per i kernel binari di Ubuntu 23.04 (linux-image-6.2.0-20-generic 6.2.0-20.20). Per testare altri kernel, estrai i simboli in un file profile:

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

Il layout del codice macchina di nft_counter_destroy() varia in base a compilatore e opzioni; vedere ORIGIN.md per il riferimento completo dei parametri (nft_counter_destroy_call_offset/mask/check) e per le manopole di regolazione della gara (race_lead_sleep ecc.). La probabilità di successo riportata è ≥80% su sistemi Intel bare-metal in idle; alcune microarchitetture (es. Alder Lake) richiedono ulteriori regolazioni.

Avvertenza di sicurezza

Il PoC lascia il kernel in uno stato instabile con memoria corrotta dopo un'esecuzione riuscita. Testare solo su un sistema dedicato e usa-e-getta o su uno snapshot di una VM — mai su qualcosa che contenga dati a cui tieni.


File

  • exploit.c — sorgente del PoC (di @Liuk3r)
  • ORIGIN.md — write-up originale della vulnerabilità e dello sfruttamento (di Liuk3r)
  • README.md — questo file: riproduzione + le mie note di analisi

Riferimenti

  • NVD — CVE-2023-32233
  • Liuk3r/CVE-2023-32233 — PoC e write-up originali
  • Theori — CVE-2023-32233: analisi dell'escalation dei privilegi nel kernel Linux

Ricerca condotta a scopo difensivo/educativo in un ambiente di laboratorio isolato.

Scarica lo strumento
root@kitploit:~
static inline struct nft_set_ext *nft_set_elem_ext(const struct nft_set *set,
                                                   void *elem)
{
    return elem + set->ops->elemsize;
}
  • Spray di elementi nft_dynset per due tipi di expr stateful:
    • nft_counter — fa trapelare nft_counter_ops → base di nf_tables.ko (aggira KASLR per il modulo);
    • nft_quota — il puntatore consumed consente lettura arbitraria (NFT_MSG_GETSETELEM → nft_quota_do_dump() → NFTA_QUOTA_CONSUMED) e scrittura arbitraria (nft_overquota() aggiunge skb->len a *priv->consumed sul traffico di loopback).
  • Sovrascrivere modprobe_path ("/sbin/modprobe" → "//tmp/modprobe") → esecuzione di un processo root con contenuto controllato dall'attaccante.