
Version simplifiée de CVE-2026-31431
Version facile à comprendre de CVE-2026-31431, une technique d'escalade de privilèges qui permet à n'importe qui de devenir root. La preuve de concept originale se trouve ici : https://github.com/theori-io/copy-fail-CVE-2026-31431, mais elle est fortement compressée et minifiée pour avoir la plus petite empreinte possible. Ce dépôt tente de décomposer ce code de manière plus lisible, en expliquant ce que fait le code, comment la charge utile est chargée et comment cibler différentes architectures. Voir l'analyse plus technique ici : https://xint.io/blog/copy-fail-linux-distributions.
Par défaut, l'exécution de python3 copyfail.py lance un shellcode x64 exploitant /usr/bin/su. Vous pouvez fournir votre propre charge utile en exécutant python3 copyfail.py [chemin/vers/chargeutile.elf]. Par exemple, il y a un assemblage shellcode ARM64 dans payloads/. Donc, pour tester sur des appareils ARM64, vous devez d'abord construire une charge utile minimisée avec notre script de lien personnalisé :
as -o shellcode_aarch64.o payloads/shellcode_aarch64.S
ld -nostdlib -static -o shellcode_aarch64.elf shellcode_aarch64.o
strip -s shellcode_aarch64.elf
Ensuite, vous pouvez exécuter l'exploit principal avec python3 copyfail.py shellcode_aarch64.elf.
Pour l'exécution en C :
./c_copyfail qui exécute le même shellcode par défaut que ci-dessus../c_copyfail [chemin/vers/chargeutile.elf].Pour construire la version C :
cd c_port
make
Plus précisément, cela compile le fichier .S cible en un binaire brut qui est sorti sous forme de tableau de caractères unsigned C :
gcc -c payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
ou, pour x86 32 bits,
gcc -c -m32 payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
Vous pouvez ensuite copier le contenu de ce fichier dans votre code source, ou simplement exécuter directement ./c_copyfail.exe [chemin/vers/chargeutile.elf] où chargeutile.elf est généré par as + ld et NON gcc + objcopy.
Pour éviter l'exploitation, exécutez :
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Si déjà exploité, vous pouvez redémarrer la machine ou exécuter :
echo 3 | sudo tee /proc/sys/vm/drop_caches
AF_ALGsplice(), le noyau place les pages réelles du cache de pages du fichier que vous avez splicé dans la zone de travail crypto/usr/bin/su dans ce cas)/usr/bin/su, le noyau le lit depuis le cache de pages et obtient les octets modifiés/usr/bin/su pour que UID soit 0 (root)Le binaire su est corrompu en mémoire, donc la modification du fichier ne sera pas détectée. Pour restaurer depuis le disque, vous pouvez vider le cache de pages.