L'azienda Anthropic ha rivelato un'importante vulnerabilità (CVE-2026-98432) nel TCP stack del kernel Linux, che consente l'esecuzione remota di codice tramite l'invio di pacchetti appositamente formati. È stato segnalato lo sviluppo di un exploit funzionante in grado di eseguire codice a livello di kernel e ottenere diritti di root nel sistema in remoto. L'exploit preparato è adatto per attacchi su sistemi con processi server che accettano connessioni tramite socket di rete che supportano l'uso del protocollo MPTCP (Multipath TCP). Il supporto per MPTCP può essere attivato legandosi a singoli socket di rete, ciò che avviene per impostazione predefinita nella libreria standard del linguaggio Go, a partire dalla versione Go 1.24 (febbraio 2025).
L'exploit preparato può essere utilizzato con qualsiasi applicazione server scritta in Go, incluso il server HTTP Caddy, se è possibile inviare pacchetti di rete al socket di ascolto creato da esse. Poiché la vulnerabilità è presente direttamente nello stack IPv4 e non è specifica per MPTCP, non si esclude la creazione di exploit che funzionano senza legami with MPTCP, anche se tali exploit non sono ancora stati dimostrati. Ad esempio, è possibile sfruttare la vulnerabilità durante l'elaborazione delle richieste di migrazione dei socket, disponibile in configurazioni con il parametro net.ipv4.tcp_migrate_req=1 o utilizzando programmi eBPF con l'opzione BPF_SK_REUSEPORT_SELECT_OR_MIGRATE.
La vulnerabilità è causata da una condizione di corsa che si verifica durante l'elaborazione simultanea di SYN request ri-inviate durante l'instaurazione di una connessione TCP. Poiché la funzione tcp_v4_syn_recv_sock() passa al socket figlio i parametri dalla struttura ireq->ireq_opt tramite riferimento e non tramite copia, sfortunatamente in determinate circostanze si verifica una situazione in cui la memoria per le strutture inet_opt e ireq_opt con i parametri del socket è già stata liberata, ma le opzioni associate continuano a essere utilizzate (use-after-free).
L'esecuzione remota avviene tramite l'invio di una serie di richieste di rete sincronizzate nel tempo. L'exploit creato è applicabile anche ai kernel che utilizzano la randomizzazione degli indirizzi (KASLR), ma raggiungere la finestra di corsa richiede molto tempo e un gran numero di tentativi. L'exploit è facilitato dal fatto che non riuscire a raggiungere la finestra di corsa porta solo a un reset della sessione di connessione (handshake), e non a un crash del kernel, consentendo così tentativi infiniti. Nel prototipo dell'exploit, attuare l'attacco ha richiesto circa un'ora: 48 minuti per determinare la disposizione della memoria e altri 5 minuti per organizzare l'esecuzione del codice.
Attualmente non sono disponibili percorsi di protezione garantiti contro la vulnerabilità; l'unica opzione affidabile è installare l'aggiornamento del kernel. Il problema si manifesta a partire dal kernel Linux 4.4 ed è stato risolto nelle versioni 5.10.272, 5.15.223, 6.1.190, 6.6.159, 6.12.113, 6.18.56, 7.2.10 e 7.3. È possibile valutare lo stato della risoluzione delle vulnerabilità nelle distribuzioni su queste pagine: Debian, Ubuntu, SUSE/openSUSE, RHEL, Gentoo, Arch,
Fedora.
Tra le raccomandazioni per contrastare metodi di sfruttamento specifici, che non bloccano la vulnerabilità in generale, si segnala la disattivazione del supporto MPTCP e l'impostazione del parametro sysctl del kernel net.ipv4.tcp_migrate_req a 0:
sysctl -w net.mptcp.enabled=0
sysctl -w net.ipv4.tcp_migrate_req=0
Per identificare la presenza di processi nel sistema che utilizzano socket con
MPTCP, si possono utilizzare i comandi:
ip mptcp endpoint show
ip mptcp limits show
Per disattivare il supporto MPTCP nei programmi scritti in Go, è necessario utilizzare il flag «multipathtcp=0», che può essere impostato tramite la variabile di ambiente «GODEBUG=multipathtcp=0». Per disattivare il supporto MPTCP in fase di compilazione, è possibile aggiungere «godebug multipathtcp=0» al file del modulo go.mod. Nel codice dell'applicazione, è possibile disattivare l'uso di MPTCP tramite le funzioni net.Dialer.SetMultipathTCP e net.ListenConfig.SetMultipathTCP.
Oltre al problema discusso, l'azienda Anthropic ha anche annunciato una serie di vulnerabilità localmente sfruttabili nel kernel Linux, OpenBSD e FreeBSD, che consentono di ottenere diritti di root nel sistema e uscire da contenitori isolati; vulnerabilità in Chrome e Safari, che portano all'esecuzione di codice nel sistema aprendo pagine web appositamente formattate; una vulnerabilità nel kernel di Windows che porta a un arresto anomalo; una vulnerabilità nella piattaforma Android che permette di bypassare il blocco dello schermo e accedere a informazioni personali e foto senza sbloccare il dispositivo (l'attacco è stato dimostrato su uno smartphone Google Pixel 9).
Supplemento:
- In nginx, la possibilità di attivare l'opzione IPPROTO_MPTCP per il socket di rete in ascolto è disponibile a partire dalla versione 1.29.7, ma non è abilitata di default.
- In Lighttpd, l'opzione per abilitare MPTCP è disponibile a partire dalla versione 1.4.76.
- In Apache httpd, le patch per supportare MPTCP sono state aggiunte al ramo Apache httpd 2.5-HEAD nel 2024.
- In systemd, il supporto per attivare MPTCP all'attivazione tramite socket è stato aggiunto nella versione 257.
- In Apache Traffic Server, l'opzione per abilitare MPTCP è supportata a partire dalla versione 9.2.4.
- In HAProxy, a partire dalla versione 3.1.0, è disponibile l'opzione «mptcp{,4,6}@».
- In Traefik, l'attivazione del flag IPPROTO_MPTCP è abilitata di default a partire dalle versioni 2.11.26, 3.4.2 e v3.5.0-rc1.
- Nel DBMS Valkey, a partire dalla versione 9.0.0 è disponibile l'opzione «—mptcp» e le impostazioni «mptcp yes» e «repl-mptcp yes».
Fonte: opennet.ru
