
Exploit C per CVE-2026-31431 (Copy Fail) che mira alla vulnerabilità splice AF_ALG di Linux. Include test di rilevamento ed escalation dei privilegi tramite manipolazione della cache di pagina di /usr/bin/su per ottenere una shell root.
CVE-2026-31431 (Copy Fail) è un PoC in C, logicamente allineato all'exploit Python originale theori-io/copy-fail-CVE-2026-31431.
Esclusivamente per ricerca sulla sicurezza autorizzata e ambienti sperimentali. Vietato l'uso su sistemi non autorizzati.
Su Linux, authencesn(hmac(sha256),cbc(aes)) di AF_ALG, nel percorso splice + AEAD, può scrivere 4 byte dell'AAD nella page cache del file di destinazione (il contenuto su disco non cambia).
L'exploit in questo repository si comporta come l'originale:
/usr/bin/susu; la page cache alterata carica una su contraffatta, consentendo di ottenere una root shell solitamente senza passwordcopy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # AF_ALG / splice 原语
│ ├── util.c # 前置检查
│ ├── test_main.c # 漏洞检测
│ └── exploit_main.c # 提权
├── Makefile
└── README.md
Ubuntu / Debian:
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
Genera:
| Prodotto | Descrizione |
|---|---|
bin/copy-fail-test | rilevamento della vulnerabilità (file sentinel temporaneo, non modifica file di sistema) |
bin/copy-fail-exploit | escalation dei privilegi (modifica la page cache di /usr/bin/su poi exec su) |
Se dopo la compilazione su un sistema recente compare GLIBC_2.34 / GLIBC_2.38 not found, eseguire sulla macchina di compilazione:
make static
Copiare bin/copy-fail-test e bin/copy-fail-exploit sulla macchina di destinazione ed eseguirli. In alternativa, si può eseguire make sul codice sorgente sulla macchina di destinazione (linking dinamico, dimensioni minori).
./bin/copy-fail-test
echo $?
| Codice di uscita | Significato |
|---|---|
| 0 | Nessuna caratteristica di vulnerabilità rilevata / prerequisiti non soddisfatti |
| 2 | Sono presenti caratteristiche di vulnerabilità |
| 1 | Errore durante il test |
./bin/copy-fail-exploit
id
L'assenza di output è il comportamento previsto; in caso di successo si entra in una root shell. In caso di fallimento, echo $? restituisce generalmente 1.
AF_ALGbind dell'algoritmo authencesn(hmac(sha256),cbc(aes))/usr/bin/susplice può scrivere sul socket AF_ALGSe il rilevatore segnala cannot be instantiated (No such file or directory):
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
Alcune distribuzioni disabilitano algif_aead tramite modprobe (come la mitigazione USN di Ubuntu); è necessario rimuovere la disabilitazione su una macchina sperimentale con root prima di ripetere il test.
Dopo il test di escalation (nella root shell) si può eliminare l'inquinamento della page cache:
echo 3 > /proc/sys/vm/drop_caches
Oppure riavviare la macchina virtuale.