CVE-2026-98432
ipv4: освобождение inet_opt и ireq_opt после льготного периода RCU
- Опубликовано
- 15 окт. 2026 г.
- Обновлено
- 3 нояб. 2026 г.
- Назначение CNA
- Linux
- Наблюдены доказательства
- 1 нояб. 2026 г.
Первичный CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HНизкий · следующие 30 дней
- Процентиль
- 39,6 %
- Дата модели
- 2 нояб. 2026 г.
EPSS – это статистическая оценка, а не достоверность или мера воздействия. Объедините это с CVSS, статусом KEV, воздействием и вашей средой.
Резюме
В ядре Linux устранена следующая уязвимость: ipv4: освобождение inet_opt и ireq_opt после льготного периода RCU. tcp_v4_syn_recv_sock() передаёт владение ireq->ireq_opt дочернему сокету (newinet->inet_opt) без копирования. Другой CPU может одновременно обрабатывать повторно переданный SYN для того же request-сокета и отправить SYNACK из tcp_check_req(). tcp_v4_send_synack() и inet_csk_route_req() читают ireq->ireq_opt только под rcu_read_lock(), а ip_build_and_send_pkt() и ip_options_build() затем дважды читают opt->optlen. Отметим, что сам таймер SYNACK не является проблемой: он удерживает ссылку на свой request-сокет, а inet_csk_reqsk_queue_drop() вызывает timer_delete_sync() до того, как дочерний сокет может быть освобождён. Поскольку коммит 079096f103fa ("tcp/dccp: install syn_recv requests into ehash table") обрабатывает request-сокеты без удержания блокировки listener, ничто не препятствует освобождению дочернего сокета, пока SYNACK всё ещё формируется. Дочерние TCP-сокеты не имеют SOCK_RCU_FREE, а inet_sock_destruct() освобождает inet_opt обычным kfree(), что приводит к use-after-free в ip_options_build(). Аналогичная проблема существует при миграции request-сокета (net.ipv4.tcp_migrate_req=1 или программа BPF_SK_REUSEPORT_SELECT_OR_MIGRATE). reqsk_timer_handler() клонирует request-сокет с помощью inet_reqsk_clone(), так что старый request-сокет и его клон совместно используют один и тот же ireq_opt, а затем reqsk_migrate_reset() очищает указатель в старом. Другой CPU, удерживающий ссылку на старый request-сокет, всё ещё может использовать эти опции (отправляя SYNACK или создавая дочерний сокет в tcp_v4_syn_recv_sock()), когда клон освобождается, а tcp_v4_reqsk_destructor() также использует обычный kfree(). Читатели уже используют RCU, а другие пути замены inet_opt (do_ip_setsockopt(), cipso_v4_sock_setattr()...) уже используют kfree_rcu(). Используйте kfree_rcu() также в inet_sock_destruct() и tcp_v4_reqsk_destructor(). IPv6 не затронут первой проблемой, поскольку tcp_v6_syn_recv_sock() дублирует опции. tcp_v6_reqsk_destructor() имеет ту же проблему миграции с ipv6_opt, который устанавливается только CALIPSO. Это будет рассмотрено в отдельном патче.
Источники
Ответственное использование
Используйте информацию об уязвимостях только в тех системах, которыми вы владеете или имеете право тестировать. Kitploit ссылается на метаданные общедоступных исследований и не хранит код эксплойта или вредоносные полезные данные.