
Una implementación en Go de fragnesia (CVE-2026-46300)
Una SA. Un byte a la vez. Sin condiciones de carrera.
Implementación en Go de fragnesia (CVE-2026-46300). Miembro de la clase de vulnerabilidades Dirty Frag: error distinto, misma superficie, parche propio.
El fallo está en el subsistema XFRM ESP-in-TCP de Linux. Cuando se instala TCP_ULP espintcp en un socket después de que los datos ya se hayan transferido con splice() desde un archivo a la cola de recepción TCP, el kernel trata los datos en cola como un registro de texto cifrado ESP y los descifra in situ. La fuente de esos datos es una página de la caché de páginas. El descifrado aplica un XOR con el flujo de claves AES-GCM directamente sobre ella.
El resultado es una escritura controlada de un solo byte en la caché de páginas de cualquier archivo legible.
Tabla de flujo de claves
El bloque de contador AES-GCM (RFC 4106) en la posición 2 es [salt(4) || IV(8) || 0x00000002]. Cifrarlo con la clave de sesión produce un bloque de flujo de claves de 16 bytes. El byte 0 de ese bloque es el que se aplica con XOR sobre el byte objetivo. Variando los 32 bits inferiores del nonce del IV, todos los 256 valores posibles de byte de flujo de claves se pueden alcanzar dentro de los primeros 65536 nonces. El exploit construye esta tabla de búsqueda una única vez al arrancar mediante AF_ALG AES-ECB.
Bucle de byte-flip
Para cada byte de la carga útil:
needed_keystream = current XOR desired.splice(), el receptor retrasa la instalación de TCP_ULP hasta que los datos estén en cola).current XOR keystream = current XOR (current XOR desired) = desired.Una SA. Máximo 192 disparadores. Determinista.
go build -o fragnesia-go .
./fragnesia-go
En caso de éxito, ofrece una shell de root a través de una PTY nueva. El binario en disco se mantiene intacto; solo se modifica la caché de páginas.
echo 1 | tee /proc/sys/vm/drop_caches
esp6 (modo transporte, loopback IPv6)Todos los kernels anteriores al parche: https://lists.openwall.net/netdev/2026/05/13/79
Mismo rango que dirtyfrag.
Igual que dirtyfrag:
rmmod esp4 esp6
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\n' \
> /etc/modprobe.d/fragnesia.conf
| dirtyfrag-go | fragnesia-go |
|---|
| CVE | CVE-2026-43284 / CVE-2026-43500 | CVE-2026-46300 |
| Transporte | ESP-in-UDP + RxRPC | ESP-in-TCP (ULP) |
| Granularidad de escritura | 4 bytes por disparo | 1 byte por disparo |
| SA XFRM | 48 | 1 |
| Criptografía | HMAC-SHA256 + CBC-AES | AES-128-GCM |
| Familia de IP | IPv4 | IPv6 |