Multipath TCP (MPTCP) ha recentemente attirato l’attenzione dopo che è stata segnalata una vulnerabilità nella sua implementazione Linux, identificata come CVE-2026-98432. Anziché esaminare la vulnerabilità in sé, questa analisi si concentra sul funzionamento di MPTCP e su come rilevarne l’uso nel traffico di rete.
Il TCP tradizionale associa una connessione a una specifica coppia di indirizzi IP degli host. Questo modello può essere problematico per i dispositivi mobili, che possono passare dalla connettività Wi-Fi a quella cellulare e altrimenti devono ristabilire le connessioni. MPTCP affronta questa limitazione consentendo di suddividere una connessione tra indirizzi IP diversi o di trasferirla da un indirizzo all’altro. Può inoltre aiutare i server a utilizzare i collegamenti ad alta larghezza di banda in modo più efficace rispetto a una singola connessione TCP.
L’implementazione osservata più frequentemente è presente su iOS e iPadOS. Le connessioni IPv4 allo spazio di indirizzi 17.0.0.0/8 di Apple utilizzano spesso MPTCP. Inizialmente la tecnologia veniva usata per Siri, per poi essere estesa a servizi tra cui Apple Music.
Attualmente sono definite e utilizzate due versioni di MPTCP: la versione 0 e la versione 1. MPTCP è identificato dall’opzione TCP 30. L’opzione include un sottotipo e un campo di versione, con diversi sottotipi che supportano la negoziazione e la gestione della connessione.
MP_CAPABLE, sottotipo 0, indica che entrambi gli endpoint supportano MPTCP e deve comparire durante l’handshake TCP affinché la funzionalità venga abilitata. Ogni opzione MP_CAPABLE contiene inoltre una chiave di otto byte utilizzata in seguito per identificare e autenticare sottostream aggiuntivi.
MP_JOIN, sottotipo 1, consente a un’altra connessione TCP di unirsi alla connessione MPTCP esistente. Questo sottostream viene solitamente avviato dal client e può utilizzare un indirizzo IP diverso, sebbene la specifica consenta anche al server di avviarne uno. Le porte sono normalmente le stesse, ma non devono necessariamente esserlo. DSS, ovvero Data Sequence Signal, associa i numeri di sequenza di ciascuna connessione TCP individuale ai numeri di sequenza della connessione MPTCP combinata.
I sottotipi ADD_ADDR e REMOVE_ADDR pubblicizzano o ritirano indirizzi o porte aggiuntivi che possono essere utilizzati per i sottostream MPTCP senza stabilire direttamente una nuova connessione.
Il modo più diretto per rilevare MPTCP consiste nel cercare l’opzione TCP 30. Wireshark supporta questa operazione tramite il filtro di visualizzazione “mptcp”. Tcpdump non dispone di un meccanismo dedicato per individuare le opzioni TCP, ma i pacchetti MPTCP, in particolare i pacchetti SYN, hanno spesso intestazioni TCP di grandi dimensioni; controllare la lunghezza dell’intestazione TCP può quindi fornire un’indicazione, ad esempio con il filtro “tcp[12]>0xd0”.
Suricata può esaminare le opzioni TCP con la parola chiave “tcp.hdr”. Le lunghezze delle opzioni variano, ma un messaggio MP_CAPABLE contenente entrambe le chiavi del mittente e del destinatario dovrebbe essere lungo 20 byte. I suoi primi tre byte sono “1e 14 00” per la versione 0 oppure “1e 14 01” per la versione 1.
Snort non fornisce una parola chiave per esaminare le opzioni TCP e, secondo l’analisi, non offre un modo specifico per filtrare MPTCP. In Zeek, le opzioni TCP non vengono registrate per impostazione predefinita, ma gli eventi tcp_option e tcp_options possono essere utilizzati per registrare l’opzione 30 e identificare le comunicazioni che utilizzano MPTCP.
Fonti: SANS Internet Storm Center.