
Archivado, movido a codesource/cve-check. Script de shell para detectar la exposición y las mitigaciones de CVE-2026-31431 (Copy Fail) en sistemas Linux: comprobación del kernel, estado de los módulos, parámetros de arranque, accesibilidad de AF_ALG y estado de los parches de la distribución.
[!IMPORTANT] Este repositorio está archivado. La comprobación de Copy Fail ahora reside en cve-check, junto con otras comprobaciones de vulnerabilidades y un modo opcional
--fixque aplica la remediación. Consulte checks/CVE-2026-31431 para esta comprobación.curl -fsSL https://raw.githubusercontent.com/codesource/cve-check/main/cve-check.sh | sudo bash -s -- CVE-2026-31431El script
check_copyfail.shque aparece a continuación sigue funcionando, pero ya no se actualiza.
Scripts de shell para detectar vulnerabilidades del kernel de Linux, comprobar el estado de las mitigaciones y guiar la remediación — diseñados para ejecutarse localmente o en flotas mediante SSH, Ansible o pssh.
Copy Fail es una vulnerabilidad de escalada de privilegios local (LPE) de alta gravedad en el módulo criptográfico algif_aead del kernel de Linux. Un fallo lógico introducido en 2017 permite a cualquier usuario local sin privilegios escribir 4 bytes controlados en la caché de páginas de cualquier archivo legible — suficiente para sobrescribir un binario setuid y obtener root. Existe una prueba de concepto funcional en Python de 732 bytes y está disponible públicamente.
| CVE | CVE-2026-31431 |
| CVSS | 7.8 (Alta) |
| Divulgada | 29 de abril de 2026 |
| Afectados | Kernels de Linux 4.13 – 6.x (2017–2026) |
| Distribuciones | Ubuntu, RHEL, SUSE, Debian, Amazon Linux y la mayoría de las demás |
| Explotable remotamente | No — se requiere acceso local |
| Parche disponible | Parcial — consulte los avisos de su distribución |
| Comprobación | ¿Requiere root? |
|---|---|
| Versión del kernel — si está en el rango afectado (≥ 4.13) | No |
Módulo algif_aead — cargado, presente en disco o en la lista negra | No |
Parámetros de arranque — presencia de initcall_blacklist=algif_aead_init | No |
| Accesibilidad del socket AF_ALG — si la ruta de explotación está abierta | No |
| Estado de SELinux | No |
| Estado de AppArmor | Sí — solo salida parcial sin root |
| Estado del parche de la distribución — CVE listada en el changelog del kernel | No |
No se requiere root para ejecutar el script — todas las comprobaciones excepto el estado de AppArmor funcionan como usuario normal. Se recomienda ejecutarlo con
sudopara obtener resultados completos, y es la opción más segura cuando se canaliza desdecurl.
El script está diseñado para funcionar en todas las principales distribuciones de Linux:
| Familia de distribución | Comprobación del gestor de paquetes | Ruta de módulos |
|---|---|---|
| Debian, Ubuntu | dpkg + changelog del kernel | /lib/modules/ |
| RHEL, CentOS, Amazon Linux | rpm (kernel, kernel-rt) | /lib/modules/ |
| SUSE, openSUSE | rpm (kernel-default) | /lib/modules/ |
| Arch Linux | pacman + enlace al aviso | /usr/lib/modules/ |
| Fedora | rpm + respaldo en /usr/lib/modules/ | /usr/lib/modules/ |
Requiere
bash— el script utiliza sintaxis específica de bash y no se ejecutará bajosh,ashodash. En Alpine Linux (que usa busybox ash por defecto), instale bash primero:apk add bash
Sin root — la mayoría de las comprobaciones funcionan:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | bash
Con root — resultados completos incluyendo el estado de AppArmor:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash
Consejo: Fija un SHA de commit específico en producción para que el script no pueda cambiar bajo tus pies:
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/COMMIT_SHA/check_copyfail.sh | sudo bash
curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh -o check_copyfail.sh
less check_copyfail.sh
bash check_copyfail.sh # without root
sudo bash check_copyfail.sh # full results
Bucle SSH
for HOST in server1 server2 server3; do
echo "=== $HOST ==="
ssh "$HOST" "curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
done
Ansible
- name: Check Copy Fail vulnerability
hosts: all
tasks:
- name: Run check script
script: check_copyfail.sh
become: yes
SSH en paralelo
pssh -h hosts.txt -i \
"curl -fsSL https://raw.githubusercontent.com/codesource/copyfail-check/main/check_copyfail.sh | sudo bash"
============================================================
Copy Fail CVE-2026-31431 – Vulnerability Check
============================================================
>>> Kernel Version
[INFO] Running kernel: 5.15.0-107-generic
[WARN] Kernel 5.15.0-107-generic is in the affected range (4.13 – 6.x).
>>> algif_aead Module Status
[WARN] algif_aead module is currently LOADED — system is exploitable.
[WARN] Module file found at: /lib/modules/5.15.0-107-generic/kernel/crypto/algif_aead.ko
[WARN] algif_aead is NOT blacklisted — it can be loaded on demand.
>>> Kernel Boot Parameter Mitigation
[WARN] initcall_blacklist=algif_aead_init is NOT set in boot parameters.
>>> AF_ALG Socket Reachability
[WARN] AF_ALG sockets are reachable by this user — exploit path is open.
>>> Mandatory Access Control (SELinux / AppArmor)
[WARN] Neither SELinux nor AppArmor tools detected — no MAC layer present.
>>> Distribution Patch Status
[WARN] Could not confirm CVE-2026-31431 is listed as fixed in running kernel's changelog.
============================================================
SUMMARY
============================================================
!! LIKELY VULNERABLE — No confirmed mitigation detected.
Recommended actions (in order of preference):
1. Apply your distro's kernel update as soon as available.
2. Add to /etc/modprobe.d/copyfail.conf:
blacklist algif_aead
install algif_aead /bin/true
Then run: sudo depmod -a && sudo update-initramfs -u
3. Add to kernel boot parameters (grub):
initcall_blacklist=algif_aead_init
4. Immediately unload the module if loaded:
sudo rmmod algif_aead
============================================================
Aplícalas en este orden de preferencia:
1. Parchea tu kernel (mejor solución)
# Debian / Ubuntu
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# RHEL / CentOS / Amazon Linux
sudo yum update kernel
# SUSE
sudo zypper update kernel-default
2. Incluir el módulo en la lista negra (inmediato, persistente)
sudo tee /etc/modprobe.d/copyfail.conf << 'EOF'
blacklist algif_aead
install algif_aead /bin/true
EOF
sudo depmod -a
# Debian/Ubuntu
sudo update-initramfs -u
# RHEL/Fedora
sudo dracut -f
3. Descargue el módulo ahora (inmediato, no persistente entre reinicios)
sudo rmmod algif_aead
4. Parámetro de arranque del kernel (alternativa a la lista negra)
Añade initcall_blacklist=algif_aead_init a tu configuración de GRUB y reinicia.