O Multipath TCP (MPTCP) chamou recentemente a atenção depois que uma vulnerabilidade foi relatada em sua implementação no Linux, identificada como CVE-2026-98432. Em vez de examinar a vulnerabilidade em si, esta análise se concentra em como o MPTCP funciona e em como seu uso pode ser detectado no tráfego de rede.
O TCP tradicional associa uma conexão a um par específico de endereços IP dos hosts. Esse modelo pode ser problemático para dispositivos móveis, que podem passar da conectividade Wi-Fi para a celular e, de outra forma, precisariam restabelecer as conexões. O MPTCP resolve essa limitação ao permitir que uma conexão seja dividida entre diferentes endereços IP ou transferida de um para outro. Ele também pode ajudar os servidores a usar links de alta largura de banda de forma mais eficiente do que uma única conexão TCP.
A implementação mais amplamente observada está presente no iOS e no iPadOS. As conexões IPv4 com o espaço de endereços 17.0.0.0/8 da Apple frequentemente usam MPTCP. A tecnologia foi inicialmente usada pela Siri e posteriormente estendida para serviços que incluem o Apple Music.
Duas versões do MPTCP estão atualmente definidas e em uso: a versão 0 e a versão 1. O MPTCP é identificado pela opção TCP 30. A opção inclui um subtipo e um campo de versão, com vários subtipos que dão suporte à negociação e ao gerenciamento da conexão.
MP_CAPABLE, subtipo 0, indica que ambos os endpoints são compatíveis com MPTCP e deve aparecer durante o handshake TCP para que o recurso seja habilitado. Cada opção MP_CAPABLE também transporta uma chave de oito bytes usada posteriormente para identificar e autenticar subfluxos adicionais.
MP_JOIN, subtipo 1, permite que outra conexão TCP se associe à conexão MPTCP existente. Esse subfluxo normalmente será iniciado pelo cliente e poderá usar um endereço IP diferente, embora a especificação também permita que o servidor o inicie. As portas normalmente são as mesmas, mas não precisam ser. DSS, ou Data Sequence Signal, mapeia os números de sequência de cada conexão TCP individual para os números de sequência da conexão MPTCP combinada.
Os subtipos ADD_ADDR e REMOVE_ADDR anunciam ou retiram endereços ou portas adicionais que podem ser usados para subfluxos MPTCP sem estabelecer diretamente uma nova conexão.
A maneira mais direta de detectar MPTCP é procurar a opção TCP 30. O Wireshark oferece suporte a isso por meio do filtro de exibição “mptcp”. O Tcpdump não possui um mecanismo dedicado para corresponder opções TCP, mas os pacotes MPTCP, especialmente os pacotes SYN, frequentemente têm cabeçalhos TCP grandes; portanto, verificar o comprimento do cabeçalho TCP pode fornecer uma indicação, como com o filtro “tcp[12]>0xd0”.
O Suricata pode inspecionar opções TCP com a palavra-chave “tcp.hdr”. Os comprimentos das opções variam, mas uma mensagem MP_CAPABLE contendo as chaves do remetente e do receptor deve ter 20 bytes de comprimento. Seus três primeiros bytes são “1e 14 00” para a versão 0 ou “1e 14 01” para a versão 1.
O Snort não fornece uma palavra-chave para inspecionar opções TCP e, de acordo com a análise, não oferece uma maneira específica de filtrar MPTCP. No Zeek, as opções TCP não são registradas por padrão, mas os eventos tcp_option e tcp_options podem ser usados para registrar a opção 30 e identificar comunicações que usam MPTCP.
Fontes: SANS Internet Storm Center.