
Escáner de shell para CVE-2026-31431 "Copy Fail" — una escalada de privilegios local mediante corrupción de la caché de páginas del kernel de Linux (algif_aead/AF_ALG). Comprueba la versión del kernel, el estado del parche, el estado del módulo, la exposición setuid y las mitigaciones. Es compatible con Debian 11–13 y Ubuntu 20.04–25.10. Listo para CI/CD (códigos de salida + salida JSON).
Escáner basado en shell para CVE-2026-31431 "Copy Fail", una vulnerabilidad de escalada de privilegios local en el subsistema criptográfico del kernel de Linux (interfaz algif_aead / AF_ALG). Un usuario local no privilegiado puede escribir 4 bytes en la caché de páginas en memoria de un binario setuid (p. ej., /usr/bin/su) y obtener un shell de root — sin tocar el archivo en disco.
a664bf3d603d| Distribución | Versión | Versión parcheada |
|---|---|---|
| Debian | 11 Bullseye | 5.10.251-3 |
| Debian | 12 Bookworm | 6.1.170-1 |
| Debian | 13 Trixie | 6.12.85-1 |
| Debian | Sid / Forky | 6.19.14-1 |
| Ubuntu | 20.04 LTS Focal (GA) | 5.4.0-220.240 |
| Ubuntu | 20.04 LTS Focal (HWE) | 5.15.0-135.145~20.04.1 |
| Ubuntu | 22.04 LTS Jammy (GA) | 5.15.0-135.145 |
| Ubuntu | 22.04 LTS Jammy (HWE) | 6.8.0-61.63~22.04.1 |
| Ubuntu | 24.04 LTS Noble | 6.8.0-61.63 |
| Ubuntu | 24.10 Oracular | 6.11.0-27.27 |
| Ubuntu | 25.04 Plucky | 6.14.0-15.15 |
| Ubuntu | 25.10 Questing | corrección en mainline (≥ 6.15) |
| Genérico | cualquiera | comprobación de rango en mainline (4.14 – 6.14 vulnerables) |
Las derivadas de Ubuntu basadas en las versiones anteriores (Pop!_OS, Linux Mint, Elementary OS, etc.) también se detectan mediante ID_LIKE en /etc/os-release.
| # | Comprobación | Método |
|---|---|---|
| 1 | Versión del kernel | uname -r / uname -v / dpkg / /proc/version_signature |
| 2 | Presencia del parche | Versión de compilación Debian, versión de paquete Ubuntu, prefijo de commit en /proc/version |
| 3 | Módulo algif_aead | /proc/modules, lista negra de modprobe.d, .ko en disco |
| 4 | Socket AF_ALG | Intento en vivo de socket(AF_ALG, …) mediante Python 3 |
| 5 | Binarios setuid | Binarios setuid-root comunes como objetivos de escritura |
| 6 | Mitigaciones | Estado de AppArmor, SELinux, seccomp |
| 7 | Configuración del kernel | CONFIG_CRYPTO_AUTHENC, CONFIG_CRYPTO_USER_API_AEAD |
| 8 | Espacios de nombres de usuario | unprivileged_userns_clone, max_user_namespaces |
| 9 | Páginas enormes transparentes | Configuración de THP y efecto en la explotación |
| 10 | Entorno | Detección de Docker / Kubernetes / WSL, advertencia de root |
# Basic scan
bash cve-2026-31431-detect.sh
# No colour output (log files, CI)
bash cve-2026-31431-detect.sh --no-colour
# JSON output (machine-readable, for pipelines)
bash cve-2026-31431-detect.sh --json
# Quiet mode — only print the summary
bash cve-2026-31431-detect.sh --quiet
# Combine flags
bash cve-2026-31431-detect.sh --json --quiet
No se requiere root. No es necesario instalar paquetes más allá de un shell estándar (bash ≥ 4.3) y opcionalmente python3 para la prueba en vivo del socket AF_ALG.
| Código | Significado |
|---|---|
0 | No se encontraron condiciones vulnerables |
1 | Se encontraron una o más condiciones vulnerables |
2 | Error del script / no se pudieron completar las comprobaciones |
Diseñado para su uso en pipelines DevSecOps — canalice la salida JSON a su SIEM, sistema de tickets o panel de cumplimiento.
El script imprime los resultados en dos idiomas:
Ambas secciones se imprimen en stdout después de los resultados por comprobación.
=== Versión del Kernel ===
[INFO] Sabor de distro : ubuntu (id=ubuntu, codename=jammy, version=22.04)
[INFO] Versión del kernel : 5.15.0-135-generic
[OK] Versión del kernel
Razón : Ubuntu jammy: kernel 5.15.0-135.145 >= versión parcheada 5.15.0-135.145
...
✅ PROTEGIDO — EL SISTEMA NO ES VULNERABLE
❌ VULNERABLE — SE REQUIERE ACCIÓN INMEDIATA
✗ Versión del kernel
✗ Presencia del parche
✗ Módulo algif_aead
✗ Socket AF_ALG
✗ Binarios setuid
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: uname -v → must show >= 6.1.170-1 (Bookworm)
sudo apt update && sudo apt full-upgrade && sudo reboot
# After reboot: cat /proc/version_signature
Solo es efectiva cuando CONFIG_CRYPTO_USER_API_AEAD=m (compilado como módulo). No tiene efecto si la opción está compilada en el kernel (=y).
echo 'install algif_aead /bin/false' | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
Esto no afecta a SSH, dm-crypt/LUKS, OpenSSL, GnuTLS, NSS, servidores web o cifrado de disco.
MIT