
Parches del kernel para la vulnerabilidad Dirty Frag (CVE-2026-43284, CVE-2026-43500)
Serie de parches para la clase de vulnerabilidad Dirty Frag descubierta por Hyunwoo Kim (@v4bel).
Dirty Frag permite a un usuario local sin privilegios sobrescribir bytes arbitrarios de la caché de páginas de archivos de solo lectura (p. ej. /usr/bin/su, /etc/passwd), lo que conduce a una escalada de privilegios local a root en todas las principales distribuciones de Linux.
Los parches de este repositorio NO fueron escritos por el mantenedor de este repositorio.
- CVE-2026-43284 (parche ESP): escrito por Hyunwoo Kim (@v4bel) y Kuan-Ting Chen. Integrado en la rama principal del kernel de Linux en el commit
f4c50a4034e6.- CVE-2026-43500 (parche RxRPC): escrito por Hyunwoo Kim (@v4bel). Enviado a la lista de correo netdev en
afKV2zGR6rrelPC7@v4bel, pendiente de integración.Este repositorio es un espejo formateado de esos parches, recopilados aquí por conveniencia en formato listo para
git am. Todo el crédito corresponde a los autores originales. Investigación original y PoC: https://github.com/V4bel/dirtyfrag
4.10 (commit cac2661c53f3, 2017-01-17) hasta 6.x anterior a f4c50a4034e66.4 (commit 2dc334f1a63a, 2023-06-08) hasta upstream (sin parche integrado aún)git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux
# Apply patch 1 (ESP — CVE-2026-43284)
git am 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
# Apply patch 2 (RxRPC — CVE-2026-43500)
git am 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
patch (si git am falla debido a desviación de contexto)patch -p1 < 0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch
patch -p1 < 0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch
Si no puede aplicar el parche de inmediato, bloquee los módulos vulnerables:
sudo sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' \
> /etc/modprobe.d/dirtyfrag.conf && \
rmmod esp4 esp6 rxrpc 2>/dev/null; \
echo 3 > /proc/sys/vm/drop_caches"
Advertencia: Eliminar
esp4/esp6desactiva IPsec ESP. Evalúe el impacto antes de aplicar en sistemas de producción.
Ambas variantes comparten la misma causa raíz: la ruta de splice() de copia cero del kernel coloca una página de caché de páginas de solo lectura directamente en un frag de skb sin semántica de copia en escritura. Las operaciones criptográficas posteriores in situ escriben entonces en esa página de caché de páginas, modificando permanentemente el contenido del archivo en caché.
splice(file_fd → pipe → socket)
│
▼
skb->frags[0].page = &page_cache_page_P <- no CoW!
│
▼
[esp_input / rxkad_verify_packet_1]
in-place AEAD/fcrypt decrypt src == dst == &P
│
▼
STORE to page_cache_page_P <- arbitrary write to read-only file cache
| Archivo | CVE | Subsistema | Estado |
|---|
0001-net-xfrm-fix-page-cache-write-via-esp-splice-CVE-2026-43284.patch | CVE-2026-43284 | net/ipv4/esp4.c, net/ipv6/esp6.c, net/ipv4/ip_output.c, net/ipv6/ip6_output.c | ✅ Integrado en la rama principal (f4c50a4034e6) |
0002-net-rxrpc-fix-page-cache-write-via-rxkad-splice-CVE-2026-43500.patch | CVE-2026-43500 | net/rxrpc/call_event.c, net/rxrpc/conn_event.c | ⏳ Enviado a la lista de correo netdev (afKV2zGR6rrelPC7@v4bel), pendiente de integración |
| Variante | Enfoque |
|---|
| ESP | Marcar los frags de splice con SKBFL_SHARED_FRAG; comprobar esta bandera en esp_input()/esp6_input() para forzar skb_cow_data() antes de la criptografía in situ |
| RxRPC | Extender la compuerta skb_cloned() a (skb_cloned(skb) || skb->data_len) para que los skbs no lineales (que pueden contener frags de splice) siempre se copien antes del descifrado in situ |