
# Implementazione in Python di copyfail (CVE-2026-31431)
Port Python di badsectorlabs/copyfail-go (CVE-2026-31431). Solo Linux; richiede Python 3.10+ (os.splice).
Questo strumento non utilizza il trucco della page cache di /etc/passwd.
su con shellcode incorporato (stessi payload del main.go in Go), quindi esegue su.su come programma setuid root, non dal far credere a getpwnam() che il tuo UID sia 0 tramite /etc/passwd.Altri PoC Python pubblici per la stessa CVE potrebbero modificare /etc/passwd nella page cache e poi istruirti a eseguire su <utente>. Si tratta di un file target diverso e di un follow-up diverso rispetto a questo script.
Solo per test autorizzati — utilizzalo esclusivamente su host di tua proprietà o per i quali hai esplicito permesso di valutazione.
chmod +x copyfail_su.py
# Flusso in stile interattivo (stessa idea di copyfail-go senza --exec)
./copyfail_su.py --backup /tmp/su.bak
# Esegui un altro programma con privilegi elevati (passa il percorso come argv a su; usa il payload exec-argv1)
./copyfail_su.py --backup /tmp/su.bak --exec /percorso/completo/al/binario
Dopo un'esecuzione riuscita, ripristina il vero su.
--backupIl PoC corrompe la page cache di /usr/bin/su. Non dare per scontato che il file su disco sia ancora affidabile finché non lo verifichi o lo reinstalli.
Reinstalla il pacchetto che possiede /usr/bin/su (trovalo prima, poi reinstalla):
rpm -qf /usr/bin/su poi sudo dnf reinstall shadow-utils (usa il nome del pacchetto riportato).dpkg -S /usr/bin/su poi sudo apt install --reinstall <pacchetto>.Verifica: sudo rpm -V <pacchetto> per modifiche inattese a /usr/bin/su, oppure debsums sui sistemi Debian-style.
Opzionale: riavvia dopo la reinstallazione per evitare assunzioni di cache obsolete.
Se non puoi reinstallare come root: avvio di ripristino, Live USB, oppure sostituisci /usr/bin/su da un'immagine nota e valida della stessa distro/versione/architettura; assicurati che la proprietà sia root:root e la modalità ().
4755-rwsr-xr-x