
Script de shell que evalúa el estado del parche del kernel de Ubuntu para CVE-2026-98432 y aplica una solución provisional persistente con nftables o iptables que descarta los paquetes TCP IPv4 que transportan opciones IP.
# 1. Inspect the host; no changes.
sudo ./cve-2026-98432-mitigate.sh check
# 2. Get a patch-state verdict for the exact running kernel package.
sudo ./cve-2026-98432-mitigate.sh assess
# 3. Apply the stopgap filter and make it survive reboot.
sudo ./cve-2026-98432-mitigate.sh enable
# 4. Prove that normal TCP still works and IP-option TCP is dropped.
sudo ./cve-2026-98432-mitigate.sh verify
# 5. Monitor. Exit 0 = healthy, 1 = mismatch/persistence failure, 2 = no state.
sudo ./cve-2026-98432-mitigate.sh status
# 6. After booting a kernel that Ubuntu marks as fixed.
sudo ./cve-2026-98432-mitigate.sh disable
enable se niega a cambiar el conjunto de reglas cuando se detecta CIPSO/NetLabel, porque la regla descarta todo el TCP que transporta opciones IP, incluido el tráfico etiquetado. Use --ignore-cipso solo si acepta esa contrapartida. Los contenedores o hosts sin systemd deben usar --no-persist; de lo contrario, enable sale con código 4 cuando no se puede establecer la persistencia tras el reinicio, mientras mantiene la regla activa en su lugar.
CVE-2026-98432 es un use-after-free en el handshake TCP IPv4 de Linux. Es alcanzable cuando un SYN entrante transporta opciones IP. La solución real es un kernel parcheado; este script es una medida provisional que descarta los paquetes TCP IPv4 entrantes cuya longitud de cabecera IP es mayor que 5 (IHL 6-15), es decir, paquetes que transportan opciones IP, antes de conntrack y del NAT de Docker.
Admite dos backends equivalentes:
table ip cve_2026_98432, prioridad de prerouting -310, solo TCP, contador, drop.raw PREROUTING, coincidencia u32 0>>24&0xf=6:15, solo TCP, contador, drop.La forma de nft usa la familia ip y una prioridad numérica para que funcione tanto en el nft 0.5 de Ubuntu 16.04 como en el nft 1.x actual. La forma de iptables funciona con iptables 1.6 y posteriores. No se instala ningún paquete a menos que se pase --install-nft.
El script valida la regla esperada completa, no fragmentos. Para nft exige que la cadena pre tenga el hook de prerouting exactamente en la prioridad -310 (o la grafía heredada raw - 10) y que el DROP esperado sea la primera regla. Para iptables exige que iptables -C tenga éxito y que la primera regla completa de raw PREROUTING coincida tras la normalización. enable repara una regla desplazada en lugar de negarse a volver a aplicarla.
El script de Akamai aportó las ideas de evaluación y seguridad que se describen a continuación. No se adoptó su forma de aplicación porque la nuestra es más estricta y compatible con 16.04. Los hallazgos incorporados más importantes, en orden de prioridad:
assess resuelve el paquete de imagen exacto del kernel en ejecución (linux-image-$KVER, luego linux-image-unsigned-$KVER, luego el propietario de /boot/vmlinuz-$KVER). Los metapaquetes como linux-image-generic se muestran solo como contexto, nunca se usan como evidencia del veredicto. Una coincidencia en el changelog es evidencia sólida pero falible; un changelog ausente junto con una versión upstream limpia concluyente de forma independiente igual o superior a la versión corregida sigue dando PATCHED; un kernel de proveedor sin evidencia da UNKNOWN.enable salga con código 4 mientras mantiene la regla activa. status evalúa la persistencia de forma independiente del estado de ejecución del oneshot y rechaza enabled-runtime como no persistente.detected se niega por defecto, unknown advierte, not_detected continúa. La ausencia de netlabelctl no demuestra que CIPSO esté ausente.check distingue entre verificado-utilizable, presente-sin-verificar, no utilizable y desconocido; --backend nft evalúa nft incluso cuando iptables funciona.XDP_PASS sigue entrando en la pila del kernel.-x) cuando es posible, y una regla heredada de filter/INPUT de una versión anterior se reporta y se elimina después de que se carga el reemplazo de raw.La coincidencia de reglas y el formato del archivo de estado son compatibles con versiones anteriores. No necesita disable primero; volver a ejecutar enable con esta versión repara la regla en su lugar, instala la unidad de arranque actualizada y registra el nuevo campo de persistencia. Si un archivo de estado antiguo no tiene una línea persist=, status infiere la persistencia a partir del estado de la unidad en lugar de fallar por el campo faltante.
Cambios operativos que debe conocer:
enable ahora sale con 4 cuando la regla está activa pero la persistencia tras el reinicio falló. Anteriormente podía salir con 0 en ese caso.check ahora devuelve 0 solo para un backend usable verificado, 1 para ningún backend usable, 4 para presente pero no verificado, y 2 para uso.assess es nuevo y devuelve 0/1/3/4 como se documenta a continuación.enable a menos que se pase --ignore-cipso.enable para que se apliquen el nuevo orden de la unidad y ExecStart.Preparado: 2026-10-30 (actualizado 2026-10-31)
Rastreador de Ubuntu consultado: 2026-10-31 11:59 UTC (página actualizada por última vez el 2026-10-30). Aún no se ha publicado ningún kernel corregido.
Alcance: servidores Linux, principalmente Ubuntu 16.04 (xenial), 22.04 (jammy), 24.04 (noble) y 26.04 (resolute), incluidos hosts Docker/BTCPay.
Entregable: cve-2026-98432-mitigate.sh en este directorio.
Probado en: Ubuntu 16.04, 22.04, 24.04 y 26.04.