Pánico en la distro

Puntos clave


  • CopyFail, Dirty Frag y Fragnesia son vulnerabilidades de escalada de privilegios en Linux fáciles de explotar. Si bien no dan ejecución remota de código por sí solas, un atacante con un punto de apoyo existente puede abusar de ellas para obtener acceso root rápidamente en los sistemas afectados.

  • Estos errores forman parte de una clase más amplia de problemas de corrupción de la caché de páginas vinculados a la funcionalidad zero-copy. Abusan de llamadas al sistema confiables que manejan memoria, como splice, vmsplice y otros mecanismos zero-copy relacionados, para alterar el contenido de archivos en caché en la RAM sin cambiar el archivo en disco.

  • Existen mitigaciones a corto plazo, pero pueden afectar las cargas de trabajo de producción. Para CopyFail, deshabilitar algif_aead puede reducir la exposición; para Dirty Frag y Fragnesia, deshabilitar esp4, esp6 y rxrpc puede ayudar, pero estas mitigaciones podrían afectar los entornos que dependen de IPsec/VPN y RxRPC/AFS.

  • Como la explotación requiere acceso previo, los defensores deben tratar estas vulnerabilidades como aceleradores de escalada de privilegios. Prevenir el compromiso inicial sigue siendo importante, pero las organizaciones deben priorizar el endurecimiento de la seguridad y la aplicación de parches para evitar que los atacantes conviertan un punto de apoyo de bajos privilegios en el control total del sistema.

  • Aplicar parches es la solución más eficaz a largo plazo. Huntress recomienda a las organizaciones pasar a las versiones de kernel más recientes compatibles con su distribución a medida que estén disponibles los parches.


Agradecimientos: Un agradecimiento especial a Jamie Levy, Tom Lawrence, Jim Deville, Tyler Bohlmann y Shivangi Pandey por sus contribuciones a este artículo.

Resumen

Nunca es un buen día para los administradores cuando se filtra una vulnerabilidad con nombre propio, y mucho menos cuando varias aparecen en rápida sucesión. En las últimas dos semanas, investigadores de seguridad descubrieron de forma independiente varias vulnerabilidades en el kernel de Linux que permiten a un usuario sin privilegios obtener fácilmente acceso root (escalada de privilegios local).  Todas estas vulnerabilidades con nombre están relacionadas con la funcionalidad de copia cero del kernel de Linux y se llaman CopyFail (CVE-2026-31431), Dirty Frag (CVE-2026-43284 y CVE-2026-43500) y Fragnesia (CVE-2026-46300).

Si bien estas vulnerabilidades requieren que un atacante ya tenga acceso establecido en la máquina víctima, y ninguna permite ejecución remota de código, son extremadamente fáciles de explotar. Un atacante puede abusar de herramientas nativas (por ejemplo, Python usando solo la biblioteca estándar), lo que le permite obtener acceso de administrador (root). Una vez que un atacante obtiene acceso root, tiene acceso administrativo total al sistema de la víctima, lo que le permite instalar más herramientas maliciosas, exfiltrar datos de usuarios con privilegios o eludir las herramientas de seguridad.

Lo que complica aún más las cosas para los defensores es la naturaleza generalizada de estas vulnerabilidades; cuando se anunciaron públicamente por primera vez, la mayoría de las distribuciones de Linux más populares se vieron afectadas (dado que residen en componentes centrales del kernel, que se incluyen prácticamente en todas las distribuciones), con muy poco tiempo para que los desarrolladores del kernel publicaran parches y las distribuciones los implementaran.

Figura 1: Usuario sin privilegios ejecutando el exploit de CopyFail para obtener acceso root

La caché gobierna todo a mi alrededor

El 29 de abril de 2026, investigadores de Xint Code anunciaron la vulnerabilidad CopyFail y una prueba de concepto (PoC) de exploit, que demostraba lo fácil que era para un usuario sin privilegios obtener acceso root. Días después, el 7 de mayo, el investigador Hyunwoo Kim anunció las vulnerabilidades Dirty Frag y un exploit de PoC que, al encadenarse, producen el mismo resultado de escalada de privilegios local que CopyFail. El 13 de mayo, William Bowling, del equipo de seguridad V12, anunció la vulnerabilidad Fragnesia y un exploit de PoC, que de nuevo lleva a acceso root directo. Todas estas vulnerabilidades se descubrieron con la ayuda de modelos de lenguaje extensos y se hicieron públicas poco después de su descubrimiento.

