
Mitigación provisional de nftables para la CVE-2026-98432 del kernel de Linux (UAF en opciones IPv4 en tcp_v4_syn_recv_sock) como una habilidad de agente reproducible
Habilidad de agente que aplica, verifica, persiste y posteriormente elimina la mitigación provisional del host
para la vulnerabilidad del kernel de Linux CVE-2026-98432 (CVSS 9.8): una única regla de nftables que descarta los paquetes TCP
que transportan opciones IPv4 — la única entrada que alcanza el use-after-free de inet_opt/ireq_opt
en tcp_v4_syn_recv_sock().
Contexto que conviene conocer: el Frontier Red Team de Anthropic describió públicamente un PoC funcional
de no autenticado a root contra servidores que exponen un listener MPTCP (oct. 2026); no se
han reportado explotaciones en la naturaleza. El CNA del kernel le asigna 9.8; upstream y Red Hat le asignan 8.1
(complejidad de ataque alta). La corrección del proveedor son los backports de la clase del kernel de Ubuntu 6.8.0-149 —
hasta que el kernel en ejecución incluya la corrección, esta regla es la solución provisional. Está acotada a un
campo de una cabecera de un protocolo, por lo que el tráfico normal no se ve afectado.
Esta regla no es novedosa — trátala como arte previo empaquetado. Véase "Arte previo" más abajo; la contribución de este repositorio es la forma reproducible de habilidad de agente más los escollos de producción.
| Ruta | Qué |
|---|---|
SKILL.md | La habilidad — disparadores en el frontmatter, conjunto de reglas, comprobaciones, persistencia, escollos, eliminación |
files/cve98432.nft | Conjunto de reglas de nftables listo para copiar (prerouting, prioridad −300) |
files/nft-cve98432.service | Unidad systemd lista para copiar (persistencia) |
cp -R cve-2026-98432-nft-mitigation ~/.claude/skills/ # Claude Code
cp -R cve-2026-98432-nft-mitigation ~/.agents/skills/ # agents-style runtimes
El frontmatter description es la superficie de descubrimiento: los agentes seleccionan esta skill cuando se les pide mitigar CVE-2026-98432, el "TCP/IP fix", el UAF de opciones IPv4 del kernel, o eliminar la mitigación después de que se publique el kernel del proveedor.
zgrep -c CVE-2026-98432 /usr/share/doc/linux-modules-$(uname -r)/changelog.Debian.gz # Debian/Ubuntu
rpm -q --changelog kernel-core-$(uname -r) | grep -c CVE-2026-98432 # RHEL/Rocky/Alma
> 0 = corregido, omita la mitigación. (Compruebe también su rastreador de proveedor; y
apt-cache policy linux-image-generic para un kernel más nuevo instalado pero no arrancado.)ss -lnMp): el PoC publicado los ataca, y Go ≥ 1.24 escucha
con MPTCP por defecto en kernels que lo permiten. sysctl net.mptcp.enabled=0 solo afecta
a sockets nuevos — los listeners ya abiertos mantienen MPTCP hasta que su servicio se reinicie
(GODEBUG=multipathtcp=0 según el equipo de Go).cat /sys/kernel/security/lsm lista SELinux o Smack y
usa el mapeo NetLabel CIPSOV4, las opciones IPv4 son legítimas allí — esta regla rompería
esa ruta. No la aplique en redes etiquetadas CIPSO (RFC 7126 analiza el compromiso).files/cve98432.nft y files/nft-cve98432.service.nft -c -f /usr/local/sbin/cve98432.nft — comprobación de análisis; requiere root (sin root falla
en netlink: cache initialization failed).systemctl daemon-reload && systemctl enable --now nft-cve98432.servicedestroy table … debe ser la
primera línea del archivo: añadida al final crea la tabla y luego la destruye,
dejando un conjunto de reglas vacío mientras el servicio sigue saliendo con 0.nft list table inet cve98432 debe mostrar
meta l4proto tcp ip hdrlength > 5 counter drop en una cadena con priority -300
(antes de conntrack, coincidiendo con la regla publicada).table inet … personalizada no es propiedad de iptables, por lo que las herramientas iptables-restore /
ufw / firewalld la dejan intacta (ejecute su restauración una vez y vuelva a listar para confirmar).Eliminación tras instalar y reiniciar con el kernel corregido: sección 7 de SKILL.md.
El estado de nftables es por espacio de nombres de red. Las reglas del host ven el tráfico de un contenedor solo donde
cruza el host (p. ej., contenedor → exterior); el tráfico que permanece dentro del propio
espacio de nombres del contenedor (contenedor → su propio loopback/IP) nunca atraviesa el prerouting del host —
sin embargo, el kernel es compartido, por lo que el código dentro de un contenedor aún puede alcanzar el UAF localmente. Inyecte
el mismo conjunto de reglas en cada contenedor en ejecución:
# Docker (host-side nsenter keeps the needed capabilities)
for c in $(docker ps -q); do
pid=$(docker inspect -f '{{.State.Pid}}' "$c")
nsenter -t "$pid" -n /usr/sbin/nft -f /usr/local/sbin/cve98432.nft
done
# LXC (privileged CLI as root)
for c in $(lxc-ls -1 2>/dev/null); do lxc-attach -n "$c" -- nft -f /usr/local/sbin/cve98432.nft; done
Los namespaces de contenedores no persisten las reglas nft — vuelve a ejecutarlo en cada reinicio del contenedor (engánchalo al paso posterior al inicio de tu orquestador). Trabajo previo para este mismo vacío, con scripts:
typhoon1217/cve-2026-98432-mitigation (inject-netns.sh).
Los sockets estándar son suficientes — no se requiere fabricación de paquetes en el servidor: un cliente establece una opción IPv4 Record
Route mediante setsockopt(IP_OPTIONS) y se conecta; una conexión simple tiene éxito, la
conexión con opciones debe agotar el tiempo de espera mientras el contador de la regla se incrementa. Clientes listos para usar:
check-blocked.py / verify-synack.sh en typhoon1217/cve-2026-98432-mitigation.
Advertencia de ese proyecto: un cliente que él mismo ejecuta la mitigación también descartará los
ecos SYN-ACK del objetivo — prueba desde un cliente sin mitigación para obtener un veredicto limpio.
prerouting con priority -300: antes de conntrack, de modo que los paquetes descartados nunca crean
estado conntrack — y, a diferencia de input, también cubre el tráfico reenviado a contenedores/VMs
que atraviesa el host.@nh,4,4 > 5 sin procesar a
ip hdrlength > 5 — el campo IHL, confirmado por la propia herramienta.typhoon1217/cve-2026-98432-mitigation — misma regla de descarte + inyección en netns de contenedores,
advertencia sobre CIPSO, clientes de verificación (EN/KO)