CVE: CVE-2026-80916
Продукт: Linux Kernel
Дата публикации: 09.09.2026
Критичность: не определена
CVSS: нет данных
EPSS: 0,18%; процентиль 7,83%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В подсистеме KCOV ядра Linux устранена уязвимость, приводящая к повреждению данных и гонкам на ядрах с PREEMPT_RT. Проблема возникает при вложенной прерываемости softirq-тредов, что может привести к потере состояния KCOV, выходу за границы буфера и утечке памяти. Статья разбирает механику сбоя, условия эксплуатации и способы проверки исправления.
Основные характеристики
Уязвимость затрагивает подсистему сбора покрытия кода (KCOV) в ядре Linux. Риск реализуется только на ядрах, собранных с опцией PREEMPT_RT, где softirq-обработчики выполняются как прерываемые потоки. При вложенном прерывании потоков происходит перезапись общего per-CPU буфера, что приводит к потере данных и потенциальному повреждению памяти.
- Тип ошибки: Race condition и data corruption. Официальные CWE-идентификаторы в NVD не присвоены.
- CVSS: Официальная оценка NVD не присвоена (данные отсутствуют).
- Условия атаки: Требуется ядро с PREEMPT_RT и активная сессия remote KCOV.
- Факт эксплуатации: Подтверждено фаззингом (syzbot), подтвержденная эксплуатация в реальных атаках не зафиксирована.
- EPSS: 0,18% (процентиль 7,83%), что указывает на низкую вероятность эксплуатации в ближайшем будущем.
Какие продукты и версии затронуты
Уязвимость затрагивает подсистему
kernel/kcov.c в ядре Linux. Проблема проявляется исключительно в конфигурациях с включенной опцией CONFIG_PREEMPT_RT.- Версии ядра: Исправление внесено в ветки stable (5.15, 6.1, 6.6, 6.12 и другие). Точные номера версий, в которых отсутствует патч, необходимо сверять с официальными релизами дистрибутива.
- Компоненты:
include/linux/sched.h,kernel/kcov.c,lib/Kconfig.debug.
- Опции сборки:
CONFIG_KCOV,CONFIG_PREEMPT_RT.
Причина уязвимости
Причина кроется в использовании per-CPU области памяти для временного хранения состояния KCOV при переходе в контекст softirq. В ядрах PREEMPT_RT softirq-обработчики (например,
ksoftirqd) выполняются как обычные прерываемые потоки.Когда softirq-поток прерывает задачу, работающую с remote KCOV, состояние задачи сохраняется в per-CPU буфер. Если этот softirq-поток, в свою очередь, прерывается другим softirq-потоком более высокого приоритета на том же CPU, второй поток перезаписывает тот же per-CPU буфер. Это приводит к безвозвратной потере исходного состояния KCOV.
Дополнительная проблема возникает при неудачном выделении памяти в
kcov_init(). Если vmalloc_node() возвращает NULL, переменная irq_area остается NULL, но kcov_remote_start() ожидает ее ненулевое значение, что ведет к выделению памяти в недопустимом контексте и выходу за границы массива.Как работает атака
Атака эксплуатирует гонку условий при вложенном прерывании потоков. Атакующий должен иметь возможность запускать процессы с активированным KCOV (например, через
prctl или ioctl), чтобы инициировать remote-сессию.- Запускается процесс с активной сессией remote KCOV.
- На том же CPU срабатывает softirq, который прерывает выполнение задачи.
- Softirq-поток сохраняет состояние KCOV задачи в per-CPU буфер.
- До завершения первого softirq срабатывает второй softirq более высокого приоритета.
- Второй softirq перезаписывает per-CPU буфер, уничтожая сохраненное состояние.
В результате при возврате управления первому softirq или задаче происходит обращение к поврежденным данным. Это может привести к записи за пределы выделенного буфера (out-of-bounds write) или утечке памяти, что в худшем случае позволяет атакующему повредить структуры ядра и получить повышение привилегий.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости необходимо соблюдение ряда строгих условий:
- Ядро с PREEMPT_RT: Уязвимость проявляется только в ядрах, собранных с опцией
CONFIG_PREEMPT_RT.
- Включенный KCOV: Подсистема KCOV должна быть скомпилирована в ядро (
CONFIG_KCOV=yилиm).
- Права на запуск KCOV: Атакующий должен иметь возможность создавать процессы и настраивать KCOV (обычно требуется
CAP_SYS_ADMINили соответствующие права на использованиеprctl/ioctl).
- Специфичная загрузка CPU: Необходимо, чтобы два softirq-потока с разной приоритетностью были запланированы на одном CPU в момент, когда первый из них прерывает задачу с KCOV.
Возможный сценарий атаки
Сценарий атаки предполагает, что атакующий имеет доступ к запуску процессов на целевой системе. Он запускает процесс, который инициализирует сессию remote KCOV. В этот момент на том же CPU происходит срабатывание softirq (например, обработка сетевого пакета или таймера).
Softirq-поток
ksoftirqd прерывает выполнение задачи и сохраняет состояние KCOV в per-CPU буфер. Если в этот момент срабатывает другой softirq более высокого приоритета, он также обращается к тому же per-CPU буферу. Поскольку буфер общий для всех потоков на CPU, данные первого softirq перезаписываются.Когда первый softirq пытается восстановить состояние, он работает с поврежденными данными, что приводит к некорректной записи в память ядра. Это может вызвать сбой ядра (panic) или, при удачном стечении обстоятельств, позволить атакующему контролировать указатели и выполнить код в контексте ядра.
Есть ли публичный эксплойт
Публичный эксплойт в виде готового PoC для эксплуатации в реальных атаках не опубликован. Однако уязвимость была обнаружена и подтверждена фаззинг-инструментом syzbot, который предоставил отчеты о повреждении состояния KCOV.
- PoC: Существуют отчеты syzbot, демонстрирующие воспроизводимость сбоя (data corruption).
- Техническое описание: Полное описание механики и патч доступны в официальных коммитах ядра Linux.
- Эксплуатация: Подтвержденная эксплуатация в реальных атаках (in-the-wild) не зафиксирована. EPSS-оценка (0,18%) указывает на низкую вероятность массового использования.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости не опубликованы. Однако можно использовать следующие неспецифичные признаки, которые требуют дополнительной проверки:
- Сбои ядра: Записи в
dmesgилиjournalctlоkernel panic,BUG: unable to handle page faultилиgeneral protection faultв функцияхkcov_*.
- Аномальная активность KCOV: Необычное количество процессов, использующих
prctl(PR_SET_KCOV)илиioctl(KCOV_ENABLE), особенно в сочетании с высокой нагрузкой на CPU.
- Утечки памяти: Рост потребления памяти ядром без видимой причины, что может указывать на утечки, описанные в патче.
Как обнаружить атаку
Для обнаружения потенциальной эксплуатации или наличия уязвимости рекомендуется использовать следующие методы:
- Проверка версии ядра: Убедитесь, что ядро содержит патч
2eed77fdcb0cc48e8eccb2bcd4b7f2c6d650e84cили его backport в вашу ветку.
- Мониторинг логов: Настройте сбор и анализ логов ядра на предмет ошибок, связанных с KCOV или softirq.
- Аудит конфигурации: Проверьте, включена ли опция
CONFIG_PREEMPT_RTиCONFIG_KCOVв вашей сборке ядра. Если KCOV не используется, его можно отключить для снижения поверхности атаки.
Как проверить свою версию
Для проверки версии ядра и наличия патча используйте следующие команды:
Bash:
# Проверка версии ядра
uname -r
uname -a
# Проверка конфигурации ядра (если доступен /boot/config-<версия>)
grep -E "CONFIG_PREEMPT_RT|CONFIG_KCOV" /boot/config-$(uname -r)
# Проверка наличия патча в исходниках (если доступен git-репозиторий)
git log --oneline | grep "2eed77fdcb0cc48e8eccb2bcd4b7f2c6d650e84c"
Если вы используете дистрибутив, проверьте наличие обновлений через пакетный менеджер (например,
apt list --upgradable | grep linux или dnf check-update | grep kernel).Исправление
Единственным надежным способом устранения уязвимости является обновление ядра до версии, содержащей патч
2eed77fdcb0cc48e8eccb2bcd4b7f2c6d650e84c.- Обновление ядра: Установите последние доступные обновления ядра от вашего дистрибутива.
- Пересборка ядра: Если вы используете кастомную сборку, примените патч из официального репозитория Linux kernel и пересоберите ядро.
- Отключение KCOV: Если функциональность KCOV не требуется, отключите
CONFIG_KCOVпри сборке ядра. Это полностью устранит поверхность атаки, связанную с этой подсистемой.
Временные меры защиты
Пока обновление ядра не установлено, можно применить следующие временные меры:
- Отключение KCOV: Если возможно, отключите использование KCOV в приложениях или отключите
CONFIG_KCOVв ядре (требует пересборки).
- Ограничение доступа: Ограничьте возможность запуска процессов с правами, необходимыми для инициализации KCOV, до доверенных пользователей.
- Мониторинг: Усиленный мониторинг логов ядра на предмет аномальных сбоев, связанных с KCOV или softirq.
Как проверить устранение уязвимости
Для проверки успешного применения исправления выполните следующие шаги:
- Проверка версии: Убедитесь, что версия ядра соответствует версии, содержащей патч.
- Проверка конфигурации: Если KCOV отключен, убедитесь, что
CONFIG_KCOVне включен в конфигурации ядра.
- Функциональное тестирование: Запустите процессы с активированным KCOV и убедитесь, что они работают без сбоев. Если уязвимость была, при вложенном прерывании softirq могли наблюдаться ошибки, которые теперь должны отсутствовать.
- Проверка логов: Убедитесь, что в
dmesgилиjournalctlотсутствуют новые записи об ошибках, связанных с KCOV.
Вывод
CVE-2026-80916 представляет собой серьезную уязвимость в подсистеме KCOV ядра Linux, затрагивающую конфигурации с PREEMPT_RT. Хотя вероятность массовой эксплуатации пока низка, потенциальные последствия (повреждение памяти, повышение привилегий) делают обновление ядра приоритетной задачей. Администраторам рекомендуется проверить наличие патча в своих системах и, при необходимости, отключить KCOV, если он не используется.
Официальные источники
- NVD — CVE-2026-80916
- FIRST EPSS — CVE-2026-80916
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
- kcov: fix data corruption and race conditions on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 12.09.2026 — Опубликована первая версия материала.
