Una vulnerabilità lineare, indipendente dalla versione del kernel, ha esposto per quasi un decennio gran parte dei sistemi Linux a un’escalation di privilegi locale estremamente affidabile. Il caso, identificato come CVE-2026-31431 e soprannominato Copy Fail, rompe uno schema consolidato: un semplice script Python di appena 732 byte riesce a ottenere una shell root su distribuzioni diverse senza modifiche. Il problema affonda le radici in modifiche introdotte nel 2017 e riguarda componenti ampiamente distribuiti nelle configurazioni standard.
Origine della vulnerabilità Copy Fail e meccanismo interno
Il problema ha origine nel modulo authencesn, che fa parte dell’implementazione della crittografia AEAD (Authenticated Encryption with Associated Data, una tecnica che combina cifratura e verifica dell’integrità dei dati) all’interno del kernel Linux.
In condizioni normali, le operazioni crittografiche lavorano su strutture chiamate scatterlist, che descrivono buffer di memoria sorgente e destinazione. Nel 2017 è stata introdotta un’ottimizzazione in-place, pensata per ridurre copie superflue. Il punto è che questa ottimizzazione ha eliminato una separazione critica tra buffer di input e output.
In pratica, durante l’elaborazione di dati autenticati, una scrittura di 4 byte oltre il limite previsto finisce in un’area non destinata alla modifica. Il passaggio chiave avviene quando si concatenano tre elementi: il sottosistema AF_ALG, la syscall splice() e la gestione della page cache. Il risultato è una scrittura controllata nella page cache del kernel, senza attraversare i normali percorsi del filesystem.
Il punto è che la page cache rappresenta la copia in memoria dei file su disco: alterare quei dati equivale, per l’esecuzione, a modificare direttamente il file binario, ma senza lasciare tracce persistenti.
Questo dettaglio rende Copy Fail particolarmente difficile da analizzare a posteriori: un’analisi sull’immagine del disco non rivela anomalie; solo strumenti che leggono la cache in tempo reale possono intercettare la modifica.
Mitigazioni e patch disponibili
Test diretti hanno confermato il comportamento su distribuzioni come Ubuntu 24.04, Amazon Linux 2023, RHEL 10.1 e SUSE 16. Il dato più interessante è l’assenza di adattamenti: lo stesso script funziona senza modifiche. In pratica, si tratta di un exploit con affidabilità prossima al 100%, eseguito in un singolo tentativo.
La correzione ufficiale elimina l’ottimizzazione introdotta nel 2017 e ripristina la separazione tra buffer di input e output nelle operazioni AEAD: il commit correttivo, identificato come a664bf3d603d, è già integrato nelle versioni aggiornate del kernel distribuite dai principali vendor.
Chi non può aggiornare immediatamente ha una mitigazione efficace: disabilitare il modulo algif_aead: è una scelta che non impatta la maggior parte dei sistemi, perché le librerie crittografiche più diffuse – come OpenSSL o GnuTLS – non utilizzano AF_ALG in configurazione standard.
Negli ambienti in cui è eseguito codice non affidabile, è consigliabile impedire la creazione di socket AF_ALG utilizzando seccomp, un meccanismo di sicurezza che limita le chiamate di sistema consentite ai processi. È una misura preventiva semplice, ma molto efficace.
Osservazioni tecniche e limiti della vulnerabilità
Copy Fail non offre accesso remoto diretto. Serve un punto di ingresso locale: credenziali compromesse, accesso SSH oppure una vulnerabilità applicativa che consenta l’esecuzione di codice. Nella pratica, questa condizione è comune in molte catene di attacco.
Interessante il confronto con bug storici come Dirty COW o Dirty Pipe: nel caso di Coopy Fail manca completamente la componente di race condition. Non c’è bisogno di tentativi multipli né di sincronizzazioni delicate. Il comportamento è deterministico: o funziona subito, o non funziona affatto.
Un altro aspetto rilevante riguarda la rilevabilità. Strumenti di integrity checking possono intercettare la modifica solo mentre la pagina resta in cache.
La vicenda Copy Fail dimostra quanto una singola ottimizzazione apparentemente innocua possa introdurre effetti collaterali profondi. Il codice coinvolto esisteva da anni; la vulnerabilità è rimasta invisibile fino a un’analisi mirata del sottosistema crittografico.