CopyFail es una vulnerabilidad en la API de criptografía algif_aead del kernel de Linux, que permite una interfaz de socket para cifrado autenticado. Esta vulnerabilidad se introdujo en el kernel de Linux 4.14 en 2017 mediante el commit 72548b093ee3. La vulnerabilidad es resultado de una optimización de copia cero, cuando AEAD reutiliza la memoria de origen como destino. Esto permite a un atacante sobrescribir un archivo almacenado en caché, concretamente una caché de páginas, mediante la llamada al sistema splice.

Dirty Frag es una vulnerabilidad similar a CopyFail y a la vulnerabilidad Dirty Pipe de 2022. Según el autor del exploit Dirty Frag, “mientras Dirty Pipe sobrescribe struct pipe_buffer, Dirty Frag sobrescribe el frag de struct sk_buff”, de ahí la aparición de “frag” en el nombre. Mientras CopyFail abusa de la caché de páginas del submódulo algif_aead, Dirty Frag afecta a los submódulos xfrm-ESP y RxRPC y su caché de páginas. Las vulnerabilidades de Dirty Frag se introdujeron en el kernel de Linux en 2017 y 2023, respectivamente. El autor además explica: “Lo que ambas vulnerabilidades tienen en común es que, en una ruta de envío de copia cero donde splice() coloca una referencia a una página de la caché de páginas a la que el atacante solo tiene acceso de lectura en el espacio de frag del lado emisor del skb tal cual, el código del kernel del lado receptor realiza operaciones criptográficas in situ sobre ese frag. Como resultado, la caché de páginas de archivos a los que un usuario sin privilegios solo tiene acceso de lectura (como /etc/passwd o /usr/bin/su) se modifica en la RAM, y toda lectura posterior ve la copia modificada”.

Fragnesia está relacionada con la misma área del kernel y es una variante de la vulnerabilidad Dirty Frag. Fragnesia afecta al subsistema del kernel XFRM ESP-in-TCP. Según el autor de la PoC de Fragnesia, “abusa de un error de lógica en el subsistema XFRM ESP-in-TCP de Linux para lograr escrituras de bytes arbitrarias en la caché de páginas del kernel de archivos de solo lectura, sin necesidad de ninguna condición de carrera”. Al igual que las otras vulnerabilidades, la explotación exitosa de Fragnesia también conduce a escalada de privilegios local y acceso root.

Todas estas vulnerabilidades (CopyFail, Dirty Frag, Fragnesia y Dirty Pipe) sufren de la misma debilidad: un subsistema del kernel, mediante una referencia a una caché de páginas, realiza una escritura in situ que se corrompe, y la corrupción de la caché de páginas queda expuesta a todo lector del archivo subyacente. Esto permite a un atacante obtener acceso a un archivo protegido y convertirse en root.

De héroe a día cero (de copia)

Un viejo chiste de programación dice que “hay dos problemas difíciles en las ciencias de la computación: nombrar cosas, la invalidación de caché y los errores de desfase por uno”. Aunque no se trata estrictamente de un problema de invalidación de caché, el almacenamiento en caché de páginas sigue siendo difícil, y hoy vamos a profundizar en la segunda parte: el abuso del caché de páginas.

CopyFail, Dirty Frag y Fragnesia pertenecen a una familia más amplia de vulnerabilidades que dependen de la corrupción del caché de páginas de memoria. Este tipo de ataque se vio por última vez en 2022 con la vulnerabilidad Dirty Pipe (CVE-2022-0847), que, al explotarse con éxito, también resultaba en escalada de privilegios local. Estos exploits aprovechan llamadas al sistema de copia cero como sendfile, splice y vmsplice, para poblar el caché con datos envenenados. Dado que el sistema operativo confía implícitamente en el contenido del caché de páginas, cualquier solicitud futura al archivo objetivo (o pipe, o socket) ahora se devuelve desde este caché, y los datos envenenados persisten en el caché, de forma invisible. Una de las optimizaciones de velocidad que puede aplicar un sistema operativo es revisar lo que ya está en memoria; lo insidioso de este tipo de exploits es que se enganchan al aspecto en memoria de la vulnerabilidad (el archivo que se lee en disco, por ejemplo, el binario su, permanece sin cambios, pero su copia en memoria ahora está corrupta).

