
Script Bash per valutare l'esposizione di un host Linux a CVE-2026-31431, verificare lo stato dei moduli del kernel, applicare la mitigazione bloccando algif_aead e aggiornare i pacchetti del kernel.
Questo repository documenta uno script Bash utilizzato per valutare l'esposizione a CVE-2026-31431 su host Linux, con particolare attenzione a Ubuntu, e per applicare una semplice mitigazione bloccando il modulo algif_aead.
Versioni linguistiche:
README.mdREADME.pt-BR.mdLo script supporta tre modalità:
--check: raccoglie le informazioni sull'host e classifica lo stato attuale.--mitigate: crea una regola modprobe per bloccare il modulo vulnerabile e tenta di scaricarlo.--update: esegue gli aggiornamenti dei pacchetti del kernel tramite apt.CVE-2026-31431, pubblicamente nota come Copy Fail, è una vulnerabilità di escalation dei privilegi locali nel kernel Linux associata al modulo algif_aead, che implementa l'interfaccia AEAD dell'API crittografica del kernel in spazio utente tramite AF_ALG.
In termini pratici, il problema consente a un utente locale con privilegi ridotti di abusare di un difetto logico nel percorso di gestione della memoria di questo sottosistema e di elevare l'impatto fino al compromesso completo dell'integrità del sistema. Il punteggio pubblicato da kernel.org e riportato nel NVD è CVSS 7.8, con vettore AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, il che significa che l'attacco richiede esecuzione locale ma ha un impatto elevato su riservatezza, integrità e disponibilità.
2017, quando è stata aggiunta un'ottimizzazione in-place a algif_aead.22 aprile 2026.Copy Fail e con un proof of concept pubblico, è avvenuta il 29 aprile 2026.1 aprile 2026, prima della divulgazione pubblica agli utenti finali.Secondo gli advisory tecnici pubblicati, il difetto si basa sulla combinazione di:
AF_ALG del kernelalgif_aeadsplice()Il risultato pratico è la capacità di un processo locale di eseguire una piccola scrittura controllata nelle pagine supportate dalla page cache di file leggibili. In condizioni favorevoli, ciò è sufficiente per trasformare un limitato punto d'appoggio locale in un'escalation dei privilegi a root.
Il rischio reale non è semplicemente "eseguire un kernel Linux vulnerabile", ma consentire al codice locale a bassa fiducia di raggiungere questo percorso del kernel. Negli ambienti aziendali, ciò di solito significa una maggiore esposizione su:
Se un attaccante dispone già di una qualche forma di esecuzione locale, anche senza root, questa CVE può diventare il passo successivo verso il compromesso dell'host. In pratica, ciò amplia il rischio di:
algif_aeadalgif_aead fa parte dell'interfaccia crittografica del kernel in spazio utente (AF_ALG). Consente alle applicazioni di utilizzare primitive crittografiche del kernel tramite socket, in particolare operazioni AEAD (Authenticated Encryption with Associated Data).
Questo modulo di solito non è essenziale per la maggior parte dei carichi di lavoro server standard. Secondo le linee guida di mitigazione pubblicate da CERT-EU, disabilitare algif_aead come mitigazione temporanea:
dm-crypt o LUKSkTLSIPsec/XFRMOpenSSL, GnuTLS, NSS o SSH nell'uso standardD'altro canto, disabilitarlo potrebbe influire su:
afalgAF_ALG direttamenteaead, skcipher o hash tramite l'API crittografica del kernelIn altre parole, per la maggior parte degli host aziendali, bloccare il modulo tende ad avere un impatto ridotto. In appliance, stack crittografici personalizzati o percorsi software fortemente ottimizzati, l'impatto dovrebbe essere validato prima del rollout.
Bloccare il modulo riduce immediatamente l'esposizione, ma comporta dei compromessi:
AF_ALG potrebbero non avviarsi o perdere l'accelerazione crittografica supportata dal kernelPer gli ambienti di produzione, l'approccio più sicuro è applicare la mitigazione in una finestra di manutenzione controllata e validare successivamente le applicazioni critiche.
La blacklist del modulo è solo una mitigazione temporanea. La correzione permanente è:
Misure aggiuntive consigliate:
AF_ALG con seccomp in container e pipeline dove applicabileafalg o l'API crittografica del kernel sono utilizzati esplicitamenteLo script ispeziona:
/etc/os-releasealgif_aeadmodprobe/var/run/reboot-required)pro fix CVE-2026-31431 --dry-run, quando disponibileIn base a ciò, restituisce una delle seguenti classificazioni:
PATCHED_OR_NOT_AFFECTEDLIKELY_NOT_VULNERABLEMITIGATEDVULNERABLE_MODULE_LOADEDPOTENTIALLY_VULNERABLEUNKNOWNIn sintesi:
PATCHED_OR_NOT_AFFECTED.algif_aead non esiste nel kernel corrente, lo stato tende a essere LIKELY_NOT_VULNERABLE.MITIGATED.VULNERABLE_MODULE_LOADED.POTENTIALLY_VULNERABLE.modinfomodprobelsmodawkgrephostnameunameapt-get per --updatesudo quando si esegue come utente non rootpro opzionalmente, per arricchire l'analisi su UbuntuSe il file dello script si chiama check_cve_2026_31431.sh:
chmod +x check_cve_2026_31431.sh
./check_cve_2026_31431.sh --check
./check_cve_2026_31431.sh --check
Esempio di output:
Host: srv-app-01
OS: Ubuntu 24.04 LTS
Kernel: 6.8.0-58-generic
CVE: CVE-2026-31431
Module exists: 1
Module loaded: 0
Module blocked: 1
Ubuntu affected: yes
Fix available: yes
Reboot required: 0
Status: MITIGATED
Reason: algif_aead exists but is blocked and not loaded
./check_cve_2026_31431.sh --check --json
Esempio:
{"host":"srv-app-01","os":"Ubuntu 24.04 LTS","kernel":"6.8.0-58-generic","cve":"CVE-2026-31431","module":"algif_aead","module_exists":1,"module_loaded":0,"module_blocked":1,"ubuntu_affected":"yes","fix_available":"yes","reboot_required":0,"status":"MITIGATED","reason":"algif_aead exists but is blocked and not loaded"}
Questo output è utile per automazione, inventario delle risorse e pipeline di conformità.
La modalità --mitigate crea il file:
/etc/modprobe.d/disable-algif_aead-CVE-2026-31431.conf
Con il seguente contenuto:
install algif_aead /bin/false
blacklist algif_aead
Successivamente, lo script tenta di rimuovere il modulo dalla memoria con:
modprobe -r algif_aead
Utilizzo:
./check_cve_2026_31431.sh --mitigate
Se l'utente non è root, lo script tenterà di utilizzare sudo.
La modalità --update esegue:
apt-get update
apt-get install --only-upgrade -y 'linux-image-*' 'linux-modules-*' 'linux-aws*'
Utilizzo:
./check_cve_2026_31431.sh --update
Questa modalità tenta di aggiornare i pacchetti relativi al kernel su sistemi basati su Debian e Ubuntu. In altri ambienti, questo passaggio potrebbe non essere applicabile.
./check_cve_2026_31431.sh --help
Output:
Usage: ./check_cve_2026_31431.sh [--check|--mitigate|--update] [--json]
ubuntu_affected e fix_available dipendono dalla presenza del comando pro.--update utilizza pattern di pacchetti orientati a Ubuntu e Debian e potrebbe non coprire tutti i kernel personalizzati.--check per valutare l'host.--mitigate.--update o applicare l'aggiornamento ufficiale del vendor.--check --json per validare lo stato finale e conservare le prove.Per chiarezza di pubblicazione, lo script dovrebbe idealmente utilizzare un nome descrittivo come:
check_cve_2026_31431.sh
Materiale organizzato e pubblicato con credito a SEC17.
Sito web ufficiale:
https://sec17.com