La empresa Anthropic ha revelado información sobre una vulnerabilidad crítica (CVE-2026-98432) en la pila TCP del núcleo de Linux, que permite la ejecución remota de código mediante el envío de paquetes especialmente diseñados. Se ha afirmado que se ha creado un exploit funcional que permite ejecutar código a nivel del núcleo y obtener privilegios de root de forma remota en el sistema. El exploit preparado es adecuado para atacar sistemas con procesos de servidor que aceptan conexiones a través de sockets de red, que admiten el uso del protocolo MPTCP (Multipath TCP). El soporte para MPTCP puede ser activado en la vinculación a sockets de red individuales, lo cual se hace por defecto en la biblioteca estándar del lenguaje Go, a partir de la versión Go 1.24 (febrero de 2025).
El exploit preparado puede ser aplicado a cualquier aplicación de servidor escrita en Go, incluyendo el servidor HTTP Caddy, siempre que exista la posibilidad de enviar paquetes de red al socket de escucha que crean. Dado que la vulnerabilidad está presente directamente en la pila de IPv4 y no es específica de MPTCP, no se puede descartar la creación de exploits que funcionen sin depender de MPTCP, aunque tales exploits aún no se han demostrado. Por ejemplo, la vulnerabilidad puede ser explotada al procesar solicitudes de migración de sockets, lo cual está disponible en configuraciones con el parámetro net.ipv4.tcp_migrate_req=1 o al utilizar programas eBPF con la opción BPF_SK_REUSEPORT_SELECT_OR_MIGRATE.
La vulnerabilidad es provocada por una condición de carrera que ocurre durante el procesamiento simultáneo de solicitudes SYN retransmitidas al establecer una conexión TCP. Dado que la función tcp_v4_syn_recv_sock() pasa parámetros del socket hijo desde la estructura ireq->ireq_opt por referencia y no por copia, en ciertas circunstancias puede surgir una situación en la que la memoria asignada para las estructuras inet_opt y ireq_opt con los parámetros del socket ya ha sido liberada, pero las opciones de socket asociadas continúan siendo utilizadas (uso después de liberación).
La explotación remota se lleva a cabo mediante el envío de una serie de solicitudes de red sincronizadas en el tiempo. El exploit desarrollado es aplicable incluso a núcleos que utilizan aleatorización de direcciones (KASLR), pero entrar en la ventana de condición de carrera toma bastante tiempo y requiere un gran número de intentos repetidos. La explotación se simplifica porque no entrar en la ventana de condición de carrera solo conduce a un restablecimiento de la sesión de configuración de la conexión (handshake), y no a un fallo del núcleo, lo que permite continuar los intentos indefinidamente. En el prototipo creado, la realización del ataque requirió aproximadamente una hora: 48 minutos para determinar la disposición de la memoria y otros 5 minutos para organizar la ejecución del código.
Hasta ahora no se han presentado caminos de protección que bloqueen garantizadamente la vulnerabilidad; como única opción confiable se sugiere instalar la actualización del núcleo. El problema se manifiesta a partir del núcleo Linux 4.4 y se ha corregido en las versiones 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 y 7.3. El estado de la eliminación de vulnerabilidades en las distribuciones se puede evaluar en estas páginas: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora.
De las recomendaciones para contrarrestar métodos específicos de explotación que no bloquean la vulnerabilidad en general, se puede mencionar deshabilitar el soporte de MPTCP y establecer el parámetro sysctl del núcleo net.ipv4.tcp_migrate_req en 0:
sysctl -w net.mptcp.enabled=0
sysctl -w net.ipv4.tcp_migrate_req=0
Para determinar la existencia de procesos en el sistema que utilizan sockets con
MPTCP, se pueden usar los comandos:
ip mptcp endpoint show
ip mptcp limits show
Para deshabilitar el soporte de MPTCP en programas en el lenguaje Go, se debe utilizar el flag «multipathtcp=0», para establecer el cual se puede establecer la variable de entorno «GODEBUG=multipathtcp=0». Para deshabilitar el soporte de MPTCP en la etapa de construcción, se puede agregar «godebug multipathtcp=0» en el archivo con el módulo go.mod. En el código de la aplicación, el uso de MPTCP se puede desactivar a través de las funciones net.Dialer.SetMultipathTCP y net.ListenConfig.SetMultipathTCP.
Además del problema mencionado, la empresa Anthropic también anunció una serie de vulnerabilidades explotables localmente en el núcleo de Linux, OpenBSD y FreeBSD, que permiten obtener derechos de root en el sistema y salir de contenedores aislados; vulnerabilidades en Chrome y Safari que conducen a la ejecución de código en el sistema al abrir páginas web específicamente diseñadas; una vulnerabilidad en el núcleo de Windows que causa un cierre inesperado; y una vulnerabilidad en la plataforma Android que permite eludir el bloqueo de pantalla y acceder a información personal y fotos sin desbloquear el dispositivo (el ataque se demostró en el smartphone Google Pixel 9).
Adición:
- En nginx, la posibilidad de activar la opción IPPROTO_MPTCP para un socket de red en escucha está disponible desde la versión 1.29.7, pero no se aplica por defecto.
- En Lighttpd, la opción para habilitar MPTCP está disponible desde la versión 1.4.76.
- En Apache httpd, los parches para admitir MPTCP se agregaron a la rama Apache httpd 2.5-HEAD en 2024.
- En systemd, el soporte para habilitar MPTCP al activar por socket se añadió en la versión 257.
- En Apache Traffic Server, la opción para habilitar MPTCP es compatible desde la versión 9.2.4.
- En HAProxy, desde la versión 3.1.0, está disponible la opción "mptcp{,4,6}@".
- En Traefik, la activación de la bandera IPPROTO_MPTCP está habilitada por defecto desde las versiones 2.11.26, 3.4.2 y v3.5.0-rc1.
- En la base de datos Valkey, desde la versión 9.0.0, está disponible la opción "—mptcp" y las configuraciones "mptcp yes" y "repl-mptcp yes".
Fuente: opennet.ru
