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-2026-31431-Copy-Fail---Vulnerability-Detection-Script — Script di rilevamento per CVE-2026-31431 (Copy Fail) che verifica la versione del kernel, la presenza di patch, le configurazioni del kernel, la disponibilità dei socket AF_ALG, i binari setuid e le mitigazioni per determinare lo stato di vulnerabilità sui sistemi Linux. | Kitploit
Strumenti/GitHubGitHub/liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script
Sicurezza dell'Infrastruttura CloudScanner di VulnerabilitàSicurezza dei ContenitoriAnalisi delle VulnerabilitàAudit di ConfigurazioneDevSecOpsRilevamento IntrusioniRisposta agli Incidenti
GitHub
liamromanis101/cve-2026-31431-copy-fail---vulnerability-detection-script

CVE-2026-31431-Copy-Fail---Vulnerability-Detection-Script

Script di rilevamento per CVE-2026-31431 (Copy Fail) che verifica la versione del kernel, la presenza di patch, le configurazioni del kernel, la disponibilità dei socket AF_ALG, i binari setuid e le mitigazioni per determinare lo stato di vulnerabilità sui sistemi Linux.

Vedi Repository
25284 mesi faRevisionato da Kitploit

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-31431 — Copy Fail — Script di rilevamento vulnerabilità

Solo rilevamento. Un PoC funzionante esiste già su copy.fail/#exploit. Questo script è pensato per sysadmin e team di sicurezza che devono determinare dove sono vulnerabili — o ancora vulnerabili dopo l'applicazione delle patch.


Di cosa si tratta?

Il 29 aprile 2026, una vulnerabilità chiamata Copy Fail (CVE-2026-31431) è stata divulgata pubblicamente dal Xint Code Research Team. È un bug logico presente silenziosamente nel kernel Linux da circa 2017 — quasi un decennio — e consente a qualsiasi utente locale non privilegiato di ottenere root.

Non "ottenere root in condizioni specifiche con un po' di fortuna e un vento favorevole." Semplicemente... ottenere root. In modo affidabile. Praticamente su ogni principale distribuzione Linux.

Colpisce Ubuntu, Amazon Linux, RHEL, SUSE e qualsiasi altro sistema che esegue un kernel mainstream degli ultimi ~8 anni. Stesso script, nessuna ricompilazione, nessuna modifica per distribuzione richiesta.

Sì, è grave quanto sembra.

La versione breve di come funziona

Il kernel Linux ha un sottosistema crittografico accessibile agli utenti non privilegiati tramite socket AF_ALG. Esiste un meccanismo chiamato splice() che può inoltrare dati di file direttamente in quel sottosistema senza copiarli — il che significa che la copia cache in memoria del kernel di un file (la "page cache") finisce all'interno di un'operazione crittografica.

Un algoritmo specifico — authencesn, usato per i numeri di sequenza estesi IPsec — ha una particolarità: usa il buffer di output come spazio di lavoro e scrive 4 byte leggermente oltre la posizione prevista. Normalmente innocuo. Ma quando le pagine della page cache di un binario setuid come /usr/bin/su finiscono concatenate in quel buffer di output (grazie a una "ottimizzazione" del 2017 in algif_aead.c), quei 4 byte finiscono direttamente nella copia cache del binario nel kernel.

L'operazione fallisce con un errore. Il kernel non marca mai quella pagina come sporca. Il file su disco è intatto. Gli strumenti di integrità dei file che verificano i checksum su disco non rilevano nulla di anomalo.

Ma la page cache è ciò che viene eseguito. E su è setuid root.

Il resoconto tecnico completo è su xint.io e merita davvero di essere letto.


Cosa controllano gli script

Script Python — 13 controlli

Sette dalla versione originale più sei nuovi controlli aggiunti per colmare le lacune di rilevamento:

#ControlloCosa cerca
1Versione del kernelQuesto kernel è nell'intervallo interessato (4.10–6.14)?
2Presenza della patchIl commit di correzione è effettivamente nel kernel in esecuzione?
3Modulo algif_aeadIl modulo vulnerabile è caricato o caricabile?
4CONFIG_CRYPTO_AUTHENC (nuovo)CONFIG_CRYPTO_AUTHENC è integrato (=y) o un modulo (=m)? Questa singola opzione compila sia authenc che authencesn. Integrato significa che la mitigazione con blacklist di modprobe non serve a nulla.
5CONFIG_CRYPTO_USER_API_AEAD (nuovo)L'interfaccia utente AF_ALG AEAD è persino compilata? Se no, l'intero percorso di exploit è chiuso in fase di compilazione.
6Socket AF_ALGUn utente non privilegiato può aprirne uno adesso?
7Python os.spliceIl percorso di exploit in puro Python è disponibile?
8Binari setuidElenco esteso di target setuid-root leggibili presenti sul sistema.
9MitigazioniAppArmor, SELinux, seccomp — cosa c'è in atto?
10Namespace utente (nuovo)I namespace utente non privilegiati sono abilitati? (Non blocca direttamente Copy Fail, ma influisce sulla più ampia superficie di privesc locale.)
11Hugepage trasparenti (nuovo)Stato THP — può influire sull'allineamento della page cache e sull'affidabilità dell'exploit.
12Rilevamento ambiente (nuovo)Contesto Docker/container/VM — i container condividono il kernel dell'host; è l'host che deve essere patchato.
13Avviso utente root (nuovo)Avvisa se si esegue come root, poiché diversi controlli danno falsi positivi per root indipendentemente dalle restrizioni per non privilegiati.

