El 15 de octubre de 2026 se publicó CVE-2026-98432, una vulnerabilidad en el manejo de conexiones TCP sobre IPv4 del kernel de Linux. Es un use-after-free (uso de memoria liberada) que puede llevar a ejecución remota de código. No requiere autenticación.
Resumen
| CVE | CVE-2026-98432 |
| Componente | Kernel de Linux, manejo de conexiones TCP/IPv4 |
| Tipo | Use-after-free (CWE-416) |
| Impacto | Ejecución remota de código, denegación de servicio, exposición de datos |
| Autenticación | No requiere |
| Publicación | 15/10/2026 |
| Introducida en | Commit 079096f103fa (“tcp/dccp: install syn_recv requests into ehash table”) |
| Corregida en | Commit e3f33b0a (kernel 7.3-rc7) |
Puntajes
Las fuentes difieren según el estándar y quién lo calcula:
| Fuente | Estándar | Puntaje | Vector |
|---|---|---|---|
| kernel.org (CNA) | CVSS 3.1 | 9.8 · Crítico | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Ubuntu | CVSS 4.0 | 9.2 · Crítico | AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N |
| NVD (NIST) | — | Sin evaluar | Marcada como awaiting enrichment |
En ambos vectores el ataque es por red (AV:N), de baja complejidad (AC:L) y sin privilegios ni interacción del usuario. La diferencia principal es que el vector CVSS 4.0 de Ubuntu agrega AT:P (Attack Requirements: Present): el ataque depende de una condición de carrera, que no siempre se da.
¿En qué consiste?
El problema está en cómo el kernel maneja las opciones de IP (ireq_opt) de un socket de petición durante el handshake de TCP.
Cuando llega una conexión, tcp_v4_syn_recv_sock() transfiere la propiedad de las opciones de IP del socket de petición al socket hijo, sin copiarlas. El problema es que otro CPU puede estar procesando en paralelo un SYN retransmitido de la misma petición y enviando un SYNACK, que lee esas mismas opciones.
Desde el commit 079096f103fa, los sockets de petición se procesan sin tomar el lock del socket que escucha, así que nada impide que el socket hijo (y con él, las opciones de IP) se libere mientras el SYNACK todavía se está construyendo. Como los sockets hijo de TCP no usan SOCK_RCU_FREE y inet_sock_destruct() libera las opciones con un kfree() común, se produce un use-after-free en ip_options_build().
Existe un problema análogo con la migración de sockets de petición (net.ipv4.tcp_migrate_req=1 o un programa BPF_SK_REUSEPORT_SELECT_OR_MIGRATE), donde el socket original y su clon comparten las mismas opciones y uno las libera mientras el otro las usa.
El race condition, paso a paso
La corrección
Otras partes del kernel que reemplazan estas opciones (do_ip_setsockopt(), cipso_v4_sock_setattr()) ya usaban kfree_rcu(), que libera la memoria después de un período de gracia RCU, cuando ya nadie la está leyendo. El parche hace lo mismo en inet_sock_destruct() y tcp_v4_reqsk_destructor().
IPv6 no está afectado por el problema principal, porque tcp_v6_syn_recv_sock() sí duplica las opciones. Queda un problema de migración análogo en IPv6 (ipv6_opt, solo usado por CALIPSO), que se corrige por separado.
¿Qué hacer?
1. Actualizar el kernel
Es la solución real. Conviene revisar el estado del paquete de kernel en tu distribución y aplicar la actualización apenas esté disponible. En Ubuntu, por ejemplo, 26.10 (stonking) se corrige en 7.3.0-10.10, mientras que el resto de las versiones estaban con la corrección en curso al momento de escribir esto. Ubuntu 14.04 (trusty) no está afectada.
# Ver la versión de kernel en uso
uname -r
# En Debian/Ubuntu, actualizar
sudo apt update && sudo apt upgrade
# Reiniciar para usar el nuevo kernel
2. Mitigación temporal (Ubuntu)
Si no es posible actualizar de inmediato, Canonical propone filtrar los paquetes TCP IPv4 que llevan opciones de IP con nftables. Reduce el riesgo pero no previene del todo la explotación, y rompe las conexiones que dependan de opciones IPv4.
- Requiere: nftables y acceso root.
- Asume: que no se necesitan opciones IPv4.
- Bloquea: paquetes TCP IPv4 entrantes que contengan opciones de IP.
- No afecta: conexiones TCP IPv4 sin opciones, opciones de TCP como timestamps y window scaling, ni IPv6.
# 1. Crear el archivo de regla
printf '%s\n' 'table inet cve_2026_98432 {
chain input {
type filter hook input priority -310; policy accept;
ip protocol tcp ip hdrlength > 5 counter drop
}
}' | sudo tee /etc/cve-2026-98432.nft >/dev/null
# 2. Verificar y aplicar
sudo nft -c -f /etc/cve-2026-98432.nft && \
sudo nft -f /etc/cve-2026-98432.nft
La regla usa
ip hdrlength > 5: una cabecera IPv4 sin opciones mide 5 palabras de 32 bits (20 bytes), así que cualquier cosa más larga lleva opciones. Los contenedores con red propia necesitan aplicar la regla por separado. El detalle para hacerla persistente al reinicio y para removerla está en el aviso de Ubuntu.
Fuentes
- NVD (NIST): CVE-2026-98432
- Ubuntu: CVE-2026-98432
- MITRE: CVE-2026-98432
- Commit de corrección (kernel 7.3-rc7)
Más sobre conceptos relacionados en Amenaza vs Riesgo vs Vulnerabilidad.