
Port Go del PoC Copy Fail per CVE-2026-31431, una vulnerabilità del kernel Linux authencesn che consente una scrittura di 4 byte nella cache di pagina tramite AF_ALG e splice. Include pipeline di build multi-arch e documentazione tecnica dettagliata.
Questo repository fornisce una porta Go del PoC pubblico di Copy Fail e una pipeline di build riproducibile per binari Linux multi-architettura.
Copy Fail (CVE-2026-31431) è un difetto logico del kernel Linux in authencesn che consente una scrittura deterministica di 4 byte nei dati della page cache referenziati tramite AF_ALG + splice().
Utilizza questo progetto solo in ambienti in cui sei esplicitamente autorizzato a testare. Non eseguire questo PoC contro sistemi che non possiedi o per i quali non hai il permesso scritto di valutare.
Se vuoi testare immediatamente senza compilare dal sorgente, scarica un binario di release ed eseguilo:
wget https://github.com/ErdemOzgen/copy-fail-cve-2026-31431/releases/download/v1.0.1/copy-fail-cve-2026-31431_linux_amd64
chmod +x copy-fail-cve-2026-31431_linux_amd64
./copy-fail-cve-2026-31431_linux_amd64
Per altre architetture, scarica l'asset corrispondente dalla pagina GitHub Releases:
Compila tutti i target Linux:
make clean build-linux
Compila e genera i checksum:
make clean checksums
Binari di output in dist/:
copy-fail-cve-2026-31431_linux_amd64copy-fail-cve-2026-31431_linux_arm64copy-fail-cve-2026-31431_linux_386copy-fail-cve-2026-31431_linux_armv7SHA256SUMSEsecuzione predefinita:
./copy-fail-cve-2026-31431_linux_amd64
Utilizza un percorso target personalizzato:
./copy-fail-cve-2026-31431_linux_amd64 -target /path/to/binary
Disabilita l'esecuzione di su post esecuzione:
./copy-fail-cve-2026-31431_linux_amd64 -spawn-su=false
Stampa i metadati di build:
./copy-fail-cve-2026-31431_linux_amd64 -version
Se l'esecuzione fallisce all'offset 0 con un errore simile a:
error: copy chunk at offset 0: splice(pipe->AF_ALG): software caused connection abort
il kernel ha molto probabilmente rifiutato il percorso AEAD in-place vulnerabile (ad esempio perché l'host è stato patchato per CVE-2026-31431 o algif_aead è mitigato/disabilitato).
Controlli rapidi:
uname -r
grep -E "algif_aead|authencesn" /proc/modules
Su sistemi corretti, ci si aspetta che questo PoC fallisca.
Secondo la divulgazione pubblica, il percorso vulnerabile consente a un utente locale non privilegiato di influenzare una primitiva di scrittura di 4 byte nel contenuto della page cache di file leggibili in condizioni specifiche.
La proprietà operativa importante è che la copia nella page cache in memoria può divergere dai byte su disco durante l'esecuzione, il che può rendere l'analisi dell'impatto non banale per i team che si affidano solo a controlli di integrità a livello di disco.
Copy Fail è notevole perché è stato segnalato come:
Ad alto livello, il problema si trova all'intersezione di tre meccanismi:
AF_ALG.splice().authencesn.Nel design vulnerabile, i segmenti supportati dalla page cache possono essere collegati in una forma di richiesta che successivamente riceve scritture durante l'elaborazione dell'algoritmo, violando un'ipotesi chiave secondo cui vengono modificate solo le regioni di destinazione previste.
Nel percorso documentato, authencesn utilizza operazioni scratch sul lato di destinazione attorno alla gestione del layout ESN ed esegue una scrittura a un offset oltre il contratto di output di decrittazione previsto.
Quando combinato con la configurazione AEAD in-place e i riferimenti scatterlist concatenati, questa scrittura può finire nella memoria supportata dalla page cache per regioni selezionate dall'attaccante.
La divulgazione descrive un'evoluzione multi-commit:
authencesn ha avuto origine nella storia di integrazione precedente.AF_ALG ha introdotto la raggiungibilità da userspace con l'interazione splice().algif_aead ha combinato il flusso di origine e destinazione in un modo che ha reso sfruttabile questa intersezione.La lezione chiave è il rischio compositivo: modifiche individualmente ragionevoli possono diventare non sicure in combinazione.
Il write-up pubblico e il PoC descrivono questa sequenza:
AF_ALG per authencesn(hmac(sha256),cbc(aes)).splice() per instradare i dati dei file supportati dalla page cache attraverso il percorso di richiesta.L'implementazione Go di questo repository rispecchia quella logica PoC pubblica per ricerca e validazione in ambienti autorizzati.
La correzione segnalata ripristina l'operazione AEAD in-place vulnerabile in algif_aead al comportamento out-of-place.
Concettualmente:
AF_ALG dove operativamente fattibile).Basata sul write-up pubblico:
| Data | Evento |
|---|---|
| 2026-03-23 | Report inviato al team di sicurezza del kernel Linux |
| 2026-03-24 | Riconoscimento iniziale |
| 2026-03-25 | Discussione/revisione della patch |
| 2026-04-01 | Correzione committata a mainline |
| 2026-04-22 | CVE-2026-31431 assegnato |
| 2026-04-29 | Divulgazione pubblica |
La ricerca pubblicata accredita l'analisi dei sottosistemi guidata da umani e assistita da IA, focalizzata sui percorsi di codice crypto raggiungibili da userspace e sulla provenienza scatterlist/page sotto splice().
main.go: Porta Go del PoC.Makefile: target di build Linux multi-architettura deterministici..github/workflows/build.yml: workflow CI di build e rilascio artefatti.File del workflow: .github/workflows/build.yml
Trigger:
mainv*workflow_dispatch manualeComportamento:
make clean checksums.v*.Flusso di release suggerito:
git tag v1.0.0
git push origin v1.0.0
| Distribuzione | Versione del Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |