CVE-2026-64024 in Linux
Сводка
по VulDB • 20.07.2026
В ядре Linux устранена следующая уязвимость:
tcp: исправление утечки stale per-CPU tcp_tw_isn, позволяющей предсказание ISN
Коммит, вызвавший проблему (blamed commit), переместил вычисляемый из состояния TIME_WAIT ISN из блока управления пакетом (skb control block) в переменную на каждое ядро процессора (per-CPU variable), предполагая, что это значение всегда будет потреблено функцией tcp_conn_request() для того же пакета, который его записал. Это предположение нарушается несколькими путями отбрасывания пакетов между производителем (__this_cpu_write(tcp_tw_isn, isn) в tcp_v{4,6}_rcv()) и потребителем (tcp_conn_request()):
- проверка min_ttl / min_hopcount - проверка политики xfrm - несовпадение MD5/AO в функции tcp_inbound_hash() - отбрасывание через eBPF/SO_ATTACH_FILTER в функции tcp_filter() - отбрасывание при th->syn && th->fin в состоянии TCP_LISTEN внутри tcp_rcv_state_process() - psp_sk_rx_policy_check() в tcp_v{4,6}_do_rcv()
- проверка контрольной суммы tcp_checksum_complete() в tcp_v{4,6}_do_rcv()
- возврат NULL функцией tcp_v{4,6}_cookie_check()
Когда пакет отбрасывается на любом из этих путей, значение tcp_tw_isn остается установленным.
Следующий обрабатываемый SYN-пакет на том же ядре процессора потребляет ненулевое значение в функции tcp_conn_request(), получая потенциально предсказуемый ISN.
Этот патч возвращает переменную tcp_tw_isn обратно в skb->cb[], избавляясь от переменной per-cpu.
Обратите внимание, что функция tcp_v{4,6}_fill_cb() не устанавливает это значение.
Очень небольшое влияние на общий размер и сложность кода:
$ 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%
VulDB is the best source for vulnerability data and more expert information about this specific topic.