Entonces, ¿qué es la copia cero? Esta funcionalidad legítima lleva ya un buen tiempo en el kernel de Linux, al menos desde la versión 2.2, lanzada en 1999. La copia cero es uno de esos impulsores de rendimiento "ocultos" que sustentan casi todo lo que hacemos en línea, desde transmitir video en 4K hasta el trading de alta frecuencia. En esencia, la copia cero trata de la eficiencia, específicamente, de eliminar la necesidad de que la CPU mueva datos entre búferes de memoria, lo cual aumenta significativamente el rendimiento y el caudal del sistema.

Cada vez que los datos se mueven de la manera tradicional, la CPU consume ciclos moviéndolos de un lado a otro. La copia cero permite que el hardware (como la NIC) extraiga datos directamente de la memoria del kernel sin que la CPU actúe como intermediaria. Lo que habría sido 4 cambios de contexto y 4 copias de datos se reduce normalmente a dos cambios de contexto y cero copias de memoria impulsadas por la CPU, de ahí el nombre "copia cero".

En lugar de hacer copias, movemos los datos mediante Acceso Directo a Memoria (DMA), a menudo pasando punteros o referencias al búfer existente del kernel en lugar de los datos en sí. Esto es distinto del típico comando malloc o new, y por diseño los datos nunca llegan siquiera a la región de memoria de la aplicación.

¿Cómo entra en juego el almacenamiento en caché aquí? El caché de páginas es la forma en que el kernel mantiene en RAM los datos de disco accedidos recientemente. Cuando una aplicación solicita datos, el kernel revisa primero el caché de páginas; si los datos no están ahí, los lee del disco, puebla el caché y luego devuelve los datos a la aplicación. Las lecturas posteriores provienen directamente del caché hasta que se invalida.

Cuando una aplicación usa una llamada de copia cero (como splice o sendfile), el kernel básicamente dice: "Si los datos que quieres no están en el caché, tráelos a memoria y luego entrégale al otro lado una referencia para leerlos directamente". Por eso estos exploits apuntan al caché: no modifican los datos en el disco; cambian lo que tu computadora cree que es equivalente a los datos en el disco.

Soluciones

Afortunadamente, hay varias formas en que los administradores y defensores pueden evitar que ocurran este tipo de ataques de escalada de privilegios local habilitados por la copia cero. Estos exploits requieren que un atacante ya tenga un punto de apoyo inicial en el sistema, por lo que aplican aquí las protecciones típicas contra el acceso inicial.

Las soluciones específicas incluyen aplicar parches a la versión de kernel más reciente que ofrece tu distribución (o actualizar a una distribución compatible que sí la ofrezca). Esta es la solución más efectiva y a largo plazo, ya que los parches se están distribuyendo al momento de escribir este artículo.

Mitigaciones específicas de CopyFail

El anuncio de CopyFail sugiere aplicar parches primero, pero en cargas de trabajo que no permiten un parcheo inmediato, se puede emplear la siguiente mitigación:

echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead

Los autores de CopyFail indican que esto no afectará la mayoría de la funcionalidad normal, con la excepción de: “software de espacio de usuario configurado específicamente para usar AF_ALG —por ejemplo, OpenSSL con el motor afalg habilitado explícitamente, algunas rutas de delegación de criptografía embebida, o aplicaciones que vinculan directamente sockets aead/skcipher/hash”.

Mitigaciones específicas de Dirty Frag y Fragnesia

El aviso de AWS contiene mitigaciones para Dirty Frag, así como el PoC para Fragnesia, que incluye lo siguiente:

Verifica si los módulos están cargados actualmente:

  lsmod | grep -E "esp4|esp6|rxrpc"

    echo 'install esp4 /bin/false' >> /etc/modprobe.d/cve
    dirtyfrag.conf

    echo 'install esp6 /bin/false' >> /etc/modprobe.d/cve
    dirtyfrag.conf

    echo 'install rxrpc /bin/false' >> /etc/modprobe.d/cve
    dirtyfrag.conf

Descárgalos si están activos:
  rmmod esp4 esp6 rxrpc  

Tom Lawrence tiene un excelente artículo sobre estas mitigaciones, y si necesitas mantener una instancia de IPSec, revisa las mitigaciones aquí, así como en el aviso de AWS.

sysctl -w kernel.modules_disabled=1

sysctl -w user.max_user_namespaces=0

El blog de Ubuntu indica que estas mitigaciones afectarán los casos de uso de IPsec ESP y RxRPC, específicamente:

  • Implementaciones de IPsec. Son comunes en implementaciones de VPN como StrongSwan.
  • AFS (Andrew File System) u otra aplicación de RxRPC.

Como las vulnerabilidades son independientes, deshabilitar solo los módulos esp4/esp6 o solo los módulos rxrpc dejaría explotables los restantes.

Otras consideraciones prácticas

Una de las funciones de seguridad del kernel de Linux es LSM, o el Linux Security Module. Esto se puede combinar con uno de los superpoderes de Linux, eBPF, en la forma de LSM BPF. Esta combinación les permite a los profesionales de seguridad hacer hooking en varios aspectos del kernel para dar mitigaciones dirigidas y potentes. Sin embargo, no todas las distribuciones de Linux vienen con LSM BPF habilitado de fábrica.

En cuanto a las vulnerabilidades descritas en este blog, BPF-LSM da seguridad en tiempo de respuesta al bloquear activamente el acceso a sockets (AF_ALG) o a llamadas al sistema (splice). Sin LSM BPF, proteger un sistema implica un conjunto disperso de esfuerzos. Estos también dependen de lo que ofrezca cada distribución.

El Linux Security Module es un framework que evolucionó con el tiempo por la necesidad común de dar seguridad para fines variados. Históricamente, Linux solo da Control de Acceso Discrecional (DAC, por sus siglas en inglés): si el atacante obtiene acceso a un usuario, tiene acceso a todo lo que ese usuario posee.

El auge de la contenedorización, que permite a los usuarios ejecutar entornos con distintas necesidades de seguridad, forzó otro avance: el stacking. LSM es extensible, lo que permite "apilar" varios módulos en una cadena para evaluar si se deben otorgar permisos. eBPF, un framework para hacer hooking en distintas partes del kernel de forma segura y garantizada, amplía aún más las capacidades de LSM. Permite cargar y aplicar políticas de seguridad personalizadas de forma dinámica y sobre la marcha.

Recomendamos encarecidamente a la comunidad de Linux y a los encargados de mantener las distribuciones que se aseguren de que LSM BPF esté compilado en el kernel y habilitado en el arranque, para dar las protecciones descritas arriba.

También te podría interesar

Más información sobre Cómo combatir el desorden de IA en bases de código de producción: así mejoró Huntress el recall de la API en Fable 5.1
Cómo combatir el desorden de IA en bases de código de producción: así mejoró Huntress el recall de la API en Fable 5.1
Blog

Tres cambios en los harnesses de codificación de Huntress duplicaron la tasa de precisión de evaluación de recall de API de Claude Fable 5.1.

Más información sobre Uso indebido de Velociraptor, parte II: el ojo de la tormenta
Uso indebido de Velociraptor, parte II: el ojo de la tormenta
Blog

Los actores de amenazas de la parte I no habían terminado. La parte II analiza qué sucedió después de que la explotación de WSUS puso una herramienta forense legítima en las manos equivocadas, y cómo respondió Huntress.

Más información sobre #ShadyHacks con Kyle Hanslovan
#ShadyHacks con Kyle Hanslovan
Blog

Los hackers no necesitan exploits de élite cuando Microsoft 365 tiene funciones integradas que pueden encadenar para eludir todo tu stack de seguridad. Kyle Hanslovan muestra exactamente cómo se hace.