CVE-2026-74583 в Linux Kernel: use-after-free в cls_route, уязвимые версии и защита

CVE: CVE-2026-74583
Продукт: Linux Kernel
Дата публикации: 21.08.2026
Критичность: HIGH
CVSS: 7.8 (3.1)
EPSS: 0,12%; процентиль 1,83%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В классификаторе маршрутов Linux Kernel (cls_route) обнаружена гонка, приводящая к обращению к освобождённой памяти (use-after-free). Проблема затрагивает кэш fastmap и возникает при одновременной классификации пакетов и удалении фильтров. Статья разбирает механику уязвимости, условия её проявления и методы проверки исправления.

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


Уязвимость относится к категории memory corruption (use-after-free) в компоненте net/sched: cls_route. CVSS 3.1 оценивает риск как HIGH (7.8) с вектором CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H. Для эксплуатации требуется локальный доступ с правами, позволяющими управлять сетевыми фильтрами. EPSS составляет 0.00117 (процентиль 0.01832), что указывает на низкую вероятность массового использования в настоящее время. Уязвимость была обнаружена Trend Micro ZDI и Santosh Kalluri, исправление внесено в стабильные ветки ядра.

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


Затронут Linux Kernel в версиях, содержащих код классификатора cls_route с уязвимой логикой управления кэшем fastmap. Точный диапазон версий не указан в предоставленных источниках, однако исправление было применено в нескольких стабильных ветках (stable tree) в августе 2026 года. Рекомендуется проверить наличие патча в используемой версии ядра, обратившись к официальным релизам дистрибутива или git-репозиторию Linux Kernel.

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


Причина кроется в нарушении синхронизации между читателем (route4_classify) и писателем (route4_delete, route4_change) данных в кэше fastmap. Читатель записывает указатель на фильтр в кэш после того, как писатель уже сбросил кэш и запланировал освобождение памяти. Это приводит к тому, что в кэше остаётся «висячий» указатель (dangling pointer), который при последующем обращении к памяти вызывает use-after-free. Критическим моментом является отсутствие механизма, предотвращающего повторное добавление указателя в кэш после его сброса.

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


Атака строится на создании гонки состояний (race condition). Атакующий инициирует одновременное выполнение двух процессов: один классифицирует пакеты, срабатывая на конкретный фильтр, а другой удаляет или изменяет этот же фильтр. В момент, когда читатель находит фильтр в RCU-защищённой цепочке, но ещё не записал его в кэш, писатель удаляет фильтр и сбрасывает кэш. Читатель продолжает выполнение и записывает указатель на уже освобождённый объект в кэш. При следующем пакете, попадающем под этот фильтр, ядро обращается к памяти по этому указателю, что приводит к чтению из освобождённой области памяти.

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


Для успешной эксплуатации необходимо: локальный доступ к системе; права, позволяющие создавать и удалять сетевые фильтры (обычно root или CAP_NET_ADMIN); возможность генерировать трафик, проходящий через уязвимый классификатор; наличие уязвимой версии ядра без патча. Эксплуатация требует точного тайминга, что делает её сложной для удалённого атакующего без локального доступа.

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


Локальный атакующий с правами root создаёт фильтр в cls_route. Затем он запускает процесс, который генерирует трафик, срабатывающий на этот фильтр, и параллельно процесс, удаляющий фильтр. Из-за гонки в кэше fastmap остаётся указатель на освобождённый объект. При обработке следующего пакета ядро обращается к этому указателю, что может привести к падению ядра (DoS) или, в худшем случае, к выполнению кода в контексте ядра, если атакующий сможет контролировать содержимое освобождённой памяти.

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


Публичный эксплойт в виде готового PoC или подтверждённой эксплуатации в реальных атаках не зафиксирован. Однако уязвимость была воспроизведена с использованием mdelay(100) и стресс-теста, что подтверждает её наличие. Отчёты о воспроизведении были предоставлены Trend Micro ZDI и Santosh Kalluri. Отсутствие публичного эксплойта не означает, что он не может быть создан, учитывая доступность исходного кода и описание механики.

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


Специфических IOC для этой уязвимости не существует. Общие точки контроля (неспецифичные) включают: мониторинг логов ядра на наличие сообщений KASAN slab-use-after-free в путях route4 fastmap; анализ сетевых правил на наличие подозрительных частых изменений фильтров cls_route; контроль за процессами, выполняющими операции с сетевыми фильтрами в сочетании с генерацией трафика.

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


Для обнаружения можно использовать: анализ логов ядра (dmesg, journalctl) на наличие ошибок KASAN, связанных с use-after-free в cls_route; мониторинг сетевых правил (tc) на аномальную активность; применение инструментов для обнаружения гонки состояний в ядре (например, KCSAN) в тестовых средах. В продакшене акцент делается на мониторинге стабильности ядра и сетевых правил.

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


Для проверки версии ядра используйте: uname -r, uname -a, cat /proc/version. Затем сверьте версию с официальными релизами дистрибутива или git-репозиторием Linux Kernel, чтобы убедиться, что патч (commit 47d7f7051253bdc02b1d245d87e38f16d31a74df и его порты в stable) присутствует в вашей версии. Если используется дистрибутив, проверьте наличие обновлений через пакетный менеджер.

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


Основной способ устранения — обновление ядра до версии, содержащей исправление. Патч был применён в стабильных ветках Linux Kernel в августе 2026 года. Для дистрибутивов: установите последние обновления ядра через пакетный менеджер. Для кастомных сборок: примените патч из git-репозитория Linux Kernel (commit 47d7f7051253bdc02b1d245d87e38f16d31a74df) и пересоберите ядро. После обновления перезагрузите систему для применения нового ядра.

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


Пока обновление не установлено, можно: ограничить доступ к управлению сетевыми фильтрами (cls_route) только для доверенных пользователей; отключить использование cls_route, если это возможно, переключившись на другие классификаторы; снизить частоту изменений сетевых правил, чтобы уменьшить вероятность гонки; использовать мониторинг для быстрого обнаружения падений ядра, связанных с этой уязвимостью. Эти меры не устраняют уязвимость, но снижают вероятность её эксплуатации.

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


После обновления ядра проверьте: версию ядра с помощью uname -r; наличие патча в исходном коде (если доступно) или в changelog дистрибутива; отсутствие сообщений KASAN slab-use-after-free в логах ядра после стресс-теста с cls_route. Проведите функциональное тестирование сетевых фильтров, чтобы убедиться, что они работают корректно после обновления.

Вывод​


CVE-2026-74583 представляет собой серьёзную уязвимость в Linux Kernel, требующую внимания администраторов систем, использующих cls_route. Несмотря на локальный вектор атаки, последствия могут быть критичными. Рекомендуется своевременно обновлять ядро и ограничивать доступ к сетевым фильтрам. Мониторинг логов ядра и сетевых правил поможет в раннем обнаружении аномалий.

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


  1. NVD — CVE-2026-74583
  2. FIRST EPSS — CVE-2026-74583
  3. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree
  4. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree
  5. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree
  6. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree
  7. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree
  8. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree
  9. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree
  10. net/sched: cls_route: fix fastmap use-after-free on filter - kernel/git/stable/linux.git - Linux kernel stable tree

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


  • 21.08.2026 — Опубликована первая версия материала.
  • 26.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