
Linux exploit locale di escalation dei privilegi per CVE-2026-31431, che abusa dell'API crittografica AF_ALG con splice() per modificare la cache delle pagine e generare una shell di root.
Questa repository contiene un piccolo PoC di escalation dei privilegi locale per Linux relativo alla CVE-2026-31431, nota anche come "Copy Fail".
L'exploit prende di mira il percorso algif_aead del kernel Linux nell'API crypto userspace AF_ALG. Utilizza AF_ALG insieme a splice() per indurre il kernel a scrivere nella cache delle pagine di /usr/bin/su in blocchi da 4 byte, quindi esegue su dopo che la cache delle pagine è stata modificata.
Il PoC in copy_fail_exp.py esegue quattro operazioni:
AF_ALG per aead con la trasformazione
authencesn(hmac(sha256),cbc(aes)).setsockopt() utilizzati nella
prova di concetto originale.splice() per spostare i dati dal file di destinazione nel percorso
di richiesta AF_ALG, che è il percorso difettoso del kernel./bin/sh.Il blob zlib non è dati casuali. È un payload compatto progettato per
sostituire l'inizio di /usr/bin/su nella cache delle pagine, così che la successiva esecuzione di su
generi una shell root.
Il codice vulnerabile è stato introdotto nelle modifiche algif_aead del kernel Linux dell'era 4.14
ed è rimasto presente fino alla correzione a monte che annulla l'ottimizzazione in-place.
algif_aead in-place vulnerabile.AF_ALG è abilitata, che è l'impostazione predefinita sulla
maggior parte delle distribuzioni Linux generiche.| Distribuzione | Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 |
6.18.226.19.127.0I rami LTS a valle sono sicuri solo dopo che il backport del fornitore arriva nel pacchetto kernel che esegui effettivamente.
Utilizza una VM di laboratorio o un host container di tua proprietà. Non eseguire questo su sistemi di produzione.
/usr/bin/su esista e sia setuid-root.python3 copy_fail_exp.py
/usr/bin/su e poi invoca
su. Dovresti ritrovarti in una shell root o vedere un prompt root, a seconda
dell'ambiente.Lo script non ha dipendenze aggiuntive oltre alla libreria standard di Python 3.
python3 copy_fail_exp.py
Se vuoi prima ispezionare il target, lo script attualmente usa come predefinito
/usr/bin/su.
Se mantieni un kernel a valle, la correzione corretta è applicare il backport del revert a monte che rimuove l'ottimizzazione AEAD in-place:
a664bf3d603dc3bdcf9ae47cc21e0daec706d7a572548b093ee3.Flusso di lavoro consigliato per un albero del kernel a valle:
git cherry-pick a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
make olddefconfig
make -j"$(nproc)"
make modules_install
make install
reboot
Se non ricompili i kernel da solo, installa il pacchetto kernel del fornitore che contiene il backport e riavvia con esso.
Se l'applicazione della patch è ritardata, disabilita il percorso del modulo come misura temporanea:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Questa è una mitigazione, non una correzione.
6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |