
Script per verificare se i sistemi sono vulnerabili a cve-2026-23111
CVE-2026-23111 è una vulnerabilità del kernel Linux in nf_tables che può essere sfruttata per l'escalation locale dei privilegi da parte di un utente non privilegiato su sistemi in cui gli user namespace e nftables sono disponibili.[1][2] I bollettini pubblici dei vendor e governativi la descrivono come un problema locale che interessa le distribuzioni Linux e sottolineano l'applicazione delle patch come soluzione primaria.[3][4]
Questo repository contiene uno script di validazione difensiva progettato per aiutare a valutare se un host espone le condizioni tecniche associate a questa CVE senza fornire un exploit per l'escalation dei privilegi. Verifica le condizioni rilevanti del kernel e del runtime, carica opzionalmente il modulo nf_tables per test funzionali completi, tenta un percorso di validazione controllato non privilegiato usando unshare e nft, raccoglie tracce diagnostiche locali e classifica l'host in verdetti operativi come "probabilmente sicuro", "bloccato da policy locale" o "percorso esposto disponibile".[1][5]
Secondo l'NVD, CVE-2026-23111 è una vulnerabilità del kernel Linux risolta come correzione di un bug logico in netfilter ed è sfruttabile per l'escalation locale dei privilegi da parte di un utente non privilegiato tramite user namespace e nftables sulle configurazioni interessate.[1] L'avviso di sicurezza di Ubuntu descrive lo stesso percorso di sfruttamento ad alto livello e traccia gli stati dei pacchetti interessati e corretti per release.[2]
nf_tablesRed Hat dichiara che un utente locale con privilegi bassi potrebbe sfruttare il problema per causare denial of service o potenzialmente ottenere l'escalation dei privilegi, e documenta un percorso di mitigazione basato sull'impedire il caricamento del modulo nf_tables quando ciò è operativamente accettabile.[3] Anche le linee guida a livello nazionale del Canadian Centre for Cyber Security indirizzano le organizzazioni colpite agli aggiornamenti dei vendor e menzionano la rigenerazione dell'initramfs quando vengono utilizzate mitigazioni di blocco dei moduli.[4]
Lo script è pensato per la valutazione difensiva dell'esposizione, non per lo sfruttamento. È progettato per:
CONFIG_USER_NS e CONFIG_NF_TABLES risultano presenti.[1]kernel.unprivileged_userns_clone e user.max_user_namespaces per stimare se gli user namespace non privilegiati sono disponibili.install nf_tables /bin/false) o una blacklist debole per il modulo nf_tables./proc/kallsyms per il simbolo vulnerabile (nft_map_catchall_activate) rispetto al simbolo post-patch (nft_catchall_set_activate) prima di qualsiasi interazione con il modulo.nf_tables tramite modprobe quando viene specificato --allow-load-module (vedi sotto) e scaricarlo automaticamente all'uscita.unshare -U -n --map-root-user + nft quando il modulo è caricato, e registrare stdout, stderr e i log recenti del kernel.unshare --user crei effettivamente un namespace e che CAP_NET_ADMIN sia funzionante al suo interno, per confermare se le restrizioni AppArmor o SELinux sono realmente efficaci.Lo script salva i log in una sottodirectory della directory dello script e li rimuove per impostazione predefinita a meno che non venga usato --keep-logs.
Per impostazione predefinita lo script non carica mai nf_tables. Se il modulo non è già caricato all'avvio dello script, tutti i test funzionali nft vengono saltati e il verdetto deriva esclusivamente dalla versione del kernel, dall'impronta kallsyms, dalla configurazione di modprobe, dal changelog RPM e dalle evidenze di policy sysctl/LSM.
Questa impostazione predefinita conservativa evita di espandere involontariamente la superficie d'attacco sugli host di produzione. Per abilitare test funzionali completi su un sistema controllato o strumentato, usa --allow-load-module come root (vedi sotto).
# Default — no module loading, policy-evidence-only verdict
./check_cve_2026_23111.sh
./check_cve_2026_23111.sh --color
./check_cve_2026_23111.sh --keep-logs
./check_cve_2026_23111.sh --color --keep-logs
# Full functional test — loads (and unloads) nf_tables, requires root
sudo ./check_cve_2026_23111.sh --allow-load-module
sudo ./check_cve_2026_23111.sh --allow-load-module --color --keep-logs
| Opzione | Descrizione |
|---|---|
--allow-load-module | Autorizza lo script a caricare nf_tables tramite modprobe se il modulo non è già caricato. Abilita l'esercitatore completo del percorso catchall nft e il test di efficacia di CAP_NET_ADMIN. Il modulo viene scaricato automaticamente all'uscita. Richiede root. Rifiutato se è già in atto un deny modprobe rigido. Utilizzare solo su sistemi non di produzione o strumentati. |
--color | Abilita l'output stdout colorato quando il terminale lo supporta. |
--keep-logs | Mantiene i log e le tracce nella directory dello script invece di eliminarli all'uscita. |
--help | Stampa le informazioni di utilizzo ed esce. |
--allow-load-moduleUsa --allow-load-module quando hai bisogno del verdetto con la massima affidabilità su una VM di test isolata, non di produzione o dedicata. Scenari tipici:
Non usare --allow-load-module su host di produzione in cui nf_tables è bloccato intenzionalmente o dove il suo caricamento violerebbe una policy di hardening.
--allow-load-modulePrima di tentare di caricare il modulo, lo script applica i seguenti controlli ed esce con un errore se uno di essi fallisce:
install nf_tables /bin/false) non deve essere presente in /etc/modprobe.d/.modprobe deve essere disponibile sul sistema.root (uid 0).Se il modulo viene caricato con successo dallo script, modprobe -r nf_tables viene chiamato all'uscita tramite il trap cleanup(), indipendentemente da come termina lo script (successo, errore o CTRL+C).
Lo script usa verdetti operativi piuttosto che esiti di sfruttamento:
| Verdetto | Significato |
|---|---|
not-affected | La versione del kernel è inferiore alla 5.13; la funzionalità degli elementi catchall non era ancora stata introdotta e il percorso di codice vulnerabile è assente. |
likely-patched-vendor-confirmed | CVE-2026-23111 è stata trovata nel changelog RPM del kernel del vendor, confermando una correzione backportata indipendentemente dalla versione upstream. |
likely-patched-upstream-confirmed | La versione del kernel è nell'intervallo upstream corretto e il test funzionale nft ha restituito un valore non zero senza segnali dal kernel — la più forte evidenza statica e dinamica di uno stato sicuro. |
likely-patched-upstream | La versione del kernel è in un intervallo upstream corretto ma il test funzionale non è stato eseguito (modulo assente o non conclusivo). Lo stato del bollettino del vendor dovrebbe comunque essere verificato. |
likely-safe-or-patched | Nessun percorso sfruttabile è stato confermato dallo script; la causa è ambigua tra un kernel corretto, codice vulnerabile assente o un blocco locale implicito. |
blocked-by-local-policy | Il percorso testato risulta bloccato da AppArmor, SELinux, restrizioni sugli user namespace o un deny modprobe.[6] I blocchi di policy non sostituiscono la correzione del vendor. |
exposed-path-available | L'host espone un percorso userns + nftables compatibile con i prerequisiti di sfruttamento documentati.[1][5] |
strong-signal-lab-confirmation | È stato osservato un segnale nei log del kernel coerente con una corruzione di memoria correlata a nf_tables. Confermare solo in un lab strumentato e monouso. |
prerequisites-missing | Mancano gli strumenti diagnostici richiesti (unshare, nft); nessuna validazione runtime significativa è stata completata. |
Questi verdetti sono pensati per supportare la prioritizzazione delle patch e il triage difensivo, non per sostituire la validazione dello stato dei pacchetti del vendor.
Lo script mappa il kernel in esecuzione rispetto ai punti di correzione upstream documentati:
| Ramo | Corretto in | Commit upstream |
|---|---|---|
| 6.13.x+ | ≥ 6.13.1 | f41c5d1 |
| 6.12.x | ≥ 6.12.12 | 8c760ba |
| 6.6.x | ≥ 6.6.75 | b9b6573 |
| 6.1.x | ≥ 6.1.128 | 8b68a45 |
| 6.2–6.5, 6.7–6.11 | EOL upstream | solo backport della distro |
| 5.15.x | dipende dalla distro | Amazon Linux: ALAS2KERNEL-5.15-2026-098 |
| 5.10.x | dipende dalla distro | Amazon Linux 2: in attesa al 2026-03 |
| 5.4.x | dipende dalla distro | Amazon Linux 2: in attesa al 2026-03 |
| 5.13–5.14 | EOL upstream | solo backport della distro |
| < 5.13 | non interessato | funzionalità catchall non presente |
L'azione principale consigliata è installare l'aggiornamento del kernel corretto dal vendor e riavviare con il kernel corretto.[2][3][4] Poiché lo sfruttamento dipende dalla superficie d'attacco locale del kernel, un hardening aggiuntivo può ridurre l'esposizione mentre si pianifica o si valuta l'applicazione delle patch.[5][6]
nf_tables se il sistema non richiede la funzionalità nftables e la modifica è stata validata per l'impatto operativo.[3][4]CAP_NET_ADMIN e ridurre il numero di account che possono manipolare lo stato del firewall.[5]Limitare gli user namespace non privilegiati:
echo 'kernel.unprivileged_userns_clone=0' > /etc/sysctl.d/99-cve-2026-23111.conf
echo 'user.max_user_namespaces=0' >> /etc/sysctl.d/99-cve-2026-23111.conf
sysctl --load /etc/sysctl.d/99-cve-2026-23111.conf
Bloccare il caricamento del modulo nf_tables quando è operativamente sicuro:
echo 'install nf_tables /bin/false' > /etc/modprobe.d/disable-nf_tables.conf
rmmod nf_tables 2>/dev/null || true
Se viene utilizzata una mitigazione sul caricamento dei moduli, alcune linee guida raccomandano di rigenerare l'initramfs affinché il modulo bloccato non venga caricato durante l'avvio iniziale.[4]
Ubuntu documenta le restrizioni basate su AppArmor per gli user namespace non privilegiati come un modo per ridurre la superficie d'attacco piuttosto che come un sostituto completo delle correzioni del kernel.[6] Un host può apparire meno esposto nei test runtime perché il percorso d'attacco è bloccato localmente, mentre la remediation a lungo termine richiede comunque l'installazione del pacchetto kernel corretto dal vendor.[2][6] Lo script valida l'efficacia delle restrizioni AppArmor tentando un'invocazione reale di unshare --user e verificando se CAP_NET_ADMIN all'interno di un namespace user+net è funzionante.
Red Hat elenca esplicitamente l'impedimento del caricamento del modulo nf_tables come mitigazione per CVE-2026-23111 quando tale modifica è appropriata per l'ambiente.[3] Lo script rileva questa configurazione tramite check_modprobe_deny() e distingue tra un deny rigido (install nf_tables /bin/false, che blocca il caricamento on-demand) e una blacklist debole (che non lo blocca). Sui sistemi della famiglia RHEL lo script ispeziona anche il changelog RPM del kernel in esecuzione per una voce di backport di CVE-2026-23111, consentendo un verdetto confermato dal vendor indipendente dal numero di versione upstream.
Questo README e lo script associato sono pensati per la validazione difensiva, l'inventario e la pianificazione delle mitigazioni. Non sostituiscono le indicazioni del vendor, la verifica a livello di pacchetti o i processi standard di gestione delle patch, e non dovrebbero essere usati come sostituto dell'applicazione delle correzioni ufficiali descritte nei bollettini collegati.[2][3][4]
Un repository per apprendere, testare e ricercare concetti di cybersecurity in ambienti controllati.
Questo repository è solo per ricerca sulla sicurezza educativa e autorizzata.
È progettato per aiutare gli utenti a conoscere:
Usa questo repository solo in ambienti in cui hai il permesso, come:
L'uso non autorizzato o illegale è severamente vietato.
L'autore e i contributori non sono responsabili per qualsiasi danno, uso improprio, problema legale o perdita causati da questo progetto.
Usando questo repository, accetti che:
Questo progetto è pensato per:
Segui le pratiche di responsible disclosure e rispetta tutte le leggi applicabili.
Per responsible disclosure o collaborazione, contatta il maintainer del repository tramite GitHub.