CVE-2026-80630 в Linux Kernel: сбой в sch_fq_codel и порядок проверки

CVE: CVE-2026-80630
Продукт: Linux Kernel
Дата публикации: 28.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,52%; процентиль 41,99%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В подсистеме планирования трафика Linux Kernel обнаружена логическая ошибка в модуле sch_fq_codel. Некорректный порядок вызова функций управления очередью приводит к ложной деактивации родительских классов и wild memory access в модуле qfq. Материал описывает механику сбоя, условия его проявления и безопасные команды для проверки состояния системы.

Основные характеристики​


Риск связан с нарушением целостности данных в подсистеме планирования сети, что может привести к падению ядра или некорректной работе сетевых классов. Ошибка затрагивает логику обработки пакетов в режиме peek.

  • Тип ошибки: Нарушение порядка операций (Logic Error) в net/sched/sch_fq_codel.c.
  • CVSS 3.1: 9.8 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
  • Условия атаки: Сетевой доступ, низкая сложность, отсутствие необходимости в привилегиях или взаимодействии пользователя.
  • Эксплуатация: Подтверждено техническое описание и PoC в ядре (KASAN report), подтвержденная эксплуатация в реальных атаках не зафиксирована.
  • EPSS: 0,52% (процентиль 41,99%).

Какие продукты и версии затронуты​


Уязвимость затрагивает ядро Linux, в котором включен модуль sch_fq_codel. Точные номера версий, в которых присутствует ошибка, не раскрыты в предоставленных источниках.

  • Компонент: net/sched/sch_fq_codel.c.
  • Связанный модуль: sch_qfq (пострадавший от wild memory access).
  • Статус исправления: Патч доступен в стабильных ветках ядра (stable tree).

Причина уязвимости​


Причина ошибки заключается в некорректном порядке вызова функции qdisc_tree_reduce_backlog в процессе обработки пакетов в режиме peek.

В исходном коде функция вызывалась до восстановления значения qlen (длина очереди). Если в результате операции qlen падал до нуля, но peek возвращал пакет, срабатывал callback qlen_notify родительского класса.

Это приводило к ложной деактивации родительского класса, хотя в очереди fq_codel оставался один пакет. Последствием становился wild memory access в модуле qfq и общий сбой (Oops: general protection fault).

Как работает атака​


Атака эксплуатирует логическую ошибку в обработке пакетов планировщиком fq_codel. Злоумышленник может направить трафик, который вызывает срабатывание механизма drop в режиме peek.

При этом порядок операций в ядре приводит к тому, что счетчик очереди qlen временно обнуляется. Родительский класс интерпретирует это как пустую очередь и деактивируется, несмотря на наличие пакетов в дочернем классе.

Далее происходит обращение к памяти, которая уже была освобождена или некорректно инициализирована (wild memory access), что фиксируется KASAN как maybe wild-memory-access и приводит к падению ядра.

Условия успешной эксплуатации​


Для успешной эксплуатации уязвимости необходимо наличие в системе модуля sch_fq_codel и возможность отправки сетевого трафика, который будет обработан этим планировщиком.

  • Доступ к сети: Злоумышленник должен иметь возможность передавать пакеты на интерфейс, где настроен fq_codel.
  • Настройка QoS: В системе должен быть активен класс, использующий fq_codel в составе иерархии планировщиков (например, в связке с qfq).
  • Отсутствие патча: Ядро должно быть собрано без исправления, переставляющего вызов qdisc_tree_reduce_backlog после восстановления qlen.

Возможный сценарий атаки​


Сценарий атаки начинается с отправки пакетов, которые планировщик fq_codel должен отбросить (drop) в процессе peek.

В момент отбрасывания пакетов функция qdisc_tree_reduce_backlog вызывается преждевременно. Если это приводит к обнулению qlen, родительский класс получает сигнал о пустой очереди и деактивируется.

После этого, при попытке обработки следующего пакета или при смене конфигурации (например, через tc), происходит обращение к невалидной памяти в модуле qfq. Результатом является падение ядра (kernel panic) или некорректное поведение сетевой подсистемы.

Есть ли публичный эксплойт​


Доступно техническое описание уязвимости и подтвержденный PoC в виде лога KASAN, зафиксированного в процессе разработки патча. В логе отображается Oops: general protection fault и KASAN: maybe wild-memory-access.

Подтвержденная эксплуатация в реальных атаках (in-the-wild) в предоставленных источниках не зафиксирована. Ссылки на патчи в стабильных ветках ядра подтверждают, что проблема была воспроизведена разработчиками.

