Multipath TCP (MPTCP) ha despertado recientemente interés después de que se informara de una vulnerabilidad en su implementación para Linux, identificada como CVE-2026-98432. En lugar de examinar la vulnerabilidad en sí, este análisis se centra en cómo funciona MPTCP y cómo puede detectarse su uso en el tráfico de red.
El TCP tradicional asocia una conexión con un par específico de direcciones IP de los hosts. Ese modelo puede ser problemático para los dispositivos móviles, que pueden pasar de una conexión Wi-Fi a una celular y, de otro modo, tendrían que restablecer las conexiones. MPTCP aborda esta limitación al permitir que una conexión se divida entre distintas direcciones IP o se transfiera de una a otra. También puede ayudar a los servidores a utilizar enlaces de gran ancho de banda de forma más eficaz que una única conexión TCP.
La implementación observada con mayor frecuencia se encuentra en iOS y iPadOS. Las conexiones IPv4 al espacio de direcciones 17.0.0.0/8 de Apple suelen utilizar MPTCP. Inicialmente, la tecnología se utilizó para Siri y posteriormente se amplió a servicios como Apple Music.
Actualmente están definidas y se utilizan dos versiones de MPTCP: la versión 0 y la versión 1. MPTCP se identifica mediante la opción TCP 30. La opción incluye un subtipo y un campo de versión, con varios subtipos que permiten la negociación y la gestión de conexiones.
MP_CAPABLE, subtipo 0, indica que ambos extremos admiten MPTCP y debe aparecer durante el establecimiento de la conexión TCP para que la función se habilite. Cada opción MP_CAPABLE también incluye una clave de ocho bytes utilizada posteriormente para identificar y autenticar subflujos adicionales.
MP_JOIN, subtipo 1, permite que otra conexión TCP se una a la conexión MPTCP existente. Este subflujo normalmente será iniciado por el cliente y puede utilizar una dirección IP diferente, aunque la especificación también permite que lo inicie el servidor. Normalmente, los puertos son los mismos, pero no tienen que serlo. DSS, o Data Sequence Signal, asigna los números de secuencia de cada conexión TCP individual a los números de secuencia de la conexión MPTCP combinada.
Los subtipos ADD_ADDR y REMOVE_ADDR anuncian o retiran direcciones o puertos adicionales que pueden utilizarse para subflujos MPTCP sin establecer directamente una nueva conexión.
La forma más directa de detectar MPTCP es buscar la opción TCP 30. Wireshark admite esta búsqueda mediante su filtro de visualización “mptcp”. Tcpdump no dispone de un mecanismo específico para hacer coincidir opciones TCP, pero los paquetes MPTCP, especialmente los paquetes SYN, suelen tener cabeceras TCP grandes; por tanto, comprobar la longitud de la cabecera TCP puede proporcionar una indicación, por ejemplo, con el filtro “tcp[12]>0xd0”.
Suricata puede inspeccionar las opciones TCP mediante la palabra clave “tcp.hdr”. Las longitudes de las opciones varían, pero un mensaje MP_CAPABLE que contenga las claves del emisor y del receptor debería tener una longitud de 20 bytes. Sus tres primeros bytes son “1e 14 00” para la versión 0 o “1e 14 01” para la versión 1.
Snort no proporciona una palabra clave para inspeccionar las opciones TCP y, según el análisis, no ofrece una forma específica de filtrar MPTCP. En Zeek, las opciones TCP no se registran de forma predeterminada, pero los eventos tcp_option y tcp_options pueden utilizarse para registrar la opción 30 e identificar las comunicaciones que utilizan MPTCP.
Fuentes: SANS Internet Storm Center.