CVE: CVE-2026-64577
Продукт: Linux Kernel
Дата публикации: 05.08.2026
Критичность: HIGH
CVSS: 7.5 (3.1)
EPSS: 0,58%; процентиль 44,98%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В драйвере GTP ядра Linux обнаружена уязвимость, позволяющая удалённому атакующему вызвать панику ядра. Ошибка возникает из-за игнорирования результата функции
skb_pull_data() при формировании ответа на эхо-запрос GTPv1-U. Статья разбирает механику нарушения инвариантов буфера sk_buff, условия срабатывания и способы проверки актуальности системы.Основные характеристики
Риск представляет собой отказ в обслуживании (DoS) на уровне ядра. Удалённый пользователь может принудительно завершить работу системы, направив один некорректный пакет. Механизм срабатывания — нарушение целостности буфера
skb, что приводит к срабатыванию защиты skb_under_panic и последующей панике ядра.- Тип ошибки: Непроверенный возврат функции
skb_pull_data()вdrivers/net/gtp.c.
- CVSS 3.1: 7.5 (HIGH). Вектор:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H.
- Условия атаки: Сетевой вектор (AV:N), низкая сложность (AC:L), привилегии не требуются (PR:N).
- Влияние: Только на доступность (A:H). Конфиденциальность и целостность не затрагиваются.
- EPSS: 0,58% (процентиль 44,98%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
- Статус: Исправление внесено в ветки stable и mainline.
Какие продукты и версии затронуты
Уязвимость затрагивает ядра Linux, в которых включён модуль GTP (GPRS Tunnelling Protocol). Точный список версий, требующих обновления, зависит от конкретного дистрибутива и его политики поддержки.
- Ядро Linux: Ветки, содержащие код
gtp1u_send_echo_resp()без проверки возвратаskb_pull_data().
- Дистрибутивы: Все системы, использующие ядра, в которые не портирован патч
cd170f051dba9ac146fabcd1b91726487c0cb9fa.
Для точного определения подверженности необходимо сверить версию установленного ядра с официальными списками обновлений вашего дистрибутива.
Причина уязвимости
Причина ошибки кроется в логике обработки заголовков в функции
gtp1u_send_echo_resp(). Функция вызывает skb_pull_data(), чтобы «вытащить» (сдвинуть указатель skb->data) 20 байт данных (заголовок GTPv1-U и UDP).Проблема в том, что вызывающая функция
gtp1u_udp_encap_recv() гарантирует наличие в буфере только 16 байт (базовый заголовок GTP + UDP). Если входящий пакет содержит от 16 до 19 байт полезной нагрузки, skb_pull_data() не может сдвинуть указатель на 20 байт, возвращает NULL, но skb->data при этом не изменяется.Код игнорирует этот возврат и продолжает выполнение. Последующие вызовы
skb_push() и добавление IP-заголовка функцией iptunnel_xmit() сдвигают skb->data ниже границы skb->head, что нарушает инварианты структуры sk_buff и вызывает панику ядра.Как работает атака
Атака реализуется через отправку UDP-пакета на порт, обслуживаемый GTP-интерфейсом. Пакет должен иметь структуру, имитирующую эхо-запрос GTPv1-U, но с урезанной полезной нагрузкой.
- Приём пакета: Ядро принимает UDP-пакет и передаёт его в обработчик GTP.
- Проверка заголовка: Функция
gtp1u_udp_encap_recv()проверяет наличие 16 байт заголовка. Для коротких пакетов (16-19 байт) это условие выполняется.
- Сбой сдвига: Вызывается
gtp1u_send_echo_resp(), которая пытается сдвинуть указатель на 20 байт. Из-за нехватки данных функция возвращаетNULL, но сдвиг не происходит.
- Нарушение памяти: Код продолжает выполнение, вызывая
skb_push()для формирования ответа. Это, в сочетании с добавлением IP-заголовка, выводит указательskb->dataза пределы допустимой области буфера.
- Паника: Срабатывает проверка
skb_under_panic(), что приводит кkernel BUGи остановке системы.
Условия успешной эксплуатации
Для успешной эксплуатации атакующему необходимо выполнить следующие условия:
- Доступ к сети: Атакующий должен иметь сетевой доступ к целевому хосту.
- Активный GTP-интерфейс: На целевой системе должен быть настроен и активен интерфейс GTP (например,
gtp0).
- Открытый порт: UDP-порт, на котором слушает GTP-демон (по умолчанию 2152), должен быть доступен извне.
- Отсутствие фильтрации: Межсетевой экран или правила
iptablesне должны блокировать UDP-трафик на соответствующий порт.
Возможный сценарий атаки
Атакующий сканирует сеть в поисках хостов с открытым UDP-портом 2152. Обнаружив целевой сервер, он формирует UDP-пакет с заголовком GTPv1-U, который выглядит как эхо-запрос, но имеет длину полезной нагрузки 16-19 байт.
Пакет отправляется на целевой хост. Ядро обрабатывает его, попадает в уязвимый код и вызывает панику. Система перезагружается или останавливается. Атакующий может повторять отправку пакетов, чтобы поддерживать состояние отказа в обслуживании.
Есть ли публичный эксплойт
Публичный эксплойт в виде готового скрипта или PoC в источниках не указан. Однако механика атаки полностью описана в коммите исправления, что позволяет легко сформировать пакет для проверки. Эксплуатация в реальных атаках не подтверждена, но технически она тривиальна для атакующего с сетевым доступом.
Признаки эксплуатации
Специфичных IOC (индикаторов компрометации) для этой уязвимости нет, так как она приводит к немедленной остановке системы. Общие признаки, которые могут указывать на попытку атаки:
- Логи ядра: Записи о
kernel panicилиskb_under_panicвdmesgили системных журналах.
- Сетевые логи: Потоки UDP-трафика на порт 2152 с аномально короткими пакетами.
- Мониторинг: Внезапные перезагрузки или зависания серверов, работающих с GTP.
Как обнаружить атаку
Для обнаружения попыток эксплуатации можно использовать следующие методы:
- Анализ логов ядра: Поиск строк
skb_under_panicилиkernel BUG at net/core/skbuff.c.
- Сетевой мониторинг: Настройка правил в IDS/IPS для детектирования UDP-пакетов с заголовком GTPv1-U, длина полезной нагрузки которых находится в диапазоне 16-19 байт.
- Мониторинг доступности: Наблюдение за внезапными сбоями доступности GTP-инфраструктуры.
Как проверить свою версию
Для проверки версии ядра и наличия патча используйте следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Затем сверьте полученную версию с официальными списками обновлений вашего дистрибутива. Если вы используете сборку из исходников, проверьте наличие коммита
cd170f051dba9ac146fabcd1b91726487c0cb9fa в истории ядра.Исправление
Единственный надёжный способ устранения уязвимости — обновление ядра до версии, содержащей исправление.
- Дистрибутивы: Установите последние обновления безопасности через пакетный менеджер (
apt,yum,dnfи т.д.).
- Сборка из исходников: Пересоберите ядро с включением патча
cd170f051dba9ac146fabcd1b91726487c0cb9fa.
- Перезагрузка: После обновления ядра выполните перезагрузку системы для применения изменений.
Временные меры защиты
До применения обновления можно временно снизить риск:
- Отключение GTP: Если функциональность GTP не требуется, отключите модуль
gtpили удалите GTP-интерфейсы.
- Фильтрация трафика: Настройте правила
iptablesили межсетевого экрана для блокировки UDP-трафика на порт 2152 от недоверенных источников.
- Изоляция: Разместите GTP-инфраструктуру в выделенной сети с ограниченным доступом.
Как проверить устранение уязвимости
После обновления ядра проверьте, что патч применён:
Bash:
uname -r
Убедитесь, что версия соответствует той, в которой заявлено исправление. Для дополнительной уверенности можно проверить наличие изменений в исходниках ядра или использовать инструменты аудита безопасности.
Вывод
CVE-2026-64577 представляет собой уязвимость с высоким уровнем риска для систем, использующих GTP. Механизм атаки прост и не требует привилегий, что делает её опасной для инфраструктуры, открытой в интернет.
Администраторам необходимо срочно обновить ядро или применить временные меры защиты. Мониторинг логов ядра поможет выявить попытки эксплуатации.
Официальные источники
- NVD — CVE-2026-64577
- FIRST EPSS — CVE-2026-64577
- gtp: check skb_pull_data() return in gtp1u_send_echo_resp() - kernel/git/stable/linux.git - Linux kernel stable tree
- gtp: check skb_pull_data() return in gtp1u_send_echo_resp() - kernel/git/stable/linux.git - Linux kernel stable tree
- gtp: check skb_pull_data() return in gtp1u_send_echo_resp() - kernel/git/stable/linux.git - Linux kernel stable tree
- gtp: check skb_pull_data() return in gtp1u_send_echo_resp() - kernel/git/stable/linux.git - Linux kernel stable tree
- gtp: check skb_pull_data() return in gtp1u_send_echo_resp() - kernel/git/stable/linux.git - Linux kernel stable tree
- gtp: check skb_pull_data() return in gtp1u_send_echo_resp() - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 10.08.2026 — Опубликована первая версия материала.
- 27.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
Последнее редактирование:
