
# Implementación en Python de copyfail (CVE-2026-31431)
Puerto de Python de badsectorlabs/copyfail-go (CVE-2026-31431). Solo Linux; requiere Python 3.10+ (os.splice).
Esta herramienta no utiliza el truco de la caché de páginas de /etc/passwd.
su con shellcode incrustado (los mismos payloads que el main.go de Go) y luego ejecuta su.su como un programa setuid root, no de hacer que getpwnam() piense que tu UID es 0 mediante /etc/passwd.Otros PoCs públicos de Python para la misma CVE pueden parchear /etc/passwd en la caché de páginas y luego indicarte que ejecutes su <usuario>. Ese es un archivo objetivo diferente y un paso posterior diferente al de este script.
Solo para pruebas autorizadas: úsalo únicamente en hosts que te pertenezcan o para los que tengas permiso explícito de evaluación.
chmod +x copyfail_su.py
# Flujo de estilo interactivo (misma idea que copyfail-go sin --exec)
./copyfail_su.py --backup /tmp/su.bak
# Ejecutar otro programa elevado (pasa la ruta como argv a su; usa el payload exec-argv1)
./copyfail_su.py --backup /tmp/su.bak --exec /ruta/completa/al/binario
Después de una ejecución exitosa, restaura el su real.
--backupEl PoC corrompe la caché de páginas de /usr/bin/su. No asumas que el archivo en disco sigue siendo confiable hasta que lo verifiques o lo reinstales.
Reinstala el paquete que posee /usr/bin/su (encuéntralo primero, luego reinstala):
rpm -qf /usr/bin/su y luego sudo dnf reinstall shadow-utils (usa el nombre del paquete reportado).dpkg -S /usr/bin/su y luego sudo apt install --reinstall <paquete>.Verifica: sudo rpm -V <paquete> para detectar cambios inesperados en /usr/bin/su, o debsums en sistemas estilo Debian.
Opcional: reinicia después de la reinstalación para evitar suposiciones de caché obsoleta.
Si no puedes reinstalar como root: arranque de recuperación, USB en vivo, o reemplaza /usr/bin/su desde una imagen conocida de la misma distribución/versión/arquitectura; asegura la propiedad root:root y el modo ().
4755-rwsr-xr-x