Script shell — 10 controlli

Lo script Bash copre la stessa logica di rilevamento principale ma omette tre elementi specifici di Python:

#ControlloNote
1Versione del kernel
2Presenza della patch
3Modulo algif_aead
4Socket AF_ALGUsa Python come helper se disponibile; altrimenti ripiega sull'inferenza dalla configurazione del kernel
5Binari setuidElenco esteso, come nella versione Python
6MitigazioniAppArmor, SELinux, seccomp
7CONFIG_CRYPTO_AUTHENC
8Namespace utente
9Hugepage trasparenti
10Rilevamento ambiente

Non presenti nello script shell (rispetto a Python):

Controllo mancanteMotivo
CONFIG_CRYPTO_USER_API_AEADNon ancora implementato — pianificato
Disponibilità Python os.spliceNon applicabile a uno script shell
Avviso utente rootNon ancora implementato — pianificato

Nessuno dei due script risolve o sfrutta nulla. Ti dicono la verità sul tuo sistema così puoi agire di conseguenza.


Requisiti

  • Python 3.6+
  • Nessuna dipendenza esterna — solo stdlib
  • Nessun requisito di root (intenzionalmente — controlliamo ciò che un attaccante non privilegiato può vedere)
  • Consigliato: eseguire come utente non root — alcuni controlli (socket AF_ALG, stat setuid) riescono sempre per root e riporteranno falsi positivi

Utilizzo

root@kitploit:~
# Clona o scarica lo script, poi:
python3 cve-2026-31431-detect.py

Tutto qui. Report con codici colore e un riepilogo alla fine.

Codici di uscita

Lo script esce con un codice non zero in caso di risultati vulnerabili, rendendolo adatto all'uso in pipeline:

CodiceSignificato
0Nessuna condizione vulnerabile trovata
1Una o più condizioni vulnerabili trovate
root@kitploit:~
# Esempio: fai fallire uno step CI se l'host è vulnerabile
python3 cve-2026-31431-detect.py
rc=$?
if [ $rc -eq 1 ]; then
  echo "VULNERABILE — blocca il deployment"
elif [ $rc -ne 0 ]; then
  echo "ERRORE — lo script non è riuscito a completare (exit $rc)"
fi

Esempio di output

root@kitploit:~
CVE-2026-31431 'Copy Fail' — Rilevamento vulnerabilità
Corruzione page cache authencesn / escalation privilegi locale
Esecuzione come uid=1001, euid=1001

=== Versione del kernel ===
  [VULNERABILE] Versione del kernel
          Motivo : Il kernel è nell'intervallo vulnerabile (4.10 – 6.14)
          Dettaglio : Release: 6.12.0-124.45.1.el10_1 — lo stato della patch deve essere confermato

=== CONFIG_CRYPTO_AUTHENC (Configurazione kernel) ===
  [VULNERABILE] CONFIG_CRYPTO_AUTHENC
          Motivo : Compilato come modulo (=m): si carica automaticamente su bind() AF_ALG; la blacklist di modprobe è la mitigazione corretta

=== CONFIG_CRYPTO_USER_API_AEAD (Configurazione kernel) ===
  [VULNERABILE] CONFIG_CRYPTO_USER_API_AEAD
          Motivo : L'interfaccia AEAD AF_ALG è un modulo caricabile — gli utenti non privilegiati possono accedere al sottosistema crittografico tramite socket AF_ALG

...

  IL SISTEMA È PROBABILMENTE VULNERABILE A CVE-2026-31431

  Azioni consigliate:
    1. Applica l'aggiornamento del kernel della tua distribuzione per CVE-2026-31431
    2. Fino alla patch, metti in blacklist il modulo:
         echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
         rmmod algif_aead 2>/dev/null
       NOTA: questo è efficace SOLO quando CONFIG_CRYPTO_AUTHENC=m (modulo).
       Se CONFIG_CRYPTO_AUTHENC=y (integrato), la patch è l'unica soluzione.

Versione shell (per pipeline DevSecOps)

Uno script Bash complementare (cve-2026-31431-detect.sh) è disponibile per ambienti in cui Python non è presente o dove si preferiscono strumenti nativi della shell. Esegue 10 dei 13 controlli — vedi la tabella di confronto dei controlli sopra per i dettagli sulle differenze.

root@kitploit:~
# Esecuzione base
bash cve-2026-31431-detect.sh

