
Scanner automatizzato e helper di patch per CVE-2026-31431, che rileva host Linux vulnerabili via SSH, verifica le versioni del kernel e applica aggiornamenti del kernel o mitigazioni temporanee su più distribuzioni.
Copy Fail è uno scanner di sicurezza automatico e helper di patch per rilevare e correggere la vulnerabilità CVE-2026-31431 (Linux Kernel algif_aead Local Privilege Escalation) nella vostra infrastruttura Linux.
CVE-2026-31431 è una vulnerabilità di Local Privilege Escalation (LPE) nel modulo del kernel Linux algif_aead (Asynchronous Cipher Interface for AEAD). Questa vulnerabilità consente a un utente locale di ottenere l'elevazione dei privilegi a livello root.
Questo strumento aiuta a:
Nota: Questo strumento è destinato esclusivamente ad audit interni e gestione delle patch da parte dei sysadmin. Utilizzatelo solo su sistemi di vostra proprietà o per i quali avete l'autorizzazione.

algif_aead (caricato/non caricato)Upgrade automatico del kernel sugli host vulnerabili tramite il package manager:
Opzione: Reboot automatico dopo il completamento della patch
algif_aead tramite configurazione modprobe.dDatabase delle versioni del kernel già patchate per:
paramiko>=3.0.0 # Libreria SSH
rich>=13.0.0 # Bellissima UI del terminale
git clone https://github.com/gagaltotal/cve-2026-31431-copy-fail.git
cd cve-2026-31431-copy-fail
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
oppure installazione manuale:
pip install paramiko>=3.0.0 rich>=13.0.0
python3 copyfail_scanner.py --help
# Scansione subnet con chiave SSH
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH_TO_KEY>
# Scansione di più host specifici
python3 copyfail_scanner.py --hosts <IP1>,<IP2>,<IP3> --user <USERNAME> [--password <PASSWORD>]
# Scansione + patch automatica
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --patch
# Scansione + mitigazione temporanea
python3 copyfail_scanner.py --subnet <CIDR> --user <USERNAME> --key <PATH> --mitigate
| Opzione | Descrizione | Esempio |
|---|---|---|
--subnet | Subnet CIDR target (mutualmente esclusiva con --hosts) | --subnet 192.168.1.0/24 |
--hosts | Elenco di IP separati da virgola (mutualmente esclusiva con --subnet) | --hosts 192.168.1.10,192.168.1.20 |
--user | Nome utente SSH (obbligatorio) | --user root |
--password | Password SSH (opzionale, usare se non si dispone di chiave) | --password secret123 |
--key | Percorso della chiave privata SSH | --key ~/.ssh/id_rsa |
--port | Porta SSH (default: 22) | --port 2222 |
--threads | Numero di thread paralleli (default: 30) | --threads 50 |
--patch | Upgrade automatico del kernel sugli host vulnerabili | --patch |
--reboot | Reboot automatico dopo la patch (da usare con --patch) | --patch --reboot |
--mitigate | Applica la mitigazione temporanea (disabilita algif_aead) | --mitigate |
--output | Esporta i risultati della scansione in un file JSON | --output risultati.json |
--yes | Salta il prompt di conferma prima di patch/mitigazione | --yes |
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa
Output: Visualizza la tabella dei risultati della scansione e il riepilogo
python3 copyfail_scanner.py \
--hosts 10.0.1.5,10.0.1.6,10.0.1.7 \
--user admin \
--password my_password123
python3 copyfail_scanner.py \
--subnet 172.16.0.0/16 \
--user root \
--key ~/.ssh/id_rsa \
--mitigate
Azione: Scansione di tutti gli host, poi disattivazione del modulo algif_aead sugli host vulnerabili (richiede conferma)
python3 copyfail_scanner.py \
--subnet 192.168.0.0/24 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--patch
Azione: Upgrade del kernel, ma nessun reboot automatico (richiede reboot manuale)
python3 copyfail_scanner.py \
--subnet 10.10.0.0/24 \
--user root \
--key ~/.ssh/id_rsa \
--patch \
--reboot \
--yes
Azione: Scansione, patch del kernel, reboot automatico, salta la conferma
python3 copyfail_scanner.py \
--subnet 192.168.1.0/24 \
--user sysadmin \
--key ~/.ssh/id_rsa \
--output scan_results_$(date +%Y%m%d_%H%M%S).json
Output: Tabella nel terminale + risultati JSON nel file
python3 copyfail_scanner.py \
--subnet 10.0.0.0/25 \
--user ubuntu \
--key ~/.ssh/id_rsa \
--port 2222 \
--threads 50
Esempio di output dalla scansione:
┏━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┓
┃ IP ┃ Hostname ┃ Distro ┃ Kernel ┃ algif ┃ Status ┃ Action ┃ Notes ┃
┣━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━╋━━━━━━━━━┫
┃ 192.168.1.10 ┃ web-01 ┃ Ubuntu 22.04 ┃ 6.8.0-60 ┃ LOADED ┃ ✓ SICURO ┃ - ┃ Patchato ┃
┃ 192.168.1.11 ┃ web-02 ┃ Ubuntu 20.04 ┃ 5.4.0-200 ┃ NOT_LDD ┃ ✗ VULNER ┃ Patchato ┃ - ┃
┃ 192.168.1.12 ┃ db-01 ┃ RHEL 8.9 ┃ 5.14.0-560 ┃ LOADED ┃ ? NON NOTO ┃ - ┃ Distro ┃
┗━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┻━━━━━━━━━┛
Riepilogo:
Totale host scansionati: 12
Accessibili (SSH): 11
Offline: 1
VULNERABILI: 2
Già patchati: 8
Stato sconosciuto: 1
hostname -funame -r){
"cve": "CVE-2026-31431",
"scan_time": "2026-05-08T15:30:45.123456",
"results": [
{
"ip": "192.168.1.10",
"ssh_reachable": true,
"auth_ok": true,
"hostname": "web-01",
"distro": "Ubuntu 22.04 LTS",
"os_id": "ubuntu",
"kernel_version": "6.8.0-60-generic",
"algif_loaded": true,
"modprobe_blocked": false,
"patched": true,
"patch_applied": false,
"mitigation_applied": false,
"retry_count": 0,
"error": ""
}
]
}
Lo scanner supporta il rilevamento automatico per le seguenti distribuzioni:
| Distro | Package Manager | Versioni Kernel Patchate | Note |
|---|---|---|---|
| Ubuntu | apt | 6.8.0-60, 5.15.0-130, 5.4.0-216 | LTS e attuali |
| Debian | apt | 6.1.137, 5.10.235 | Release stabili |
| RHEL | dnf/yum | 5.14.0-570 | Include CentOS Stream |
| AlmaLinux | dnf | 5.14.0-570 | Sostituto drop-in di RHEL |
| Rocky | dnf | 5.14.0-570 | Orientata alle aziende |
| Fedora | dnf | 6.14.4, 6.13.12, 6.12.25 | All'avanguardia |
| Amazon Linux | dnf | 6.1.134, 5.10.235, 4.14.353 | Compatibilità AWS |
| SUSE / openSUSE | zypper | 6.4.0-18, 5.14.21-150600.24 | Enterprise e community |
| Arch Linux | pacman | 6.14.4 | All'avanguardia |
Per distribuzioni non rilevate: Verificare manualmente la versione del kernel. I kernel >= 6.14.4 sono generalmente sicuri.
Se preferite la patch manuale o la patch automatica fallisce, seguite la guida per distribuzione:
sudo apt update
sudo apt upgrade linux-image-generic kmod
sudo reboot
sudo dnf clean metadata
sudo dnf upgrade kernel
sudo reboot
sudo dnf upgrade kernel
sudo reboot
sudo dnf upgrade kernel
sudo reboot
sudo zypper update kernel-default
sudo reboot
sudo pacman -Syu linux linux-headers
sudo reboot
Se non potete eseguire subito il reboot per l'upgrade del kernel, applicate la mitigazione:
# Disabilitare il modulo algif_aead tramite modprobe.d
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif_aead.conf
# Scaricare il modulo se già caricato
sudo rmmod algif_aead 2>/dev/null || echo "Module not loaded"
IMPORTANTE:
CONFIG_CRYPTO_USER_API_AEAD=y, il modulo è integrato nel kernel, quindi modprobe.d non è efficace → l'upgrade del kernel è l'unica soluzioneError: Porta SSH non aperta
Soluzione:
nc -zv <IP> 22--port se SSH è in esecuzione su una porta personalizzataError: Autenticazione SSH fallita
Soluzione:
chmod 600 ~/.ssh/id_rsassh -i ~/.ssh/id_rsa user@host--password se si preferisce l'autenticazione con passwordExit code 1: dpkg: error processing...
Soluzione:
sudo visudoapt/dnf/yum senza prompt di passwordRetry: 3x | Host temporaneamente non disponibile
Soluzione:
--threads 10Status: ? NON NOTO
Soluzione:
uname -r e confronto con l'advisoryExit code 1: Failed to lock apt database
Soluzione:
sudo tail -f /var/log/apt/term.logSolo per Uso Interno — Questo strumento è destinato esclusivamente ad audit e gestione delle patch da parte di sysadmin autorizzati.
DISCLAIMER:
- Utilizzare solo su sistemi di propria proprietà o per i quali si dispone di autorizzazione esplicita
- La patch automatica e il reboot possono causare tempi di inattività
- Testare in ambiente di staging prima della distribuzione in produzione
- Assicurarsi di avere backup disponibili prima della patch
- Lo sviluppatore non è responsabile per perdita di dati o interruzioni del servizio
Autore: GagalTotal
Repository: https://github.com/gagaltotal/cve-2026-31431-copy-fail
Contatto: ghostgtr666
Per segnalazioni di bug, richieste di funzionalità o domande:
Ultimo Aggiornamento: 8 maggio 2026
Versione dello Scanner: 1.0