CVE-2026-64024 in Linux
Resumen
por VulDB • 2026-07-19
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
tcp: corregir la fuga persistente (stale) del ISN per-CPU en tcp_tw_isn que permitía predecir los números iniciales de secuencia (ISN).
El commit culpable trasladó el ISN derivado de TIME_WAIT desde el bloque de control del skb a una variable por CPU, asumiendo que el valor siempre sería consumido por `tcp_conn_request()` para el mismo paquete en el que se escribió. Esta suposición se ve violada por múltiples rutas de descarte entre el productor (`__this_cpu_write(tcp_tw_isn, isn)` en `tcp_v{4,6}_rcv()`) y el consumidor (`tcp_conn_request()`):
- comprobación de min_ttl / min_hopcount - comprobación de política xfrm - discrepancia MD5/AO en tcp_inbound_hash() - descarte por eBPF/SO_ATTACH_FILTER en tcp_filter() - descarte de th->syn && th->fin en el estado TCP_LISTEN dentro de tcp_rcv_state_process() - psp_sk_rx_policy_check() en tcp_v{4,6}_do_rcv()
- tcp_checksum_complete() en tcp_v{4,6}_do_rcv()
- retorno de NULL por tcp_v{4,6}_cookie_check()
Cuando un paquete se descarta en cualquiera de estas rutas, `tcp_tw_isn` queda establecido.
El siguiente SYN procesado en la misma CPU consume entonces el valor distinto de cero en `tcp_conn_request()`, obteniendo potencialmente un ISN predecible.
Este parche devuelve `tcp_tw_isn` a `skb->cb[]`, eliminando la variable por cpu.
Tenga en cuenta que `tcp_v{4,6}_fill_cb()` no lo establece.
Impacto muy pequeño en el tamaño/complexidad general del código:
$ scripts/bloat-o-meter -t vmlinux.old vmlinux.new add/remove: 0/0 grow/shrink: 2/1 up/down: 8/-15 (-7) Function old new delta tcp_v6_rcv 3038 3042 +4 tcp_v4_rcv 3035 3039 +4 tcp_conn_request 2938 2923 -15 Total: Before=24436060, After=24436053, chg -0.00%
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.