CVE-2026-98432
ipv4: libera inet_opt e ireq_opt dopo un periodo di grazia RCU
- Pubblicato
- 15 ott 2026
- Aggiornato
- 3 nov 2026
- Assegnazione CNA
- Linux
- Evidenza osservata
- 1 nov 2026
CVSS primario
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HBasso · prossimi 30 giorni
- Percentile
- 39,6%
- Data del modello
- 2 nov 2026
L'EPSS è una stima statistica, non una certezza o una misura di impatto. Combinalo con CVSS, stato KEV, esposizione e ambiente.
Riepilogo
Nel kernel Linux è stata risolta la seguente vulnerabilità: ipv4: liberare inet_opt e ireq_opt dopo un periodo di grazia RCU. tcp_v4_syn_recv_sock() trasferisce la proprietà di ireq->ireq_opt al socket figlio (newinet->inet_opt) senza copiarlo. Un'altra cpu può elaborare contemporaneamente un SYN ritrasmesso per lo stesso request socket e inviare un SYNACK da tcp_check_req(). tcp_v4_send_synack() e inet_csk_route_req() leggono ireq->ireq_opt solo sotto rcu_read_lock(), e ip_build_and_send_pkt() e ip_options_build() leggono poi opt->optlen due volte. Si noti che il timer SYNACK di per sé non è un problema: mantiene un riferimento sul proprio request socket, e inet_csk_reqsk_queue_drop() chiama timer_delete_sync() prima che il figlio possa essere liberato. Dal commit 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table"), i request socket vengono elaborati senza mantenere il lock del listener, quindi nulla impedisce che il socket figlio venga liberato mentre il SYNACK è ancora in fase di costruzione. I socket figli TCP non hanno SOCK_RCU_FREE, e inet_sock_destruct() libera inet_opt con un semplice kfree(), portando a un use-after-free in ip_options_build(). Un problema simile esiste con la migrazione dei request socket (net.ipv4.tcp_migrate_req=1, o un programma BPF_SK_REUSEPORT_SELECT_OR_MIGRATE). reqsk_timer_handler() clona il request socket con inet_reqsk_clone(), in modo che il vecchio request socket e il suo clone condividano lo stesso ireq_opt, poi reqsk_migrate_reset() azzera il puntatore in quello vecchio. Un'altra cpu che mantiene un riferimento sul vecchio request socket può ancora utilizzare queste opzioni (inviando un SYNACK, o creando un figlio in tcp_v4_syn_recv_sock()) quando il clone viene liberato, e tcp_v4_reqsk_destructor() usa anch'esso un semplice kfree(). I lettori usano già RCU, e altri percorsi che sostituiscono inet_opt (do_ip_setsockopt(), cipso_v4_sock_setattr()...) usano già kfree_rcu(). Usare kfree_rcu() anche in inet_sock_destruct() e tcp_v4_reqsk_destructor(). IPv6 non è interessato dal primo problema, perché tcp_v6_syn_recv_sock() duplica le opzioni. tcp_v6_reqsk_destructor() ha lo stesso problema di migrazione con ipv6_opt, che viene impostato solo da CALIPSO. Questo sarà affrontato in una patch separata.
Fonti
Utilizzo responsabile
Utilizza le informazioni sulla vulnerabilità solo sui sistemi che possiedi o che sei autorizzato a testare. Kitploit si collega ai metadati della ricerca pubblica e non memorizza codici exploit o payload dannosi.