Уязвимость в ядре Linux, позволяющая вызвать крах через отправку UDP-пакета
В ядре Linux выявлена уязвимость (CVE-2019-11683), позволяющая удалённо вызвать отказ в обслуживании через отправку специально оформленных UDP-пакетов (packet-of-death). Проблема вызвана ошибкой в обработчике udp_gro_receive_segment (net/ipv4/udp_offload.c) с реализацией технологии GRO (Generic Receive Оffload) и может привести к повреждению содержимого областей памяти ядра при обработке UDP-пакетов с нулевым заполнением (пустой payload).
Проблема затрагивает только ядро 5.0, так как поддержка GRO для UDP-сокетов была реализована в ноябре прошлого года и успела попасть только в последний стабильный выпуск ядра. Технология GRO позволяет ускорить обработку большого числа входящих пакетов, благодаря агрегированию нескольких пакетов в более крупные блоки, не требующие отдельной обработки каждого пакета.
Для TCP проблема не проявляется, так как для данного протокола не поддерживается агрегирование пакетов без payload.
Проблема была найдена в результате использования созданных компанией Google автоматизированной системы fuzzing-тестирования syzbot и анализатора KASAN (KernelAddressSanitizer), нацеленного на выявление ошибок при работе с памятью и фактов некорректного обращения к памяти, таких как обращения к освобождённым областям памяти и помещение кода в области памяти, не предназначенные для подобных манипуляций.