
CVE-2026-43284 y CVE-2026-43500 Dirty Frag PoC y exploit
Demostrador N4C legible para CVE-2026-43284 (XFRM/ESP) y CVE-2026-43500 (RxRPC/RXKAD).
El PoC responde una pregunta: ¿puede un proceso sin privilegios cambiar la caché de páginas
de un archivo de solo lectura propiedad de root a través de un fragmento sk_buff compartido?
No sobrescribe /usr/bin/su ni /etc/passwd, no instala un payload, no invoca
PAM/NSS ni inicia un shell. El exploit público completo permanece en la rama
exploit.
dirtyfrag-poc.c — las dos primitivas de caché de páginas y una pequeña CLI.prepare-lab.sh — crea dos fixtures inofensivos propiedad de root.run_as_1000.c / run-as-1000 — degrada el shell root de la VM a uid/gid 1000.Makefile — compilación estática reproducible.--esp)fixture de solo lectura
-> splice(archivo -> pipe -> socket UDP)
-> frag paginado de skb
-> STORE in-place de ESP authencesn
-> los primeros cuatro bytes cacheados se convierten en "N4C!"
Solo se utilizan una SA XFRM y una escritura de cuatro bytes. El ELF del shell root y su bucle de ensamblaje de 48 disparadores del exploit público fueron eliminados.
--rxrpc)fixture de solo lectura
-> splice(archivo -> paquete DATA RxRPC forjado)
-> descifrado in-place RXKAD pcbc(fcrypt)
-> una escritura de 8 bytes seleccionada por clave
-> los bytes cacheados difieren del fixture original
El PoC no busca un texto plano con forma de contraseña porque cualquier bloque
modificado de ocho bytes ya demuestra la primitiva. La fuerza bruta offline de fcrypt, el
planificador de escrituras superpuestas, PAM, getent, su sin contraseña, el manejo de PTY y el
código del shell fueron eliminados.
Úsese solo en una VM Linux desechable y autorizada que contenga las características de kernel requeridas.
make
# Ejecutar una vez como usuario root de la VM para recrear los bytes conocidos del fixture.
./prepare-lab.sh
# El helper ejecuta entonces el PoC como uid/gid 1000.
./run-as-1000 ./dirtyfrag-poc --esp --verbose
./prepare-lab.sh
./run-as-1000 ./dirtyfrag-poc --rxrpc --verbose
Código de salida:
0 — el marcador apareció en la caché de páginas; la primitiva fue observada.1 — el marcador no apareció; la escritura del frag compartido fue rechazada.2 — fixture inválido, entorno no compatible o fallo de configuración.3 — el disparador RxRPC falló antes de la verificación.Recrea los fixtures, o reinicia la VM desechable, entre ejecuciones.
main() selecciona una primitiva y se niega a ejecutarse como uid 0.esp_poc() muestra el caso de cuatro bytes XFRM/ESP.rxrpc_poc() muestra un disparador y una comparación directa antes/después.La construcción del protocolo se derivó del código fuente del kernel Linux y de la
implementación de referencia pública V4bel/dirtyfrag
en el commit aab16fcada27142dd8ce8704906cf6736cf213b8. N4C reescribió el flujo de
ejecución en este demostrador de solo fixtures y eliminó el payload de escalada de privilegios
y las etapas de consumo.