
Port Go du PoC d'élévation de privilèges du noyau Linux CVE-2026-31431 (copy-fail), avec énumération automatique des binaires SUID et sélection interactive de la cible.
Portage Go du PoC Python de grenkoca pour CVE-2026-31431 (copy-fail).
Cette version compile en un binaire entièrement statique avec zéro dépendance à l'exécution - pas de Python, pas de pip, aucune contrainte de version libc. Déposez-le sur n'importe quelle cible Linux et exécutez-le. Il énumère également automatiquement tous les binaires SUID lisibles par tous sur la cible et vous permet de choisir lequel exploiter de manière interactive.
Réservé à la recherche en sécurité autorisée et à un usage CTF uniquement.
Découvert par Theori et divulgué publiquement le 29 avril 2026, Copy.Fail est une faille logique dans le module crypto algif_aead du noyau Linux, introduite via une optimisation de 2017. Elle affecte toutes les distributions Linux grand public depuis 2017.
En manipulant l'interface crypto AF_ALG du noyau, un attaquant non privilégié peut écrire des données contrôlées directement dans le cache de pages Linux - la représentation en mémoire des binaires système de confiance. Cela permet de détourner temporairement des binaires comme /usr/bin/su sans modifier le fichier sur disque, rendant la forensique basée sur le disque aveugle à l'attaque.
Contrairement à de nombreuses failles d'élévation de privilèges locales qui dépendent de conditions de course ou de fuites d'adresses du noyau, Copy.Fail est très fiable et fonctionne de manière constante avec un simple compte utilisateur standard.
Impact :
Noyaux affectés : Toutes les distributions depuis 2017. Voir le PoC original de grenkoca pour la plage de versions spécifique.
| Outil | Version |
|---|---|
| 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 .
Les options -s -w suppriment les informations de débogage pour réduire la taille du binaire. CGO_ENABLED=0 produit un binaire entièrement statique sans dépendance libc - déposez-le sur n'importe quelle cible Linux quelle que soit la version de glibc.
| Cible | Commande |
|---|---|
| Linux ARM64 | GOOS=linux GOARCH=arm64 CGO_ENABLED=0 go build -o copy-fail . |
| Linux x86 32 bits | GOOS=linux GOARCH=386 CGO_ENABLED=0 go build -o copy-fail . |
Transférez le binaire sur la cible et exécutez-le (aucun root requis) :
./copy-fail
Exemple de session :
CVE-2026-31431 (copy-fail) - Go PoC
Based on grenkoca's original PoC
Scanning for SUID world-readable binaries...
SUID world-readable binaries found:
------------------------------------
[1] /usr/bin/su
[2] /usr/bin/sudo
[3] /usr/bin/passwd
[4] /usr/bin/newgrp
Select target [1-4]: 1
[*] Targeting: /usr/bin/su
[*] Writing 48 bytes to /usr/bin/su...
[+] Write complete. Executing target...
# whoami
root
O_RDONLY - aucune permission d'écriture requise.AF_ALG (SOCK_SEQPACKET) liée à la transformation AEAD authencesn(hmac(sha256),cbc(aes)).sendmsg conçu avec MSG_MORE et des messages de contrôle SOL_ALG pour mettre en file une opération crypto contre l'entrée du cache de pages du fichier cible.splice(2) pour déplacer les pages du fichier vers la socket ALG, déclenchant le chemin vulnérable du noyau qui réécrit les pages du cache de pages modifiées sans revérifier les permissions du fichier.| Original (Python) | Ce dépôt (Go) |
|---|
| Langage | Python 3 | Go 1.21+ |
| Cible | /usr/bin/su codé en dur | Détection automatique via analyse du système de fichiers en direct |
| Sélection de la cible | Aucune | Menu interactif numéroté |
| Distribution | Script | Binaire statique unique (aucune dépendance à l'exécution) |