Cómo proteger tu servidor Linux frente a CVE-2026-31431 (Copy Fail)

¿Qué es CVE-2026-31431?

CVE-2026-31431, conocido como "Copy Fail", es una vulnerabilidad de escalación local de privilegios en el kernel de Linux con puntuación CVSS 7.8. Fue divulgada públicamente el 29 de abril de 2026; el parche en el kernel principal se fusionó el 1 de abril de 2026.

Se trata de un error lógico en la interfaz de sockets AEAD algif_aead (plantilla authencesn(...)), introducido en 2017. Permite que un usuario local sin privilegios realice una escritura controlada de 4 bytes en la caché de páginas de cualquier archivo legible, típicamente para sobrescribir un binario setuid y obtener root.

El exploit es confiable, de un solo disparo (un script Python de 732 bytes, sin offsets ni condiciones de carrera) y funciona en prácticamente cualquier distribución Linux publicada desde 2017 con CONFIG_CRYPTO_USER_API_AEAD habilitado.

Es solo local. No se puede explotar de forma remota, pero se combina letalmente con cualquier otro bug que otorgue acceso shell al atacante (RCE en aplicaciones web, SSH débil, cuenta de usuario cPanel/DirectAdmin, escape de contenedor).

¿Te afecta?

Sí, casi con certeza, si ejecutas cualquier servidor Linux moderno.

Distribuciones confirmadas afectadas:

  • Ubuntu, Debian
  • AlmaLinux, Rocky Linux, CentOS
  • RHEL, CloudLinux 8/9/10
  • SUSE, Amazon Linux 2023

No afectado: CloudLinux 7.

Aplica a servidores físicos, máquinas virtuales y hosts de contenedores. La CVE está en el kernel, no en un paquete de espacio de usuario, por lo que los contenedores heredan la vulnerabilidad del kernel del host.

Cómo comprobar si tu servidor está vulnerable

Proporcionamos un script de detección que ejecuta cinco comprobaciones no destructivas e imprime un veredicto único: PATCHED, MITIGATED, VULNERABLE o UNKNOWN.

scp cve-2026-31431-check.sh root@TU_SERVIDOR:/root/
ssh root@TU_SERVIDOR
bash /root/cve-2026-31431-check.sh

Para escaneos masivos en muchos servidores, agrega --quiet para obtener una sola línea parseable por host.

Puedes descargar el script desde el archivo adjunto al final de este artículo.

Lo que comprueba:

  1. Línea de comandos del kernel en busca de initcall_blacklist=algif_aead_init
  2. Nivel de livepatch de KernelCare (solo CloudLinux)
  3. Kernel en ejecución frente a la tabla de versiones parcheadas para la familia RHEL / Debian / Ubuntu
  4. Entradas de blacklist en /etc/modprobe.d, y si algif_aead está compilado en el kernel (en cuyo caso el blacklist no tiene efecto)
  5. Prueba funcional de enlace AF_ALG AEAD (Python o Perl, selecciona automáticamente lo que esté disponible)

Cómo mitigar

Opción Ideal para ¿Reinicio? ¿Duradero?
Instalar kernel parcheado del vendor Todos, solución a largo plazo
Livepatch de KernelCare Servidores CloudLinux No
Workaround en línea de comandos del kernel Cualquiera, mientras esperas el parche Temporal

Opción A: kernel parcheado del vendor

Versiones mínimas parcheadas por distribución:

  • AlmaLinux / CloudLinux / Rocky 8: kernel-4.18.0-553.121.1.el8_10
  • AlmaLinux / CloudLinux / Rocky 9: kernel-5.14.0-611.49.2.el9_7
  • AlmaLinux / CloudLinux / Rocky 10: kernel-6.12.0-124.52.2.el10_1
  • Upstream mainline: 7.0, 6.19.12, 6.18.22 (o el backport LTS correspondiente para 6.12.x / 6.6.x / 5.15.x / 5.10.x)
  • Debian / Ubuntu: revisa el changelog del paquete con apt changelog linux-image-$(uname -r) | grep CVE-2026-31431; el script lo hace automáticamente.

Si el kernel parcheado aún no está en el canal estable de tu distribución, instálalo desde el canal de pruebas (ejemplo para AlmaLinux):

A=$(rpm -E %rhel); ARCH=$(uname -m); SFX=$([ "$A" -ge 10 ] && echo "$ARCH" || echo noarch)
dnf -y install "https://repo.almalinux.org/almalinux/${A}/extras/${ARCH}/os/Packages/almalinux-release-testing-${A}-1.el${A}.${SFX}.rpm"
dnf -y --enablerepo=almalinux-testing upgrade 'kernel*'
reboot

Opción B: livepatch de KernelCare (solo CloudLinux)

kcarectl --update
kcarectl --patch-info | grep K20260430_07

El nivel de parche K20260430_07 o superior cubre Copy Fail. No requiere reinicio.

Opción C: workaround en línea de comandos del kernel

Desactiva el initcall de AEAD para que la interfaz vulnerable nunca se registre. Funciona en todas las distribuciones, incluyendo kernels de la familia RHEL donde el módulo está compilado en el kernel.

Familia RHEL (CloudLinux, AlmaLinux, Rocky, RHEL):

grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot

Debian / Ubuntu:

Edita /etc/default/grub, agrega initcall_blacklist=algif_aead_init a GRUB_CMDLINE_LINUX, luego:

update-grub
reboot

Verifica con:

grep -o 'initcall_blacklist=[^ ]*' /proc/cmdline

Trampa que NO funciona

Un archivo de blacklist como /etc/modprobe.d/disable-algif-aead.conf con install algif_aead /bin/false no tiene efecto en kernels de la familia RHEL porque CONFIG_CRYPTO_USER_API_AEAD=yalgif_aead está compilado directamente en la imagen del kernel, no se carga como módulo. Usa el workaround de línea de comandos del kernel en su lugar. Verifica con:

grep algif_aead /lib/modules/$(uname -r)/modules.builtin

Si hay una coincidencia, el blacklist de modprobe no te protege.

Después de mitigar

  1. Ejecuta nuevamente bash /root/cve-2026-31431-check.sh y confirma que el veredicto sea PATCHED o MITIGATED.
  2. Si usaste el workaround de cmdline, planifica instalar el kernel parcheado del vendor cuando esté disponible, y luego elimina el workaround:
    grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
    reboot
  3. Confirma con el script una vez más.

¿Necesitas ayuda?

Abre un ticket en soporte.telecu.cloud y menciona la referencia: CVE-2026-31431.

Fuentes

Ficheros Adjuntos
cve-2026-31431-check.sh
404kb
Etiquetas