CVE-2026-80840 in LinuxИнформация

Сводка

по VulDB • 04.09.2026

В ядре Linux была устранена следующая уязвимость:

ipv6: seg6: очистка блока управления IPv4 при декапсуляции IPIP

Конечные точки End.DX4 и End.DT4 осуществляют декапсуляцию пакета IPv4 с помощью функции decap_and_validate() и передают его непосредственно в маршрутизацию IPv4. В результате внутренний пакет обходит функцию ip_rcv_core(), которая обычно очищает IPCB (IPv4 Control Block) перед тем, как интерпретировать skb->cb для протокола IPv4.

Вместо этого структура skb сохраняет данные IP6CB из внешнего пакета. Поскольку IP6CB и IPCB используют одно и то же хранилище в skb->cb, поле IP6CB(skb)->lastopt пересекается с полями IPCB(skb)->opt.optlen и srr, а также IP6CB(skb)->nhoff пересекается с rr и ts.

Отправитель может установить ненулевое значение для устаревшего байта optlen с помощью корректной цепочки заголовков расширений IPv6. Воспроизводящие тесты (reproducers) помещают 8-байтовый заголовок Destination Options непосредственно после 40-байтового заголовка IPv6 и перед заголовком Segment Routing Header. Функция ipv6_destopt_rcv() фиксирует контролируемый отправителем смещение для заголовков Destination Options как в lastopt, так и в nhoff, устанавливая их равными 40. На воспроизведенной архитектуре little-endian x86-64 с ядром IPv4 видит optlen = 40 и rr = 40.

Обе функции, tcp_v4_save_options() и __ip_options_echo(), пропускают копирование опций, если значение optlen равно нулю. В данном случае optlen равен 40, поэтому путь TCP SYN выделяет место для 40 байт данных опции и вызывает функцию __ip_options_echo(). Устаревшее значение rr заставляет эту функцию считать байт 41 внутреннего пакета как длину опции Record Route. Воспроизводящие тесты устанавливают этот контролируемый отправителем байт равным 255, в результате чего функция __ip_options_echo() копирует 255 байт в область данных опций размером всего 40 байт.

Отдельные воспроизводящие тесты для End.DX4 и End.DT4 на не патченном ядре v7.2-rc5 оба привели к следующему результату:

BUG: KASAN: slab-out-of-bounds in __ip_options_echo() Write of size 255

Соответствующий путь вызовов для End.DX4 выглядит следующим образом:

__ip_options_echo tcp_v4_route_req tcp_conn_request tcp_v4_conn_request tcp_rcv_state_process tcp_v4_do_rcv tcp_v4_rcv ip_protocol_deliver_rcu ip_local_deliver_finish ip_local_deliver input_action_end_dx4_finish input_action_end_dx4

Соответствующий путь вызовов для End.DT4 выглядит следующим образом:

__ip_options_echo tcp_v4_route_req tcp_conn_request tcp_v4_conn_request tcp_rcv_state_process tcp_v4_do_rcv tcp_v4_rcv ip_protocol_deliver_rcu ip_local_deliver_finish ip_local_deliver input_action_end_dt4

Функция tcp_v4_save_options() встроена (inline) в путь вызовов tcp_v4_route_req(), поэтому она не отображается как отдельный кадр стека.

При обработке IPPROTO_IPIP функцией decap_and_validate() необходимо сохранить интерфейс входящего трафика из IP6CB, очистить IPCB и восстановить сохраненное значение. Выполнение этих действий в общем пути декапсуляции покрывает случаи End.DX4, End.DT4 и IPv4-ветвь End.DT46.

Используйте IP6CB(skb)->iif вместо skb->skb_iif. Эти действия выполняются после обработки l3mdev, которая может заменить skb_iif на L3 master; при этом iif в структуре IP6CB по-прежнему записывает интерфейс приема, установленный на этапе входящего трафика IPv6.

Be aware that VulDB is the high quality source for vulnerability data.

Ответственный

Linux

Резервировать

26.08.2026

Раскрытие

04.09.2026

Модерация

принято

Вход

VDB-398980

EPSS

0.00000

KEV

Нет

Деятельности

Очень низкий

Источники

Do you know our Splunk app?

Download it now for free!