
Port Go du PoC Copy Fail pour CVE-2026-31431, une faille du noyau Linux authencesn permettant une écriture de 4 octets dans le cache de pages via AF_ALG et splice. Inclut un pipeline de compilation multi-architectures et une documentation technique détaillée.
Ce dépôt fournit un portage Go du PoC public Copy Fail ainsi qu'un pipeline de compilation reproductible pour des binaires Linux multi-architectures.
Copy Fail (CVE-2026-31431) est une faille logique du noyau Linux dans authencesn qui permet une écriture déterministe de 4 octets dans les données du cache de pages référencées via AF_ALG + splice().
Utilisez ce projet uniquement dans des environnements où vous êtes explicitement autorisé à tester. N'exécutez pas ce PoC contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation écrite d'évaluation.
Si vous souhaitez tester immédiatement sans compiler depuis les sources, téléchargez un binaire de release et exécutez-le :
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
Pour d'autres architectures, téléchargez l'artefact correspondant depuis la page GitHub Releases :
Compiler toutes les cibles Linux :
make clean build-linux
Compiler et générer les sommes de contrôle :
make clean checksums
Binaires de sortie dans 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_armv7SHA256SUMSExécution par défaut :
./copy-fail-cve-2026-31431_linux_amd64
Utiliser un chemin cible personnalisé :
./copy-fail-cve-2026-31431_linux_amd64 -target /path/to/binary
Désactiver l'exécution de su après l'exécution :
./copy-fail-cve-2026-31431_linux_amd64 -spawn-su=false
Afficher les métadonnées de compilation :
./copy-fail-cve-2026-31431_linux_amd64 -version
Si l'exécution échoue à l'offset 0 avec une erreur similaire à :
error: copy chunk at offset 0: splice(pipe->AF_ALG): software caused connection abort
le noyau a très probablement rejeté le chemin AEAD en place vulnérable (par exemple parce que l'hôte est corrigé pour CVE-2026-31431 ou que algif_aead est atténué/désactivé).
Vérifications rapides :
uname -r
grep -E "algif_aead|authencesn" /proc/modules
Sur les systèmes corrigés, ce PoC est censé échouer.
Selon la divulgation publique, le chemin vulnérable permet à un utilisateur local non privilégié d'influencer une primitive d'écriture de 4 octets dans le contenu du cache de pages de fichiers lisibles dans des conditions spécifiques.
La propriété opérationnelle importante est que la copie du cache de pages en mémoire peut diverger des octets sur disque pendant l'exécution, ce qui peut rendre l'analyse d'impact non triviale pour les équipes qui s'appuient uniquement sur des vérifications d'intégrité au niveau du disque.
Copy Fail est remarquable car il a été signalé comme :
À un niveau élevé, le problème se situe à l'intersection de trois mécanismes :
AF_ALG.splice().authencesn.Dans la conception vulnérable, les segments adossés au cache de pages peuvent être liés dans une forme de requête qui reçoit ensuite des écritures pendant le traitement de l'algorithme, violant une hypothèse clé selon laquelle seules les régions de destination prévues sont modifiées.
Dans le chemin documenté, authencesn utilise des opérations de zone de travail côté destination autour de la gestion de la disposition ESN et effectue une écriture à un offset au-delà du contrat de sortie de déchiffrement attendu.
Lorsqu'il est combiné avec la configuration AEAD en place et les références scatterlist chaînées, cette écriture peut atterrir dans la mémoire adossée au cache de pages pour des régions sélectionnées par l'attaquant.
La divulgation décrit une évolution en plusieurs commits :
authencesn est issu de l'historique d'intégration antérieur.AF_ALG a introduit l'accessibilité depuis l'espace utilisateur avec l'interaction splice().algif_aead a combiné les flux source et destination d'une manière qui a rendu cette intersection exploitable.La leçon clé est le risque de composition : des changements individuellement raisonnables peuvent devenir dangereux en combinaison.
Le rapport public et le PoC décrivent cette séquence :
AF_ALG pour authencesn(hmac(sha256),cbc(aes)).splice() pour acheminer les données de fichiers adossées au cache de pages à travers le chemin de requête.L'implémentation Go de ce dépôt reflète la logique de ce PoC public pour la recherche et la validation dans des environnements autorisés.
Le correctif signalé rétablit l'opération AEAD en place vulnérable dans algif_aead vers un comportement hors place.
Conceptuellement :
AF_ALG lorsque cela est opérationnellement faisable).Basée sur le rapport public :
| Date | Événement |
|---|---|
| 2026-03-23 | Rapport soumis à l'équipe de sécurité du noyau Linux |
| 2026-03-24 | Accusé de réception initial |
| 2026-03-25 | Discussion/examen du correctif |
| 2026-04-01 | Correctif validé dans la branche principale |
| 2026-04-22 | CVE-2026-31431 attribué |
| 2026-04-29 | Divulgation publique |
La recherche publiée crédite une analyse de sous-système assistée par IA et guidée par des humains, axée sur les chemins de code crypto accessibles depuis l'espace utilisateur et la provenance scatterlist/page sous splice().
main.go : portage Go du PoC.Makefile : cibles de compilation Linux multi-architectures déterministes..github/workflows/build.yml : flux de travail CI de compilation et de publication d'artefacts.Fichier de flux de travail : .github/workflows/build.yml
Déclencheurs :
mainv*workflow_dispatch manuelComportement :
make clean checksums.v*.Flux de release suggéré :
git tag v1.0.0
git push origin v1.0.0
| Distribution | Version du noyau |
|---|---|
| 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 |