Copy Fail — una vulnerabilità nel kernel di Linux che consente di ottenere l'accesso root nella maggior parte delle distribuzioni

I ricercatori della società Xint hanno identificato una vulnerabilità nel kernel di Linux (CVE-2026-31431) che consente a un utente non privilegiato di ottenere l'accesso root al sistema. Il problema è stato assegnato il nome in codice Copy Fail. È disponibile un prototipo dell'exploit. La possibilità di sfruttare la vulnerabilità è stata dimostrata su Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 10.1 e SUSE 16, ma si segnala che i pacchetti del kernel di altre distribuzioni, inclusi Debian, Arch, Fedora, Rocky e Alma, sono anch'essi vulnerabili, anche se non sono stati testati separatamente.

La vulnerabilità è causata da un errore logico nell'API crypto (AF_ALG) del kernel Linux, introdotto durante un'ottimizzazione nel 2017 che rimuoveva il buffering superfluo tramite l'esecuzione in loco (in-place) delle operazioni di crittografia a blocchi AEAD (Authenticated Encryption with Associated Data). Il problema è emerso a causa dell'uso imprudente della funzione splice(), che trasmette dati tra descrittori di file e pipe senza copiarli, passando riferimenti agli elementi nella cache delle pagine. Dopo l'ottimizzazione, durante la trasmissione di un file a un socket AF_ALG per la decrittazione, veniva scritta nella struttura scatterlist non un riferimento a un buffer separato, ma un riferimento diretto agli elementi della cache delle pagine del kernel contenenti i dati del file.

Successivamente, durante il processo di decrittazione AEAD, venivano mescolati dati di autenticazione legati tramite riferimento con dati autenticabili aggiuntivi copiati nel buffer RX (AAD, Associated Authenticated Data) e con il testo crittografato. Inoltre, lo spostamento per l'operazione di scrittura nel tag di autenticazione veniva calcolato rispetto ai dati copiati senza le opportune verifiche, permettendo di sovrascrivere aree arbitrarie nella cache delle pagine.

La vulnerabilità consente di riscrivere 4 byte in un offset selezionato ad ogni richiesta, permettendo all'attaccante di modificare il contenuto di qualsiasi file leggibile nel sistema, precedentemente memorizzato nella cache delle pagine, inviando una serie di richieste. Poiché nelle operazioni di lettura dai file il contenuto viene restituito in primo luogo dalla cache delle pagine, dopo la sostituzione delle informazioni nella cache, il kernel o il processo, durante la lettura dei dati dal file, riceverà dati alterati invece di quelli reali. Ciò può essere utilizzato per iniettare codice in file eseguibili o librerie condivise caricate.

Per eseguire codice con privilegi di root, è sufficiente modificare la cache delle pagine per qualsiasi file eseguibile con il flag suid root.
Nell'exploit proposto, viene eseguita la lettura del file eseguibile /usr/bin/su e viene modificato il contenuto caricato nella cache delle pagine per inserire il proprio codice. Quando l'utilità «su» viene successivamente eseguita, verrà caricata in memoria non la copia originale del file eseguibile dal supporto, ma la copia modificata dalla cache delle pagine.

L'exploit è universale, non richiede adattamenti alle distribuzioni o alle versioni del kernel e può essere utilizzato con qualsiasi distribuzione. Poiché viene utilizzata una cache di pagina condivisa per tutti i contenitori, la vulnerabilità può essere sfruttata per ottenere accesso all'ambiente host dal contenitore (in seguito verrà pubblicato un exploit per eludere l'isolamento in Kubernetes).

La vulnerabilità è stata identificata tramite AI dopo circa un'ora di esperimenti con l'analisi del codice della sottosistema crittografico del kernel. Il problema si manifesta a partire dal kernel Linux 4.14, rilasciato nel 2017, ed è stato risolto nei kernel 6.18.22, 6.19.12 e 7.0. Lo stato della risoluzione delle vulnerabilità nelle distribuzioni può essere valutato su queste pagine: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora, ROSA.

Come soluzione alternativa, è possibile disabilitare il modulo del kernel algif_aead, che viene utilizzato in OpenSSL quando il motore afalg è esplicitamente abilitato e in alcune applicazioni (per verificare la presenza di tali applicazioni in esecuzione, si può utilizzare il comando «lsof | grep AF_ALG»):

    echo «install algif_aead /bin/false» > /etc/modprobe.d/disable-algif.conf
    rmmod algif_aead

    Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster