Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-98432 — Rol de Ansible y script de Python que detectan la exposición del kernel de Linux a CVE-2026-98432 y aplican una regla de nftables que descarta los SYN de IPv4 entrantes que llevan opciones IP. | Kitploit
Herramientas/GitHubGitHub/axisops/cve-2026-98432
Herramientas DefensivasAnálisis de VulnerabilidadesScripting y AutomatizaciónAuditoría de ConfiguraciónSeguridad de RedesDevSecOpsMala ConfiguraciónRespuesta a Incidentes
GitHubaxisops/cve-2026-98432

CVE-2026-98432

Rol de Ansible y script de Python que detectan la exposición del kernel de Linux a CVE-2026-98432 y aplican una regla de nftables que descarta los SYN de IPv4 entrantes que llevan opciones IP.

14hace 6 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Ver RepositorioSitio web
Compartir

CVE-2026-98432 — detectar y mitigar el use-after-free de opciones IP en SYN de IPv4

Un use-after-free en el código TCP de IPv4 del kernel de Linux (CVE-2026-98432, CVSS 9.8): las opciones IPv4 guardadas de un SYN entrante pueden liberarse mientras otra CPU todavía las está leyendo para construir un SYNACK, porque dos rutas de destructor las liberan con un simple kfree() en lugar de esperar un período de gracia de RCU. La corrección upstream es e3f33b0a1d89 ("ipv4: free inet_opt and ireq_opt after an RCU grace period").

A fecha de 2026-10-29 no se ha publicado ningún kernel corregido para ninguna serie de Ubuntu. Todos los estados afectados en el tracker de Ubuntu indican "work in progress" o simplemente vulnerable, y la página no enumera ninguna mitigación. Este paquete es la mitigación.

En qué consiste la mitigación y por qué es sólida

Ambas rutas en carrera leen ireq->ireq_opt, las opciones IPv4 que el kernel guardó del SYN entrante (tcp_v4_save_options()): la construcción del SYNACK las lee mientras el desmontaje del socket hijo puede liberarlas, y la migración del request-socket (net.ipv4.tcp_migrate_req=1, o un programa BPF_SK_REUSEPORT_SELECT_OR_MIGRATE) comparte y luego libera las mismas opciones. Cuando un SYN no lleva opciones IPv4, ireq_opt es NULL: no hay nada que liberar ni nada que leer. Leímos el commit de corrección antes de basarnos en eso; ambas mitades parten de un SYN que llevaba opciones IPv4.

Por lo tanto, el paquete instala una regla de nftables que descarta los SYN TCP de IPv4 entrantes que llevan opciones IP, en una tabla propia para que nunca colisione con las reglas de Docker, del sustrato o de la distribución:

table inet samp_cve_2026_98432 {
  chain prerouting {
    type filter hook prerouting priority -300; policy accept;
    ip hdrlength > 5 tcp flags & (syn | ack) == syn counter drop \
        comment "CVE-2026-98432: drop inbound IPv4 SYN carrying IP options"
  }
}

Verificado en un kernel real antes del lanzamiento: un SYN IPv4 que transporta opciones alcanza el contador y se descarta; un SYN simple pasa intacto. El tráfico TCP casi nunca transporta opciones IP (varios tipos de opciones son descartados por muchas redes de forma habitual, según la RFC 7126), por lo que el coste operativo de la regla es prácticamente nulo.

Qué no cubre

  • Un cliente legítimo que envía SYNs con opciones IP (raro; en su mayoría sondas antiguas de enrutamiento por origen y de marca de tiempo) no podrá conectarse mientras la regla esté cargada. El contador de la regla indica con qué frecuencia ocurre eso.
  • SYNs fragmentados. El hook se ejecuta con prioridad -300, después de la desfragmentación de conntrack (-400) dondequiera que conntrack esté cargado, por lo que los paquetes reensamblados se comparan. En un host sin conntrack, los fragmentos no se reensamblan en este hook; un SYN fragmentado es tráfico patológico y merece descartarse por política de todos modos, pero esta regla por sí sola no lo hace.
  • IPv6. Este CVE es la ruta IPv4; la página de Ubuntu señala que IPv6 no se ve afectado por el primer problema y rastrea la carrera de migración IPv6 similar por separado.
  • Hosts que no son Ubuntu. La versión 1.0.0 solo lee el tracker de Ubuntu. Los kernels de Debian, de la familia RHEL y de Proxmox (Proxmox distribuye su propio kernel pve, que la página de Ubuntu no cubre) informan unknown: consulta sus avisos. La regla en sí protegería a cualquier host Linux; las tablas de veredicto son lo único exclusivo de Ubuntu.

Persistencia, deliberadamente no

La regla vive en la memoria del kernel y no se persiste en disco. Un paquete de mitigación no debe escribir en rutas de persistencia (units, cron), y un archivo de inclusión de nftables solo se carga donde el servicio nftables de la distribución está habilitado, lo cual en estas instalaciones no es uniforme. Por lo tanto: tras un reinicio, una detección lee la regla como ausente (rule_live=0, persistent=0 en cada línea de resultado) y la siguiente aplicación la restaura. Volver a ejecutar la aplicación tras los reinicios es el modelo operativo, y la línea de resultado nunca afirma lo contrario.

Detección

De solo lectura, se prepara en un directorio temporal privado que elimina, e informa:

  • El kernel en ejecución (uname -r, mapeado a su versión de paquete) frente a las versiones corregidas de Ubuntu por release y sabor. Sin corrección publicada para el release de la máquina: no_fix. Un kernel corregido publicado pero no en ejecución: vulnerable, con restart_needed=1 cuando está instalado y esperando un reinicio (una corrección instalada nunca se informa como fixed).
  • Si la regla de mitigación está activa: fixed con workaround: true en la línea de resultado mientras la regla cubre un kernel sin corregir; fixed simple una vez que el kernel en ejecución está corregido.
  • not_affected para los releases que el tracker marca como no afectados, unknown para los releases y distribuciones que las tablas no cubren.
  • Códigos de salida. 0 limpio (fixed, not_affected), 2 expuesto o indeciso (no_fix, vulnerable, unknown: nunca limpio), 1 la ejecución en sí falló, 130 interrumpida.
  • Código compartido. syn_options_mitigation/files/samp_common.py es una copia byte a byte de samp-common 1.0.4 (las comparaciones de versiones dpkg, rpm y apk, la línea de resultado, la carga de configuración). Su sha256 está en samp.yaml, y tests/test_samp_pack.py falla si la copia difiere. Nunca lo edites aquí; vuelve a incorporarlo con scripts/vendor.py de samp-common.
  • Los releases son tags anotados firmados por SSH, samp/v<version> (este: samp/v1.0.1), firmados con una clave respaldada por hardware. El sustrato importa un tag firmado, nunca una rama.

La aplicación

Un paso de script, una línea de resultado. Mientras el kernel en ejecución no esté corregido, carga la regla; una vez que se ejecuta un kernel corregido, elimina la regla y su tabla. No edita ningún archivo más allá del script, la biblioteca y la configuración que despliega (declarados en touches de samp.yaml), por lo que la lista de copias de seguridad de la línea de resultado está vacía. Eliminar la mitigación manualmente es un solo comando:

nft delete table inet samp_cve_2026_98432

Ejecutarlo de forma independiente

ansible-playbook -i inventory play.yml            # a play that runs the role
python3 syn_options_mitigator.py --config syn_options_config.yaml           # detect
sudo python3 syn_options_mitigator.py --config syn_options_config.yaml --apply

Cuando Ubuntu publique kernels corregidos, pega las versiones del tracker en syn_options_fixed_versions en los defaults del rol (las versiones en desarrollo ya están ahí en un comentario) y publica el cambio como la siguiente etiqueta firmada; la detección entonces comienza a reportar vulnerable/restart_needed contra ellas, y la aplicación elimina la regla de las máquinas que reinician con un kernel corregido.

Pruebas

python3 -m pytest tests/

Las pruebas unitarias simulan cada comando externo; la prueba de contrato (tests/test_samp_pack.py, de samp-common) verifica el manifiesto contra el rol, ejecuta una detección real desde un directorio temporal y somete la entrada de apply a las reglas de una sola línea de resultado y de needrestart.

Licencia

MIT. Consulte LICENSE.

Contribuciones

PRs y mejoras son bienvenidos -> por favor haga fork y envíe una merge request.

Descargar herramienta