
# Playbook Ansible per auditare e mitigare CVE-2026-31431 ("Copy Fail") Playbook Ansible per auditare e mitigare CVE-2026-31431 ("Copy Fail"), una vulnerabilità di escalation dei privilegi locali nel modulo `algif_aead` del kernel Linux che interessa tutte le principali distribuzioni dal 2017.
Escalatione di privilegi / corruzione della memoria nel kernel Linux
algif_aead
Playbook Ansible di audit e mitigazione — pronti per l'uso in produzione
Copy Fail (CVE-2026-31431) è una vulnerabilità nel modulo algif_aead
del kernel Linux — l'interfaccia AEAD rivolta agli utenti della famiglia di
socket crittografici AF_ALG.
Un difetto nel percorso copy_*user del kernel all'interno del gestore delle
richieste AEAD consente a un utente locale non privilegiato di corrompere la
memoria del kernel o di escalare i privilegi creando una richiesta socket malformata.
| Campo | Dettaglio |
|---|
| ID CVE | CVE-2026-31431 |
| Soprannome | Copy Fail |
| Componente | Kernel Linux — algif_aead (net/socket.c, crypto/algif_aead.c) |
| Vettore di attacco | Locale |
| Privilegi richiesti | Bassi (utente non privilegiato) |
| Impatto | Corruzione della memoria del kernel / escalation di privilegi locale |
| Corretto | Patch upstream del kernel in corso — verifica il tuo vendor di distribuzione |
| Distribuzione | Versioni interessate | Stato |
|---|---|---|
| Ubuntu 22.04 / 24.04 | kernel < release con patch | Patch in sospeso — vedi Ubuntu USN |
| Debian 12 (Bookworm) | kernel < release con patch | Patch in sospeso |
| RHEL / AlmaLinux / Rocky 8 e 9 | kernel < release con patch | Patch in sospeso |
| Amazon Linux 2 / 2023 | kernel < release con patch | Patch in sospeso |
| Upstream generico | algif_aead compilato o caricato automaticamente | Vulnerabile se il modulo è presente |
Un sistema non è a rischio immediato se
algif_aeadnon è caricato e nessuno strumento userspace lo carica su richiesta (vedi Audit passo 1).
| Sottosistema | Interessato da questa CVE? | Interessato dalla mitigazione? |
|---|---|---|
| dm-crypt / LUKS | No | No |
| kTLS | No | No |
| IPsec / StrongSwan | No | No |
| OpenSSL (build predefinita) | No | No |
| GnuTLS / NSS | No | No |
| OpenSSH | No | No |
| OpenSSL motore afalg | Potenzialmente sì | Sì — verifica prima di applicare |
Strumenti kcapi-enc / kcapi-dgst | Sì | Sì |
.
├── audit_algif_aead.yml # Passo 1 — audit: rileva l'esposizione per host
├── mitigate_copyfail.yml # Passo 2 — mitigazione: scarica + blacklist del modulo
└── README.md # Questo documento
community.general (ansible-galaxy collection install community.general)become: true (sudo) sugli host di destinazionelsof installato sulle destinazioni (di solito presente di default)inventory.ini è gitignored — rimane locale e non raggiunge mai il repository.
inventory.ini.example è il template committato da cui tutti partono.
# Clona e prepara
git clone https://github.com/your-org/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431
cp inventory.ini.example inventory.ini
# Modifica inventory.ini con i tuoi host reali, poi esegui:
ansible-playbook -i inventory.ini audit_algif_aead.yml
I seguenti percorsi sono gitignored per prevenire la fuga di dati infrastrutturali:
| Percorso gitignored | Perché |
|---|---|
inventory.ini | Hostname / IP reali |
inventories/ | Qualsiasi directory di inventario locale |
copyfail_reports/ | L'output dell'audit contiene versioni del kernel, elenchi di processi |
.vault_pass | File password Ansible Vault |
*.retry | Artefatti di retry Ansible |
Esegui il playbook di audit prima di toccare qualsiasi cosa. Raccoglie prove per host e scrive un report sia localmente che su ciascuna destinazione.
ansible-playbook -i inventory.ini audit_algif_aead.yml
I report vengono recuperati in ./copyfail_reports/<hostname>_audit.txt.
| Controllo | Comando | Verdetto |
|---|---|---|
| Versione del kernel | uname -r | Informativo |
| Modulo caricato? | lsmod | grep algif_aead | Caricato = rischio di esposizione |
| Socket AF_ALG attivi | lsof | grep AF_ALG | Utenti trovati = da verificare |
| Motore afalg di OpenSSL | openssl engine | grep afalg | Attivo = verifica l'impatto |
| Strumenti kcapi presenti | which kcapi-* | Presenti = potenziali utenti |
| Mitigazione già applicata | stat /etc/modprobe.d/disable-algif.conf | Presente = già mitigato |
| Condizione | Azione consigliata |
|---|---|
| Modulo NON caricato | Rischio immediato basso — monitora per la patch del kernel |
| Modulo caricato, nessun utente di socket AF_ALG | Sicuro applicare la mitigazione |
| Modulo caricato e utenti AF_ALG attivi | Verifica i processi prima di applicare la mitigazione |
| File di mitigazione già presente | La mitigazione è stata applicata in precedenza — verifica |
Esegui prima l'audit. Il playbook di mitigazione è sicuro da eseguire in modo idempotente, ma l'audit ti fornisce la traccia delle prove.
ansible-playbook -i inventory.ini mitigate_copyfail.yml
ansible-playbook -i inventory.ini mitigate_copyfail.yml \
-e '{"skip_hosts": ["db-prod-01", "hsm-node-02"]}'
/etc/modprobe.d/disable-algif.conf con install algif_aead /bin/falsealgif_aead dal kernel in esecuzione (nessun riavvio richiesto per la protezione iniziale)update-initramfs su Debian/Ubuntu, dracut --force su RHEL)/var/backup/copyfail_mitigation/mitigation.logNessun riavvio è richiesto per rimuovere il modulo dalla memoria.
Un riavvio è comunque consigliato per confermare che la blacklist abbia effetto e per stabilire uno stato post-mitigazione pulito.
Dopo il completamento del playbook, verifica su qualsiasi host di destinazione:
# Il modulo NON deve apparire
lsmod | grep algif_aead
# Il file di blacklist deve esistere e contenere la riga install
cat /etc/modprobe.d/disable-algif.conf
# Il caricamento manuale deve essere rifiutato
sudo modprobe algif_aead # Atteso: FATAL: Module algif_aead not found or refused
Una volta che il tuo vendor rilascia un kernel con patch e lo hai applicato:
# Su ciascun host — rimuovi la blacklist
sudo rm /etc/modprobe.d/disable-algif.conf
# Ricostruisci l'initramfs
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# Riavvia nel kernel con patch
sudo reboot
Rilasciato sotto Licenza MIT.
Usalo a tuo rischio. Valida sempre in un ambiente di staging prima di
applicarlo ai sistemi di produzione.
Mantenuto dalla community. PR e segnalazioni di problemi sono benvenute.