CVE: CVE-2026-97417
Продукт: Linux Kernel
Дата публикации: 24.09.2026
Критичность: HIGH
CVSS: 7.5 (3.1)
EPSS: нет данных; процентиль нет данных
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В Linux Kernel исправлена ошибка в функции tcp_sack() подсистемы nf_conntrack. Быстрый путь обработки timestamp-only опции обращался к потоку TCP-опций как к выровненному по 4 байта, тогда как спецификация TCP не гарантирует такое выравнивание. Исправление заменяет прямое указательное чтение на get_unaligned_be32(), что устраняет риск чтения за пределами ожидаемой структуры или некорректного интерпретирования данных при обработке сетевых пакетов.
Основные характеристики
Риск связан с необязательным выравниванием TCP-опций и прямым чтением 32-битного значения из произвольной позиции в потоке опций. При обработке определённых TCP-пакетов ядро могло читать данные не по ожидаемому формату, что приводило к нестабильному поведению ядра.
- Тип ошибки: некорректное обращение к памяти при чтении TCP-опций из-за отсутствия проверки выравнивания
- CVSS:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H— оценка 7.5, HIGH
- Вектор атаки: удалённый доступ к сетевому интерфейсу, без необходимости авторизации или взаимодействия пользователя
- Факт эксплуатации: в переданных источниках нет подтверждения реального массового использования или публичного эксплойта
- EPSS: данные отсутствуют; процентиль отсутствует
Какие продукты и версии затронуты
Затронут Linux Kernel с подсистемой netfilter/nf_conntrack и обработкой TCP SACK. Исправление входит в стабильные ветки ядра.
- Commit 4abc1af7ac209c066f4e5dd75cdd56876e5829a9 в stable-ветке
- Commit 7ecfa46a536578a7ed335ddf31a854127268c27c в stable-ветке
- Commit d3bf9eae486490832bd08fd62ab0ac601f346bd4 в upstream-ветке
Точный список версий дистрибутивов не раскрыт в переданных источниках. Для проверки актуальности ядра используйте команды из раздела «Проверка версии».
Причина уязвимости
Ошибка находится в функции tcp_sack() файла net/netfilter/nf_conntrack_proto_tcp.c.
Быстрый путь для timestamp-only опции проверял длину и содержимое опции через прямое указательное чтение:
C:
*(__be32 *)ptr == htonl(...)
Это выражение предполагает, что указатель ptr выровнен по 4 байта. TCP-опции в потоке не гарантируют такого выравнивания, поэтому чтение могло происходить из позиции, не соответствующей ожидаемой структуре.
Исправление заменяет прямое обращение на get_unaligned_be32(ptr), которое безопасно читает значение без требования выравнивания и возвращает данные в host byte order. Из-за этого вызов htonl() для константы сравнения больше не нужен.
Как работает атака
Атака реализуется через отправку TCP-пакетов с опциями, которые попадают в быстрый путь обработки timestamp-only опции в tcp_sack().
Путь данных выглядит так:
- Ядро получает TCP-пакет.
- Подсистема nf_conntrack обрабатывает TCP-опции.
- Функция tcp_sack() проверяет длину опции и содержимое timestamp-only блока.
- При выполнении условия length == TCPOLEN_TSTAMP_ALIGNED выполняется чтение 32-битного значения из ptr.
- Если выравнивание не соответствует ожиданиям, чтение может интерпретировать соседние байты как значение опции.
После сравнения с ожидаемой константой функция либо возвращает управление без дальнейшей обработки, либо переходит в обычный цикл обработки опций. Некорректное чтение само по себе не изменяет логику соединения, но нарушает предположение о структуре данных и может привести к непредсказуемому поведению ядра.
Исправление устраняет зависимость от выравнивания, заменяя прямое указательное чтение на безопасную функцию get_unaligned_be32().
Условия успешной эксплуатации
Для взаимодействия с уязвимым кодом необходимо:
- иметь возможность отправить TCP-пакеты в систему с установленным ядром Linux;
- чтобы подсистема nf_conntrack была активна и обрабатывала TCP-соединения;
- чтобы пакет содержал TCP-опции, попадающие в условие timestamp-only fast path.
Данные из источников не подтверждают необходимость локального доступа или специальных прав. Вектор CVSS указывает на удалённый доступ без авторизации: AV:N/AC:L/PR:N/UI:N/S:U.
Не раскрыто:
- конкретные версии ядра, где ошибка присутствует;
- точный набор пакетов, вызывающий сбой;
- наличие публичного эксплойта или PoC.
Отсутствие этих данных не означает, что эксплуатация невозможна. Для оценки актуальности проверяйте версию ядра и наличие исправления в стабильных ветках дистрибутива.
Возможный сценарий атаки
Сценарий описывает технический путь взаимодействия с уязвимым кодом.
Атакующий направляет TCP-пакет с опциями, где timestamp-only блок занимает ожидаемую длину. В tcp_sack() выполняется проверка длины и чтения 32-битного значения из ptr.
Если выравнивание ptr не соответствует 4 байтам, чтение может получить значение, отличное от ожидаемого константы. Это приводит к пропуску быстрого пути и переходу в обычный цикл обработки опций или к некорректной интерпретации данных.
В исходном коде исправление заменяет прямое указательное чтение на get_unaligned_be32(ptr). После этого значение читается независимо от выравнивания, а сравнение выполняется без htonl().
Последствия зависят от архитектуры и контекста чтения: возможны некорректные решения в обработке опций, нестабильность ядра или нарушение логики nf_conntrack. В переданных источниках нет подтверждения конкретных последствий для реальных систем.
Есть ли публичный эксплойт
В предоставленных источниках нет информации о публичном эксплойте, PoC или подтверждённой эксплуатации CVE-2026-97417.
Исправление опубликовано в стабильных ветках Linux Kernel:
- commit 4abc1af7ac209c066f4e5dd75cdd56876e5829a9
- commit 7ecfa46a536578a7ed335ddf31a854127268c27c
- commit d3bf9eae486490832bd08fd62ab0ac601f346bd4
Отсутствие публичного эксплойта в источниках не означает, что эксплуатация невозможна. Для оценки риска проверяйте версию ядра и наличие исправления в дистрибутиве.
Признаки эксплуатации
Специфичные индикаторы компрометации для CVE-2026-97417 не раскрыты в предоставленных источниках.
Неспецифичные точки контроля:
- аномальные сетевые соединения с TCP-опциями, особенно timestamp-only блоками;
- неожиданные сбои или зависания ядра при высокой нагрузке на nf_conntrack;
- рост количества ошибок в журналах netfilter и conntrack;
- некорректные значения в статистике TCP SACK;
- аномальные задержки обработки пакетов с опциями.
Эти признаки не являются подтверждёнными IOC для данной уязвимости. Они подходят только для общей диагностики сетевых проблем и стабильности ядра.
Как обнаружить атаку
Для обнаружения потенциального воздействия на систему используйте:
- мониторинг журналов ядра на ошибки в netfilter, nf_conntrack и TCP;
- анализ сетевых логов на аномальные TCP-опции с timestamp-only блоками;
- проверку стабильности conntrack при нагрузке с опциями;
- сравнение версии ядра с наличием исправления.
Команды проверки:
Bash:
uname -r
uname -a
cat /proc/version
Для поиска ошибок в логах можно использовать стандартные утилиты: dmesg, journalctl. Конкретные шаблоны правил не раскрыты в источниках.
Как проверить свою версию
Проверьте версию ядра с помощью:
Bash:
uname -r
uname -a
cat /proc/version
Команды показывают текущую версию ядра и параметры сборки. Для проверки наличия исправления в дистрибутиве используйте пакетные менеджеры.
Пример для Debian/Ubuntu:
Bash:
apt list --installed 2>/dev/null | grep linux-image
apt-cache policy linux-image-generic
Пример для RHEL/CentOS:
Bash:
rpm -qa | grep kernel-core
yum list installed kernel-core
Замените имя пакета на актуальный пакет ядра вашего дистрибутива. Точные номера версий с исправлением не раскрыты в предоставленных источниках.
Исправление
Основное исправление — обновление Linux Kernel до версии, содержащей commit d3bf9eae486490832bd08fd62ab0ac601f346bd4 или стабильные ветки с ним.
- commit 4abc1af7ac209c066f4e5dd75cdd56876e5829a9
- commit 7ecfa46a536578a7ed335ddf31a854127268c27c
- commit d3bf9eae486490832bd08fd62ab0ac601f346bd4
Для дистрибутивов:
- установите обновлённый пакет ядра из официального репозитория;
- перезагрузите систему после обновления;
- проверьте версию ядра командой uname -r.
Точные номера версий пакетов не раскрыты в предоставленных источниках. Используйте официальные каналы дистрибутива для получения актуальной информации об обновлениях.
Временные меры защиты
Пока обновление ядра недоступно, можно снизить вероятность воздействия:
- ограничить входной трафик с TCP-опциями на уровне сетевого фильтра;
- отключить nf_conntrack, если это допустимо для архитектуры сети;
- использовать NAT или прокси, которые нормализуют TCP-опции перед передачей в ядро;
- снизить нагрузку на conntrack и ограничить количество одновременных соединений.
Эти меры не устраняют уязвимость. Они только уменьшают вероятность попадания в уязвимый код. Для полного исправления требуется обновление ядра.
Как проверить устранение уязвимости
После обновления проверьте:
Bash:
uname -r
uname -a
cat /proc/version
Убедитесь, что версия ядра соответствует обновлённой версии дистрибутива.
Проверьте наличие ошибок в логах:
Bash:
dmesg | grep -i conntrack
dmesg | grep -i tcp
journalctl -k | grep -i conntrack
Если ошибки прекратились и версия ядра обновлена, исправление применено. Для подтверждения наличия конкретного commit в ядре можно использовать:
Bash:
git log --oneline | grep d3bf9eae486490832bd08fd62ab0ac601f346bd4
Команда применима, если исходники ядра доступны локально.
Вывод
CVE-2026-97417 — ошибка в Linux Kernel, связанная с некорректным чтением TCP-опций в функции tcp_sack(). Исправление заменяет прямое указательное чтение на get_unaligned_be32(), устраняя зависимость от выравнивания.
Обновление ядра до версии с commit d3bf9eae486490832bd08fd62ab0ac601f346bd4 является основным способом устранения риска. До обновления используйте меры снижения нагрузки на nf_conntrack и мониторинг сетевых логов.
Отсутствие данных о публичном эксплойте не означает отсутствие риска. Проверьте версию ядра и наличие исправления в вашем дистрибутиве.
Официальные источники
- NVD — CVE-2026-97417
- netfilter: nf_conntrack: use get_unaligned_be32() in tcp_sack() - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nf_conntrack: use get_unaligned_be32() in tcp_sack() - kernel/git/stable/linux.git - Linux kernel stable tree
- netfilter: nf_conntrack: use get_unaligned_be32() in tcp_sack() - kernel/git/stable/linux.git - Linux kernel stable tree
- CVEs — The Linux Kernel documentation
История обновлений статьи
- 29.09.2026 — Опубликована первая версия материала.
