
Scanner shell per CVE-2026-31431 "Copy Fail" — un'escalation locale dei privilegi tramite corruzione della cache delle pagine del kernel Linux (algif_aead/AF_ALG). Controlla la versione del kernel, lo stato della patch, lo stato del modulo, l'esposizione setuid e le mitigazioni. Supporta Debian 11–13 e Ubuntu 20.04–25.10. Pronto per CI/CD (codici di uscita + output JSON).
Scanner basato su shell per CVE-2026-31431 "Copy Fail", una vulnerabilità di escalation dei privilegi locale nel sottosistema crittografico del kernel Linux (algif_aead / interfaccia AF_ALG). Un utente locale non privilegiato può scrivere 4 byte nella page cache in memoria di un binario setuid (ad es. /usr/bin/su) e ottenere una shell di root — senza toccare il file su disco.
a664bf3d603d| Distribuzione | Release | Versione patchata |
|---|---|---|
| Debian | 11 Bullseye | 5.10.251-3 |
| Debian | 12 Bookworm | 6.1.170-1 |
| Debian | 13 Trixie | 6.12.85-1 |
| Debian | Sid / Forky | 6.19.14-1 |
| Ubuntu | 20.04 LTS Focal (GA) | 5.4.0-220.240 |
| Ubuntu | 20.04 LTS Focal (HWE) | 5.15.0-135.145~20.04.1 |
| Ubuntu | 22.04 LTS Jammy (GA) | 5.15.0-135.145 |
| Ubuntu | 22.04 LTS Jammy (HWE) | 6.8.0-61.63~22.04.1 |
| Ubuntu | 24.04 LTS Noble | 6.8.0-61.63 |
| Ubuntu | 24.10 Oracular | 6.11.0-27.27 |
| Ubuntu | 25.04 Plucky | 6.14.0-15.15 |
| Ubuntu | 25.10 Questing | fix mainline (≥ 6.15) |
| Generico | qualsiasi | range check mainline (4.14 – 6.14 vulnerabili) |
Anche i derivati di Ubuntu basati sulle release sopra indicate (Pop!_OS, Linux Mint, Elementary OS, ecc.) vengono rilevati tramite ID_LIKE in /etc/os-release.
# Scansione di base
bash cve-2026-31431-detect.sh
# Output senza colori (file di log, CI)
bash cve-2026-31431-detect.sh --no-colour
# Output JSON (machine-readable, per pipeline)
bash cve-2026-31431-detect.sh --json
# Modalità silenziosa — stampa solo il riepilogo
bash cve-2026-31431-detect.sh --quiet
# Combina i flag
bash cve-2026-31431-detect.sh --json --quiet
Non richiede root. Nessun pacchetto da installare oltre a una shell standard (bash ≥ 4.3) e opzionalmente python3 per il test live del socket AF_ALG.
| Codice | Significato |
|---|---|
0 | Nessuna condizione di vulnerabilità trovata |
1 | Trovata una o più condizioni di vulnerabilità |
2 | Errore dello script / impossibile completare i controlli |
Progettato per l'uso in pipeline DevSecOps — invia l'output JSON al tuo SIEM, sistema di ticketing o dashboard di conformità.
Lo script stampa i risultati in due lingue:
Entrambe le sezioni vengono stampate su stdout dopo i risultati dei singoli controlli.
=== Kernel Version ===
[INFO] Distro flavour : ubuntu (id=ubuntu, codename=jammy, version=22.04)
[INFO] Kernel release : 5.15.0-135-generic
[OK] Kernel version
Reason : Ubuntu jammy: kernel 5.15.0-135.145 >= patched version 5.15.0-135.145
...
✅ PROTECTED — SYSTEM IS NOT VULNERABLE
❌ VULNERABLE — IMMEDIATE ACTION REQUIRED
✗ Kernel version
✗ Patch presence
✗ algif_aead module
✗ AF_ALG socket
✗ Setuid binaries
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: uname -v → must show >= 6.1.170-1 (Bookworm)
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: cat /proc/version_signature
Efficace solo quando CONFIG_CRYPTO_USER_API_AEAD=m (compilato come modulo). Non ha effetto se l'opzione è compilata nel kernel (=y).
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
Questo non influisce su SSH, dm-crypt/LUKS, OpenSSL, GnuTLS, NSS, server web o crittografia del disco.
MIT
| # | Controllo | Metodo |
|---|
| 1 | Versione del kernel | uname -r / uname -v / dpkg / /proc/version_signature |
| 2 | Presenza della patch | Versione di build Debian, versione pacchetto Ubuntu, prefisso commit in /proc/version |
| 3 | Modulo algif_aead | /proc/modules, blacklist modprobe.d, .ko su disco |
| 4 | Socket AF_ALG | Tentativo live socket(AF_ALG, …) tramite Python 3 |
| 5 | Binari setuid | Comuni binari setuid-root come target di scrittura |
| 6 | Mitigazioni | Stato di AppArmor, SELinux, seccomp |
| 7 | Config del kernel | CONFIG_CRYPTO_AUTHENC, CONFIG_CRYPTO_USER_API_AEAD |
| 8 | Namespace utente | unprivileged_userns_clone, max_user_namespaces |
| 9 | Transparent hugepages | Impostazione THP ed effetto sullo sfruttamento |
| 10 | Ambiente | Rilevamento Docker / Kubernetes / WSL, avviso root |