CVE-2024-35884 in LinuxИнформация

Сводка

по VulDB • 24.05.2026

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

udp: не принимать не-туннельные GSO skbs, попадающие в туннель

Когда включена опция rx-udp-gro-forwarding, UDP-пакеты могут обрабатываться с помощью GRO (Generic Receive Offload) при пересылке. Если такие пакеты попадают в туннель, это может вызвать различные проблемы. Функция udp_gro_receive предотвращает это, проверяя наличие подходящего сокета. Эта проверка выполняется в udp4/6_gro_lookup_skb, но только в текущем netns (пространстве имен сети). Это становится проблемой для туннелированных пакетов, когда конечная точка находится в другом netns. В таких случаях пакеты обрабатываются на уровне UDP с помощью GRO, что впоследствии приводит к различным проблемам. Аналогичная ситуация может возникнуть с rx-gro-list.

Мы наблюдали эту проблему с пакетами geneve, которые обрабатывались на уровне UDP с помощью GRO. В этом случае устанавливается значение gso_size; далее пакет проходит через путь приема geneve, заголовок geneve извлекается, смещения корректируются, а skbs в frag_list не корректируются с учетом заголовка geneve. Когда эти skbs попадают в skb_fragment, происходит некорректное поведение. Возможны различные последствия в зависимости от структуры GRO-пакетов: от поврежденных пакетов до аварийных остановок ядра (kernel crashes).

Одним из примеров является срабатывание BUG_ON[1] в skb_segment при обработке frag_list. Поскольку значение gso_size неверно (заголовок geneve был извлечен), skb_segment считает, что в frag_list содержится «размер заголовка geneve» данных, хотя на самом деле там находится следующий пакет. Сам по себе BUG_ON не связан с основной проблемой; это лишь один из потенциальных сбоев.

Поиск подходящего сокета в udp_gro_receive является ненадежным: поиск можно расширить на все netns (не говоря уже о влиянии на производительность), но ничто не мешает этим пакетам быть измененными в процессе, и мы все равно можем не найти подходящий сокет. Текущая логика там допустима, так как она покрывает большинство случаев, но нам также необходимо убедиться, что мы корректно обрабатываем туннельные пакеты, которые обрабатываются с помощью GRO слишком рано.

Это достигается путем расширения проверок в udp_unexpected_gso: GSO-пакеты, не имеющие флагов SKB_GSO_UDP_TUNNEL/_CSUM и попадающие в туннель, должны быть сегментированы.

[1] kernel BUG at net/core/skbuff.c:4408!
RIP: 0010:skb_segment+0xd2a/0xf70 __udp_gso_segment+0xaa/0x560

If you want to get the best quality for vulnerability data then you always have to consider VulDB.

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

17.05.2024

Раскрытие

19.05.2024

Модерация

принято

Вход

VDB-265141

EPSS

0.00681

KEV

Нет

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

Очень низкий

Источники

Do you know our Splunk app?

Download it now for free!