# Output JSON — adatto per ingestione SIEM, fatti Ansible, aggregazione log
bash cve-2026-31431-detect.sh --json > scan-results.json

# Modalità silenziosa — stampa solo il riepilogo (utile nei log CI)
bash cve-2026-31431-detect.sh --quiet

# Disabilita colore ANSI (per file di log)
bash cve-2026-31431-detect.sh --no-colour

Lo script shell usa gli stessi codici di uscita (0 = OK, 1 = vulnerabile) e produce un output JSON equivalente per il consumo in pipeline. Dove Python 3 è disponibile sul sistema, lo script shell lo usa per eseguire il test live del socket AF_ALG; altrimenti ripiega sull'inferenza dalla configurazione del kernel.


Risolvere il problema

La vera soluzione è applicare la patch al kernel. Controlla gli advisory di sicurezza della tua distribuzione.

DistribuzioneDove guardare
Ubuntuubuntu.com/security/CVE-2026-31431
RHEL / Amazon Linuxdnf update kernel
SUSEzypper update kernel-default
Debianapt update && apt upgrade

Mitigazione temporanea (solo build con modulo)

Se il controllo CONFIG_CRYPTO_AUTHENC riporta =m (compilato come modulo, non integrato), puoi metterlo in blacklist:

root@kitploit:~
echo 'install algif_aead /bin/false' > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null

Importante: questa mitigazione non ha effetto se CONFIG_CRYPTO_AUTHENC=y (integrato). In quel caso, la patch al kernel è l'unica soluzione. Il controllo CONFIG_CRYPTO_AUTHENC nello script ti dice in quale situazione ti trovi. Nota che CONFIG_CRYPTO_AUTHENC è la chiave corretta della configurazione del kernel — compila sia i moduli authenc che authencesn da una singola opzione.

Questo potrebbe influire su IPsec se lo stai usando — verifica prima di distribuire su larga scala.

La correzione a monte

La correzione a monte è questo commit — annulla l'ottimizzazione AEAD in-place del 2017 in algif_aead.c, separando le scatterlist di origine e destinazione così che le pagine della page cache non possano più finire nella destinazione scrivibile.


Container e VM

Se stai eseguendo questo script all'interno di un container Docker, pod Kubernetes o altro ambiente containerizzato, lo script ti avviserà: i container condividono il kernel dell'host. La vulnerabilità risiede nel kernel, non nell'immagine del container. Devi valutare e patchare l'host.


Esempi di integrazione DevSecOps

root@kitploit:~
# GitHub Actions
# Lo step fallirà naturalmente e bloccherà la pipeline quando lo script esce con 1.
# Nessuna configurazione extra necessaria — i codici di uscita non zero fanno fallire gli step di default.
- name: Controllo CVE-2026-31431
  run: |
    python3 cve-2026-31431-detect.py
    rc=$?
    if [ $rc -eq 1 ]; then
      echo "VULNERABILE — pipeline bloccata"
      exit 1
    elif [ $rc -ne 0 ]; then
      echo "ERRORE — lo script di rilevamento non è riuscito a completare (exit $rc)"
      exit $rc
    fi
root@kitploit:~
# Ansible
# Usa playbook_dir per garantire che il percorso dello script si risolva correttamente.
# failed_when controlla qualsiasi uscita non zero (vulnerabilità O errore dello script).
- name: Controllo per CVE-2026-31431
  script: "{{ playbook_dir }}/cve-2026-31431-detect.py"
  register: cve_check
  failed_when: cve_check.rc != 0
root@kitploit:~
# Controllo Nagios / monitoraggio (script shell — supporta i codici di uscita nativamente)
bash cve-2026-31431-detect.sh --quiet
# exit 0 = OK, exit 1 = CRITICO (vulnerabile)
root@kitploit:~
# Output JSON per SIEM / aggregazione log (script shell)
bash cve-2026-31431-detect.sh --json --quiet > /var/log/cve-2026-31431-$(hostname)-$(date +%Y%m%d).json

Cronologia della divulgazione

DataEvento
2026-03-23Segnalato al team di sicurezza del kernel Linux
2026-03-24Riconosciuto
2026-03-25Patch proposte e revisionate
2026-04-01Correzione committata nel kernel mainline
2026-04-22Assegnato CVE-2026-31431
2026-04-29Divulgazione pubblica

Crediti a Taeyang Lee di Theori per l'intuizione di ricerca originale, e al Xint Code Research Team per il resoconto completo della divulgazione.


Contribuire

Trovato un falso positivo? Una distribuzione che questo script non rileva? Una configurazione del kernel che dovrebbe essere controllata? Le PR sono benvenute. L'obiettivo è un segnale accurato, non solo testo rosso spaventoso.

Disclaimer

Questo strumento è fornito così com'è per scopi di sicurezza difensiva. Puntalo su sistemi che sei autorizzato a valutare. Non fare cose strane.

Scarica lo strumento