CVE: CVE-2026-89643
Продукт: Linux Kernel
Дата публикации: 11.09.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,63%; процентиль 48,11%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В подсистеме аудита ядра Linux обнаружена ошибка управления ссылками, приводящая к освобождению памяти, на которую всё ещё ссылаются активные правила. Ошибка срабатывает при автоматическом удалении правил, комбинирующих отслеживание каталогов и исполняемых файлов. Статья описывает механику дефекта, условия его проявления и способы проверки наличия исправления в ядре.
Основные характеристики
Риск связан с нарушением жизненного цикла структуры данных в ядре, что может привести к падению системы или выполнению кода в привилегированном контексте при определённых условиях конфигурации аудита.
- Тип дефекта: Use-after-free в функции
audit_del_rule()при обработке событий fsnotify.
- 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.
- Триггер: События файловой системы, вызывающие автоматическое удаление правил с комбинацией
AUDIT_DIRиAUDIT_EXE.
- EPSS: 0,63% (процентиль 48,11%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
- Статус: Публичные эксплойты и подтверждённые атаки в реальных инцидентах на момент публикации не зафиксированы.
Какие продукты и версии затронуты
Уязвимость затрагивает ядра Linux, в которых реализована подсистема аудита с поддержкой правил, комбинирующих отслеживание каталогов и исполняемых файлов.
- Исходный код: Файл
kernel/auditfilter.c.
- Условие уязвимости: Наличие в ядре коммита
34d99af52ad4("audit: implement audit by executable") и отсутствие исправляющего коммита783f0f0974c156aca630f4ffff248671082a098d.
- Дистрибутивы: Конкретные версии пакетов для Debian, Ubuntu, RHEL и других дистрибутивов в предоставленных источниках не указаны. Администраторам необходимо сверяться с официальными базами данных безопасности своих поставщиков.
Причина уязвимости
Ошибка заключается в некорректном управлении счётчиком ссылок на структуру
audit_tree в функции audit_del_rule().Функция используется в двух сценариях: для удаления правил по запросу из netlink (где передаётся временный шаблон) и для автоматического удаления при событиях fsnotify (где передаётся сама установленная запись). В конце функции безоговорочно вызывается
audit_put_tree(), что корректно для первого сценария, но ошибочно для второго.При обработке событий fsnotify для правил, содержащих как
AUDIT_DIR, так и AUDIT_EXE, функция освобождает активную ссылку на дерево, которое всё ещё используется другими правилами. Повторное срабатывание этого механизма приводит к освобождению памяти, на которую ссылаются другие активные правила, создавая условие для use-after-free.Как работает атака
Атакующий должен иметь возможность влиять на создание или удаление правил аудита, либо спровоцировать события файловой системы, которые приведут к автоматическому удалению правил.
Механизм строится на следующем: при наличии нескольких правил, разделяющих одну и ту же структуру
audit_tree, срабатывание события fsnotify для одного из правил вызывает audit_del_rule(). Из-за ошибки функция освобождает ссылку на дерево, хотя другие правила всё ещё на него ссылаются. Это приводит к освобождению памяти при наличии живых указателей.При последующем срабатывании autoremove для другого правила система пытается сравнить правила, обращаясь к уже освобождённой памяти (pathname). Это приводит к чтению или записи в невалидную область памяти, что может вызвать панику ядра или быть использовано для выполнения кода в контексте ядра.
Условия успешной эксплуатации
Для успешной эксплуатации необходимо соблюдение следующих условий:
- Подсистема аудита: В ядре должна быть включена и активно использоваться подсистема audit.
- Специфичные правила: Должны быть установлены правила, комбинирующие флаги
AUDIT_DIRиAUDIT_EXE.
- Общее дерево: Несколько правил должны разделять одну и ту же структуру
audit_tree(например, отслеживать разные исполняемые файлы в одном каталоге).
- События fsnotify: Должно произойти событие файловой системы, триггерящее механизм autoremove для одного из таких правил.
- Доступ к ядру: Атакующий должен иметь возможность инициировать события файловой системы или управлять правилами аудита.
Возможный сценарий атаки
Сценарий начинается с настройки правил аудита, которые отслеживают выполнение определённых бинарников в конкретном каталоге. Такие правила используют комбинацию
AUDIT_DIR и AUDIT_EXE и разделяют общую структуру дерева.Затем атакующий инициирует действие в файловой системе (например, удаление или переименование файла), которое приводит к срабатыванию механизма autoremove для одного из правил. В этот момент функция
audit_del_rule() ошибочно освобождает ссылку на общее дерево, хотя другие правила всё ещё на него ссылаются.При следующем срабатывании autoremove для другого правила система обращается к освобождённой памяти при сравнении правил. Это приводит к use-after-free, что может вызвать отказ в обслуживании или, при точном контроле над выделением памяти, к выполнению произвольного кода в контексте ядра.
Есть ли публичный эксплойт
На момент публикации CVE-2026-89643 публичные эксплойты в открытом доступе не зафиксированы. В каталоге CISA KEV уязвимость не числится как активно эксплуатируемая.
- PoC: Публичные proof-of-concept коды в предоставленных источниках не указаны.
- Эксплуатация: Подтверждённые случаи эксплуатации в реальных атаках отсутствуют.
- Риск: Несмотря на отсутствие публичных эксплойтов, критический уровень CVSS и сложность механики делают уязвимость потенциально опасной для целевых атак.
Признаки эксплуатации
Специфичные индикаторы компрометации для CVE-2026-89643 в предоставленных источниках не описаны. Ниже приведены общие точки контроля, которые могут указывать на аномальную активность:
- Аномальные события fsnotify: Частые или необычные события удаления/переименования файлов в каталогах, отслеживаемых правилами аудита.
- Паника ядра: Записи в
dmesgили системных журналах о kernel panic или segfault в контексте функцийaudit_del_ruleилиaudit_rule_change.
- Изменение правил аудита: Непредусмотренное добавление или удаление правил, особенно тех, что комбинируют
AUDIT_DIRиAUDIT_EXE.
- Аномальная активность процессов: Необычное поведение процессов, которые могут инициировать события файловой системы для триггера autoremove.
Как обнаружить атаку
Для обнаружения признаков эксплуатации или аномальной активности рекомендуется использовать следующие методы:
- Мониторинг журналов: Анализ
dmesgиjournalctlна наличие сообщений об ошибках в ядре, связанных сauditилиfsnotify.
- Аудит правил: Регулярная проверка установленных правил с помощью
auditctl -lдля выявления подозрительных комбинаций флагов.
- События файловой системы: Мониторинг событий fsnotify в каталогах, где настроен аудит, на предмет аномальной активности.
- Системные вызовы: Использование eBPF или audit-правил для отслеживания вызовов, которые могут привести к срабатыванию autoremove.
Как проверить свою версию
Для проверки версии ядра и наличия уязвимости используйте следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Полученную версию ядра необходимо сверить с официальными базами данных безопасности вашего дистрибутива. Если версия ядра содержит коммит
34d99af52ad4 и не содержит исправляющий коммит 783f0f0974c156aca630f4ffff248671082a098d, система уязвима.Для проверки наличия конкретного коммита в исходном коде ядра (если вы компилируете ядро самостоятельно) можно использовать:
Bash:
git log --oneline | grep 783f0f0974c156aca630f4ffff248671082a098d
Если коммит отсутствует, ядро уязвимо.
Исправление
Единственным надёжным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправляющий коммит
783f0f0974c156aca630f4ffff248671082a098d.- Обновление ядра: Используйте штатные механизмы обновления вашего дистрибутива (например,
apt,yum,dnf) для установки обновлённого ядра.
- Перезагрузка: После установки обновлённого ядра выполните перезагрузку системы для его активации.
- Проверка: После обновления убедитесь, что новая версия ядра активна с помощью
uname -r.
Если обновление ядра невозможно в краткосрочной перспективе, рассмотрите временные меры митигации, описанные ниже.
Временные меры защиты
Пока обновление ядра недоступно, можно применить следующие временные меры для снижения риска:
- Отключение аудита: Если подсистема аудита не критична для работы, отключите её с помощью
auditctl -e 0или отключите модуль audit при загрузке ядра.
- Удаление проблемных правил: Удалите правила аудита, которые комбинируют
AUDIT_DIRиAUDIT_EXEи разделяют общее дерево. Используйтеauditctl -Dдля удаления всех правил илиauditctl -dдля удаления конкретных.
- Ограничение доступа: Ограничьте доступ к интерфейсам аудита (netlink) для непривилегированных пользователей и процессов.
- Мониторинг: Усиленный мониторинг событий файловой системы в каталогах, где настроен аудит, для раннего обнаружения аномальной активности.
Как проверить устранение уязвимости
Для проверки успешного применения исправления выполните следующие шаги:
- Проверка версии ядра: Убедитесь, что активная версия ядра содержит исправление.
Bash:
uname -r
- Проверка коммита: Если вы компилируете ядро самостоятельно, проверьте наличие исправляющего коммита.
Bash:
git log --oneline | grep 783f0f0974c156aca630f4ffff248671082a098d
- Функциональное тестирование: Создайте тестовые правила аудита с комбинацией
AUDIT_DIRиAUDIT_EXE, инициируйте события fsnotify и убедитесь, что система не падает и правила корректно удаляются.
- Мониторинг: После обновления продолжайте мониторинг журналов на наличие аномалий в подсистеме аудита.
Вывод
CVE-2026-89643 представляет собой критическую уязвимость в подсистеме аудита Linux, способную привести к отказу в обслуживании или повышению привилегий.
Несмотря на отсутствие публичных эксплойтов, администраторам рекомендуется как можно скорее обновить ядро до исправленной версии. Если обновление невозможно, следует применить временные меры митигации, такие как отключение аудита или удаление проблемных правил.
Регулярный мониторинг и проверка версий ядра помогут снизить риск эксплуатации этой уязвимости.
Официальные источники
- NVD — CVE-2026-89643
- FIRST EPSS — CVE-2026-89643
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
- audit: avoid dropping live tree ref on fsnotify rule autoremove - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 15.09.2026 — Опубликована первая версия материала.
