
Exploit para CVE-2026-31431, una vulnerabilidad de authencesn en el kernel de Linux que permite la escalada local de privilegios a root mediante la manipulación de la caché de páginas.
"Copy Fail" es una vulnerabilidad lógica crítica en la plantilla criptográfica authencesn del kernel de Linux. Permite que un usuario local sin privilegios active una escritura determinista y controlada de 4 bytes en la caché de páginas de cualquier archivo legible del sistema. Al apuntar a binarios setuid (como /usr/bin/su), un atacante puede editar la caché de ejecución en memoria para escalar privilegios a Root (UID 0).
A diferencia de vulnerabilidades más antiguas como "Dirty Cow" o "Dirty Pipe", Copy Fail es un fallo lógico de línea recta que se activa sin condiciones de carrera, reintentos ni ventanas de sincronización propensas a fallos. Es altamente portátil y sigiloso, ya que solo modifica la caché de páginas en memoria mientras deja el archivo en disco completamente sin cambios, evadiendo las herramientas estándar de monitoreo de integridad de archivos.
La vulnerabilidad existe en la intersección de tres componentes distintos del kernel:
splice(): La llamada al sistema splice() transfiere datos entre descriptores de archivo y tuberías sin copiar, pasando páginas de caché por referencia. Cuando un usuario empalma un archivo (como /usr/bin/su) en un socket AF_ALG, el scatterlist de entrada del socket contiene referencias directas a las páginas cacheadas del kernel de ese archivo.authencesn: El algoritmo authencesn (utilizado para Números de Secuencia Extendidos de IPsec) requiere reorganizar bytes. Para ello, escribe temporalmente 4 bytes de números de secuencia en el búfer de salida como "espacio temporal". Sin embargo, escribe más allá del límite legítimo de salida.Debido a la optimización en el lugar de 2017, el scatterlist de salida contiene las páginas de caché de solo lectura pasadas por splice(). Cuando authencesn escribe más allá del límite de salida, sobrescribe directamente 4 bytes dentro de la memoria cacheada del kernel del archivo objetivo.
Un atacante puede explotar esto siguiendo estos pasos:
AF_ALG sin privilegios y vincularlo a authencesn(hmac(sha256),cbc(aes)).sendmsg() manipulado con una carga útil de Datos Autenticados Asociados (AAD) que contenga los 4 bytes que desea escribir.splice() para canalizar el archivo objetivo (/usr/bin/su) hacia el socket. El desplazamiento y la longitud definen exactamente dónde en la caché de páginas se escribirán los 4 bytes.recv() activa la operación de descifrado, ejecutando la escritura temporal fuera de los límites directamente en la caché de páginas del archivo objetivo.execve("/usr/bin/su")). El kernel ejecuta la versión manipulada de la caché de páginas que contiene el shellcode malicioso inyectado, otorgando acceso root.Si no es posible parchear o reiniciar el kernel de inmediato, puede mitigar esta vulnerabilidad bloqueando todos los módulos af_alg relacionados y descargándolos de la memoria.
Para bloquear estos módulos, ejecute los siguientes comandos:
# 1. Descargar los módulos de la memoria si están cargados actualmente
sudo modprobe -r algif_hash algif_skcipher algif_aead algif_rng af_alg
# 2. Agregar los módulos a la lista negra
echo -e "blacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng" | sudo tee /etc/modprobe.d/stop-exploit.conf
# 3. Evitar que el módulo af_alg se cargue por completo
echo "install af_alg /bin/true" | sudo tee -a /etc/modprobe.d/stop-exploit.conf
# 4. Reiniciar el sistema para asegurar que los cambios surtan efecto completo
sudo reboot
El equipo de seguridad del kernel de Linux ha parcheado esta vulnerabilidad (Commit: a664bf3d603d). El parche revierte las operaciones AEAD de AF_ALG a un modelo fuera del lugar, separando los scatterlists de origen y destino. Esto evita que las páginas de caché queden expuestas al scatterlist de destino escribible.
Acción Requerida: Actualice el kernel de su distribución a la versión más reciente proporcionada por su proveedor (Ubuntu, Amazon Linux, RHEL, SUSE, etc.) y reinicie su sistema.