
# Exploit Linux per l'escalation dei privilegi locali per CVE-2026-31431 Fornisce un PoC affidabile a colpo singolo con implementazioni in più linguaggi, scanner di vulnerabilità e script di mitigazione.
Un'escalation di privilegi locali Linux affidabile al 100% che colpisce tutte le distribuzioni principali dal 2017.
Un singolo bug logico in
authencesn, concatenato tramiteAF_ALGesplice()in una scrittura di 4 byte nella page cache — sfruttabile silenziosamente per quasi un decennio.
Tutto il codice e la documentazione in questo repository sono forniti esclusivamente per ricerca di sicurezza autorizzata e scopi educativi.
Eseguire codice di exploit contro sistemi che non possiedi o per i quali non hai esplicita autorizzazione scritta ai test è illegale. Utilizzando questo repository, accetti la piena responsabilità delle tue azioni.
.
├── README.md ← Sei qui
├── LICENSE ← MIT
├── .gitignore
├── docs/
│ ├── analysis-report.md ← Analisi di sicurezza completa
│ ├── analysis-report.html ← Versione HTML stilizzata
│ ├── exploit-walkthrough.md ← Analisi PoC riga per riga
│ └── exploit-walkthrough.html ← Versione HTML stilizzata
└── poc/
├── README.md ← Guida all'uso del PoC
├── copy_fail_exp.py ← PoC ufficiale (732 byte, offuscato)
├── copy_fail_exp_readable.py ← Versione deoffuscata + annotata
├── copy_fail_exp_compat.py ← Compatibilità Python 3.6+ (ctypes splice)
├── copy_fail_exp_alpine.py ← Variante per Alpine Linux
├── copy_fail_exp.c ← Implementazione in C (zero dipendenze)
├── copy_fail_exp.go ← Implementazione in Go (zero dipendenze)
├── copy_fail_rust/ ← Implementazione in Rust
│ ├── Cargo.toml
│ └── src/main.rs
├── check_vulnerable.py ← Scanner di vulnerabilità
└── mitigate.sh ← Script di mitigazione con un clic
# Dalle GitHub Releases — binari precompilati (Linux amd64/arm64) + tutti gli script Python
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-go-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-c-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-python.tar.gz
tar xzf copy-fail-go-linux.tar.gz
tar xzf copy-fail-c-linux.tar.gz
tar xzf copy-fail-python.tar.gz
# Binario statico Go (nessun Python necessario)
chmod +x copy-fail-exp-amd64
./copy-fail-exp-amd64
# Binario statico C
chmod +x copy-fail-exp-c-amd64
./copy-fail-exp-c-amd64
# Oppure usa direttamente gli script Python
python3 check_vulnerable.py
📦 Le release vengono compilate automaticamente tramite GitHub Actions a ogni push di tag
v*. I binari Go e C sono compilati per linux/amd64 e linux/arm64 come binari statici.
python3 poc/check_vulnerable.py
sudo bash poc/mitigate.sh
Questo inserisce nella blacklist il modulo del kernel algif_aead — non rompe nulla per il 99% dei sistemi.
# Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-*
# RHEL/CentOS/Fedora
sudo dnf update kernel
# Riavvia nel kernel patchato
sudo reboot
python3 poc/check_vulnerable.py
# Codice di uscita 1 = protetto ✓
ATTENZIONE: Esegui solo su sistemi che possiedi o per i quali hai autorizzazione ai test.
# C
gcc -static -o exp ./poc/copy_fail_exp.c && ./exp
# Python
python3 poc/copy_fail_exp.py
python3 poc/copy_fail_exp_compat.py # Python < 3.10
# Go
go build -o exp ./poc/copy_fail_exp.go && ./exp
# Rust
cd poc/copy_fail_rust && cargo run --release
Tutte le versioni accettano un argomento opzionale per puntare a un diverso binario SUID:
python3 poc/copy_fail_exp.py /usr/bin/passwd
./exp /usr/bin/sudo
Valutazione completa della vulnerabilità che copre:
authencesn)Analisi PoC riga per riga che copre:
AF_ALG, consegna splice() nella page cache, meccanica di sg_chain()authencesn che attraversa i confini dello scatterlist/etc/passwd, targeting di librerie condivise, fuga dal containerContributi benvenuti:
Apri una issue o una pull request.
MIT — Usa in modo responsabile.
| Campo | Dettaglio |
|---|
| CVE | CVE-2026-31431 |
| Alias | Copy Fail |
| Tipo | Escalation di privilegi locali del kernel Linux (LPE) / scrittura arbitraria nella page cache |
| CVSS v3.1 | 7.8 HIGH — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-669 (Trasferimento Incorretto di Risorse tra Sfere) |
| Componente | crypto/algif_aead — template crittografico authencesn |
| Introdotto | 2017 (commit 72548b093ee3) |
| Corretto | Commit mainline a664bf3d603d (2026-04-01) |
| Kernel patchato | v6.18.22+, v6.19.12+, v7.0+ |
| Scopritore | Xint / Theori (Taeyang Lee + audit assistito da Xint Code AI) |
| Divulgazione | 2026-04-29 — copy.fail |
| Tipico LPE Linux | Copy Fail |
|---|
| Condizione di gara | Richiesta | Nessuna |
| Offset per distribuzione | Richiesti | Nessuno |
| Affidabilità | 30–80% | 100%, colpo singolo |
| Finestra di impatto | Stretta | 2017 → 2026 (9 anni) |
| Modifica su disco | Possibile | Nessuna (furtiva) |
| Cross-container | No | Sì |
| File | Linguaggio | Requisiti | Note |
|---|
copy_fail_exp.py | Python 3.10+ | solo stdlib | PoC ufficiale da 732 byte |
copy_fail_exp_compat.py | Python 3.6+ | stdlib + ctypes | Funziona su CentOS 7, AL2 ecc. |
copy_fail_exp_alpine.py | Python 3.10+ | solo stdlib | Punta a /bin/ping su Alpine |
copy_fail_exp.c | C | gcc + header Linux | Binario statico, zero dipendenze |
copy_fail_exp.go | Go 1.21+ | solo stdlib | Binario statico, zero dipendenze |
copy_fail_rust/ | Rust 1.70+ | crate libc + flate2 | Binario statico |
| Ambiente | Rischio | Perché |
|---|
| Host Linux multi-tenant | 🔴 Alto | Qualsiasi utente → root |
| Kubernetes / container | 🔴 Alto | Page cache condivisa → fuga dal container |
| Runner CI (self-hosted) | 🔴 Alto | PR dannosa → root del runner |
| SaaS cloud (codice utente) | 🔴 Alto | Tenant → root dell'host |
| Server standard | 🟡 Medio | Si combina con RCE web / credenziali rubate |
| Laptop mono-utente | 🟢 Basso | Già l'unico utente |