Признаки эксплуатации​


Специфичные IOC для этой уязвимости в источниках не приведены. Однако можно использовать следующие неспецифичные признаки аномального поведения ядра:

  • Записи в dmesg или kern.log с текстом Oops: general protection fault.
  • Сообщения KASAN: maybe wild-memory-access in range [0xdead000000000120-0xdead000000000127].
  • Ссылки в call trace на функции qfq_deactivate_agg, qdisc_reset или qdisc_graft.
  • Нестабильность сетевых интерфейсов при нагрузке на планировщики QoS.

Как обнаружить атаку​


Для обнаружения признаков эксплуатации или сбоев, связанных с этой уязвимостью, рекомендуется анализировать логи ядра.

  • Проверка dmesg: Выполните dmesg | grep -i "general protection fault".
  • Поиск KASAN: Выполните dmesg | grep -i "KASAN".
  • Анализ call trace: Ищите упоминания qfq_deactivate_agg или sch_qfq в логах падений ядра.

Эти признаки не являются уникальными для CVE-2026-80630, но указывают на возможную эксплуатацию или сбой в подсистеме планирования сети.

Как проверить свою версию​


Для проверки версии ядра и наличия модуля sch_fq_codel используйте следующие безопасные команды:

Bash:
uname -r
uname -a
cat /proc/version

Чтобы проверить, включен ли модуль в ядре, выполните:

Bash:
lsmod | grep fq_codel

Если модуль отсутствует, система не подвержена этой конкретной уязвимости. Для проверки наличия патча в стабильных ветках необходимо сверять хэш ядра с официальными списками исправлений (ссылки на патчи приведены в источниках).

Исправление​


Единственным подтвержденным способом устранения уязвимости является обновление ядра до версии, содержащей исправление.

  • Патч в ядре: Исправление перенесено в стабильные ветки Linux (stable tree). Ссылки на коммиты: 0500af8630c3253f0dde879bd3a73a06bb2f2b3f, 097f6fc7b1ae362dd7a9444b2572162fda73b284.
  • Обновление дистрибутива: Используйте штатные механизмы обновления пакетов ядра в вашей ОС (Debian, Ubuntu, RHEL и др.).
  • Пересборка ядра: Если вы используете кастомное ядро, примените патч из стабильных веток и пересоберите ядро.

Временные меры защиты​


Пока обновление ядра не выполнено, можно снизить риск, ограничив использование уязвимого планировщика.

  • Отключение fq_codel: Если это не критично для бизнес-процессов, удалите классы, использующие fq_codel, через утилиту tc.
  • Изоляция интерфейсов: Ограничьте доступ к сетевым интерфейсам, где настроен QoS с использованием fq_codel, доверенным хостам.
  • Мониторинг: Усиленный мониторинг логов ядра на предмет Oops и KASAN сбоев.

Эти меры не устраняют уязвимость, но снижают вероятность ее срабатывания.

Как проверить устранение уязвимости​


После обновления ядра необходимо убедиться, что патч применен.

  • Проверка версии: Выполните uname -r и сравните версию с официальными релизами, содержащими исправление.
  • Проверка патча: В кастомных сборках ядра можно проверить наличие функции fq_codel_peek в исходниках или бинарнике (если доступно).
  • Функциональное тестирование: Проведите нагрузочное тестирование сетевых классов с fq_codel и убедитесь, что сбоев (Oops/KASAN) не возникает.

Если сбоев нет и версия ядра соответствует требованиям, уязвимость считается устраненной.

Вывод​


CVE-2026-80630 представляет собой критический риск для систем, использующих планировщик fq_codel в составе QoS. Ошибка приводит к wild memory access и падению ядра, что может быть использовано для отказа в обслуживании.

Администраторам необходимо срочно проверить наличие модуля fq_codel в своих системах и обновить ядро до последней стабильной версии. До применения патча рекомендуется ограничить использование уязвимого планировщика и усилить мониторинг логов ядра.

Официальные источники​


  1. NVD — CVE-2026-80630
  2. FIRST EPSS — CVE-2026-80630
  3. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree
  4. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree
  5. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree
  6. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree
  7. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree
  8. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree
  9. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree
  10. net/sched: sch_fq_codel: Do not call qdisc_tree_reduce_backlog during peek before restoring qlen - kernel/git/stable/linux.git - Linux kernel stable tree

История обновлений статьи​


  • 30.08.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