
Análisis técnico de CVE-2026-43284 (Dirty Frag), una escalada de privilegios local en el kernel de Linux a través de xfrm ESP que permite escrituras en la caché de páginas sobre archivos de solo lectura para comprometer el sistema como root.
Análisis técnico detallado de la vulnerabilidad de escalada de privilegios local CVE-2026-43284 (Dirty Frag) en el kernel de Linux.
CVE-2026-43284 (comúnmente referida como parte de la suite de vulnerabilidades Dirty Frag) es una falla crítica de escalada de privilegios local (LPE) en el kernel de Linux. Se origina en un fallo lógico dentro del subsistema de entrada xfrm ESP (Encapsulating Security Payload). El error permite a un atacante local sin privilegios eludir las protecciones típicas de Copy-on-Write (CoW) y lograr una primitiva de escritura arbitraria en la caché de páginas (page-cache) sobre archivos de sistema de solo lectura (como /usr/bin/su), lo que en última instancia conduce a un compromiso total como root.
Desglose de la vulnerabilidad y vector de ataque1.
La restricción: Interactuar con la configuración de IPsec del kernel normalmente requiere la capacidad CAP_NET_ADMIN, un privilegio restringido al usuario normal. El bypass: Un usuario local sin privilegios puede crear un User Namespace y un Network Namespace sin privilegios separados (usando flags como CLONE_NEWUSER | CLONE_NEWNET). Dentro de este espacio de contenedor aislado sin privilegios, el atacante se convierte en el proceso "root" de ese namespace, otorgándose privilegios CAP_NET_ADMIN dentro de ese contexto acotado.
Con CAP_NET_ADMIN dentro del network namespace personalizado, el atacante configura una Asociación de Seguridad (SA) falsa y políticas de IPsec.
Usando llamadas al sistema como splice(2) o vmsplice(2), el atacante adjunta páginas pertenecientes a un archivo de solo lectura objetivo (por ejemplo, /usr/bin/su) en un fragmento de búfer de socket (skb).
La restricción: El atacante debe forzar al kernel a analizar los datos a través de la rutina esp_input().
La estrategia: El atacante crea una estructura de red de encapsulación ESP-in-UDP y dirige la transmisión a la interfaz de loopback del host (127.0.0.1).
Cuando el paquete se recibe localmente a través del canal de loopback, la pila de red del kernel identifica el envoltorio del paquete UDP, lo desencapsula y entrega el payload interno a esp_input() para su procesamiento.
Debido a un error lógico en las rutas de anexado de datagramas IPv4/IPv6, el kernel no marca correctamente los fragmentos subyacentes del búfer de socket con el flag SKBFL_SHARED_FRAG al hacer splice de páginas en sockets UDP.
En consecuencia, esp_input() malinterpreta el paquete como un búfer privado no clonado y toma una ruta rápida de optimización de rendimiento "sin-COW".
En lugar de copiar los datos a un búfer de usuario seguro, esp_input() realiza un descifrado in-place directamente sobre las páginas de memoria tomadas de la caché de páginas del sistema
Ajustando finamente los datos del payload cifrado y utilizando la configuración del algoritmo criptográfico (como los Números de Secuencia Extendidos), el proceso de descifrado sobrescribe de forma determinista el binario objetivo en la caché de páginas.
Una vez que la caché de páginas de un binario como /usr/bin/su está envenenada en memoria con el payload del atacante, ejecutar el binario desencadena la ejecución del payload como root sin siquiera tocar o modificar el binario almacenado en el disco físico real.
Impacto: Escalada de privilegios local determinista y de alta fiabilidad en las principales distribuciones empresariales de Linux sin riesgo de pánicos del kernel.
Remediación: Actualizar el kernel de Linux a versiones que incorporen el parche que aplica el manejo de SKBFL_SHARED_FRAG para los splices de datagramas e introduce un fallback seguro a skb_cow_data() dentro de la lógica de procesamiento de ESP.