CVE: CVE-2026-89783
Продукт: Linux Kernel
Дата публикации: 16.09.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,21%; процентиль 11,45%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В стеке IPv6 ядра Linux обнаружена ошибка out-of-bounds write в функции
xfrm6_input_addr(). Дефект возникает при обработке пакетов IPsec в транспортном режиме, если цепочка безопасности (secpath) уже заполнена до предела.Из-за некорректной проверки глубины атакующий может записать данные за пределы массива
xvec. Это приводит к повреждению памяти, панике ядра или потенциальному выполнению кода. Уязвимость эксплуатируется удаленно без аутентификации.Основные характеристики
Риск связан с нарушением целостности памяти в сетевом стеке ядра при обработке IPv6-трафика с IPsec. Ошибка позволяет удаленному отправителю пакетов повредить данные ядра, что ведет к отказу в обслуживании или эскалации привилегий.
- Класс ошибки: Out-of-bounds write (запись за пределы границ массива).
- 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.
- Вектор атаки: Сеть (Network), сложность низкая, привилегии не требуются.
- EPSS: 0,21% (процентиль 11,45%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
- Статус: Исправление внесено в mainline и стабильные ветки ядра.
Какие продукты и версии затронуты
Уязвимость затрагивает версии ядра Linux, в которых функция
xfrm6_input_addr() содержит дефектную проверку глубины secpath. Исправление портировано в mainline и несколько стабильных веток.- Mainline: Коммит
5d9e3bf34fec9a5d237e4b7cef4a707bc2e091bc(принят 13.07.2026).
- Stable-ветки: Портирование выполнено в коммитах
0f679e0523dd,48996649222e,5f35a29a5eed,68e8737fe8e7,8fe2c53fb81f,91fc387f63c0,bdcda866c89f.
Конкретные номера версий дистрибутивов (Debian, Ubuntu, RHEL) в предоставленных источниках не указаны. Для точного определения уязвимых сборок необходимо сверяться с базами данных безопасности вашего вендора.
Причина уязвимости
Причина дефекта — ошибка off-by-one в проверке глубины цепочки безопасности в
net/ipv6/xfrm6_input.c. Исходное условие if (1 + sp->len == XFRM_MAX_DEPTH) не учитывает случай, когда sp->len уже равен максимальному значению (6).В транспортном режиме IPsec функция
xfrm_trans_reinject() возвращает пакет в IPv6-стек, сохраняя заполненный secpath. Если внутренний пакет содержит HAO или routing header типа 2, вызывается xfrm6_input_addr(). Проверка (1 + 6 == 6) возвращает false, и код выполняет запись sp->xvec[sp->len++].Это приводит к записи в индекс 6 массива, размер которого 6 (допустимые индексы 0–5). Исправление заменяет условие на
if (sp->len >= XFRM_MAX_DEPTH), что соответствует логике в xfrm_input() и предотвращает выход за границы.Как работает атака
Эксплуатация происходит в стеке IPv6 при обработке пакетов IPsec в транспортном режиме. Атакующий отправляет пакет, который проходит через
xfrm_input(). Эта функция может завершить обработку с состоянием, где sp->len равен XFRM_MAX_DEPTH.Далее
xfrm_trans_reinject() возвращает пакет в IPv6-входной путь с сохраненным secpath. Если внутренний пакет содержит destination-options HAO или routing header типа 2, система вызывает xfrm6_input_addr(). Из-за дефекта проверка глубины не срабатывает, и функция выполняет запись указателя в sp->xvec[sp->len++].Запись происходит за пределы массива
xvec. Хотя данные остаются в пределах выделенной области sec_path (что делает сбой невидимым для KASAN), UBSAN_BOUNDS фиксирует нарушение. При включенном panic_on_warn это вызывает панику ядра.Условия успешной эксплуатации
Для успешной атаки необходимо соблюдение следующих условий:
- Сетевой доступ: Возможность отправлять IPv6-пакеты на целевой хост.
- Настройка IPsec: На цели должна быть активна обработка IPsec в транспортном режиме для IPv6.
- Заполнение secpath: Пакет должен быть сформирован так, чтобы
sp->lenдостигXFRM_MAX_DEPTHдо повторного входа в IPv6-стек.
- Специфичные заголовки: Внутренний пакет должен содержать HAO или routing header типа 2 для инициирования вызова уязвимой функции.
Аутентификация не требуется, так как уязвимость находится в сетевом стеке, обрабатывающем входящий трафик до этапа проверки подлинности.
Возможный сценарий атаки
Сценарий начинается с отправки IPv6-пакета, зашифрованного в транспортном режиме IPsec. Пакет проходит через
xfrm_input(), где формируется цепочка безопасности, достигающая максимальной глубины. Функция xfrm_trans_reinject() возвращает пакет в IPv6-стек с сохраненным secpath.При обработке внутреннего пакета, содержащего HAO или routing header, вызывается
xfrm6_input_addr(). Из-за ошибки в проверке глубина функция не отбрасывает пакет, а выполняет запись за пределы массива xvec. Это приводит к повреждению памяти.Последствия зависят от контекста: паника ядра (отказ в обслуживании) или, при контролируемом содержимом записи, выполнение кода в контексте ядра. Поскольку уязвимость находится в ядре, компрометация означает потерю целостности системы.
Есть ли публичный эксплойт
На момент публикации CVE-2026-89783 публичные данные о подтвержденной эксплуатации в реальных атаках отсутствуют. В каталоге CISA KEV уязвимость не значится.
Техническое описание атаки и патч доступны в репозитории ядра Linux. Это позволяет исследователям разработать Proof of Concept. Отсутствие сведений о массовой эксплуатации не означает невозможность создания эксплойта, учитывая простоту триггера и доступность исходного кода.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости в предоставленных источниках не описаны. Можно использовать следующие неспецифичные точки контроля:
- Паника ядра: Записи в
dmesgили системных журналах, содержащиеUBSAN: array-index-out-of-bounds in net/ipv6/xfrm6_input.c.
- Аномальный трафик: Потоки IPv6-трафика с IPsec в транспортном режиме, содержащие опции HAO или routing header, направленные на хосты с включенным IPsec.
- Сбой системы: Внезапные перезагрузки или зависания ядра, связанные с обработкой сетевого трафика.
Как обнаружить атаку
Для обнаружения атаки или эксплуатации уязвимости рекомендуется использовать следующие методы:
- Мониторинг логов ядра: Отслеживание сообщений UBSAN или KASAN, связанных с
net/ipv6/xfrm6_input.c. При включенномpanic_on_warnсистема может перезагрузиться, что также является индикатором.
- Сетевой анализ: Использование IDS/IPS для детектирования IPv6-пакетов с IPsec в транспортном режиме, содержащих подозрительные опции HAO или routing header.
- Проверка версии ядра: Регулярная сверка версии ядра с базой данных CVE для выявления уязвимых версий.
Поскольку уязвимость может приводить к панике ядра, мониторинг доступности хостов и логов ядра является важным элементом обнаружения.
Как проверить свою версию
Для проверки версии ядра Linux и определения, затронута ли система уязвимостью, используйте следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Полученную версию ядра необходимо сверить с официальными списками исправленных версий вашего дистрибутива. Если версия ядра старше коммитов, указанных в разделе «Какие продукты и версии затронуты», система уязвима. Для точной проверки рекомендуется использовать инструменты управления пакетами (например,
apt, yum, dnf) для просмотра доступных обновлений ядра.Исправление
Единственным надежным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление. Патч заменяет условие проверки глубины в
xfrm6_input_addr() на sp->len >= XFRM_MAX_DEPTH.- Обновление ядра: Используйте штатные средства обновления вашего дистрибутива (например,
apt upgrade,yum update,dnf update).
- Перезагрузка: После обновления ядра требуется перезагрузка системы для применения нового ядра.
- Проверка: После обновления убедитесь, что версия ядра соответствует исправленной, используя команды из раздела «Проверка версии».
Не откладывайте обновление, так как уязвимость имеет критический уровень опасности и может быть использована удаленно.
Временные меры защиты
Пока обновление ядра не установлено, можно рассмотреть следующие временные меры, хотя они не устраняют уязвимость полностью:
- Отключение IPsec в транспортном режиме: Если возможно, отключите обработку IPsec в транспортном режиме для IPv6 на уязвимых хостах.
- Фильтрация трафика: На сетевом уровне (межсетевом экране или маршрутизаторе) блокируйте IPv6-пакеты с опциями HAO или routing header, если они не используются в легитимном трафике.
- Ограничение доступа: Ограничьте доступ к хостам, использующим IPsec, только из доверенных сетей.
Эти меры снижают вероятность эксплуатации, но не заменяют обновление ядра.
Как проверить устранение уязвимости
Для подтверждения успешного исправления уязвимости выполните следующие шаги:
- Проверка версии ядра: Убедитесь, что система работает на обновленном ядре, используя
uname -r.
- Проверка наличия патча: В некоторых дистрибутивах можно проверить наличие конкретного коммита в ядре, если это поддерживается инструментами аудита.
- Функциональное тестирование: Проведите тестирование обработки IPv6-трафика с IPsec, чтобы убедиться, что система работает корректно и не испытывает сбоев.
- Мониторинг: Продолжайте мониторинг логов ядра на предмет сообщений UBSAN или KASAN, связанных с
xfrm6_input.c.
Если после обновления система стабильна и не фиксирует ошибок памяти, уязвимость считается устраненной.
Вывод
CVE-2026-89783 представляет собой критическую уязвимость в ядре Linux, связанную с out-of-bounds write в модуле xfrm6. Атака возможна удаленно и может привести к отказу в обслуживании или выполнению кода.
Исправление уже доступно в основных и стабильных ветках ядра. Администраторам рекомендуется срочно обновить ядро до исправленной версии и проверить, что обновление было применено корректно. Временные меры, такие как фильтрация трафика, могут снизить риск, но не заменяют обновление.
Официальные источники
- NVD — CVE-2026-89783
- FIRST EPSS — CVE-2026-89783
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
- xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 18.09.2026 — Опубликована первая версия материала.
