CVE-2026-80603 в Linux Kernel: off-by-one в nf_conntrack_irc и защита

CVE: CVE-2026-80603
Продукт: Linux Kernel
Дата публикации: 28.08.2026
Критичность: CRITICAL
CVSS: 9.1 (3.1)
EPSS: 0,43%; процентиль 35,45%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В модуле netfilter Linux Kernel обнаружена уязвимость, позволяющая читать байт за границей буфера при обработке IRC-трафика. Это приводит к формированию некорректных conntrack-записей. Статья описывает механику ошибки, условия эксплуатации и способы проверки исправления.

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


Уязвимость позволяет нарушителю повлиять на логику отслеживания соединений, читая неинициализированные данные. Риск реализуется при обработке специально сформированного сетевого трафика.

  • Тип ошибки: Off-by-one out-of-bounds read (чтение за границей буфера).
  • CVSS 3.1: 9.1 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N.
  • Условия атаки: Удаленный доступ, отсутствие необходимости в привилегиях или взаимодействии пользователя.
  • Эксплуатация: Публичные данные о подтвержденной эксплуатации в реальных атаках отсутствуют.
  • EPSS: 0,43% (вероятность эксплуатации в ближайшие 30 дней).

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


Уязвимость затрагивает ядра Linux, в которых включен модуль nf_conntrack_irc. Ошибка присутствовала с версии 2.6.12-rc2 и была исправлена в стабильных ветках ядра.

  • Компонент: net/netfilter/nf_conntrack_irc.c.
  • Функция: parse_dcc().
  • Версии: Все ядра, не содержащие патч ef6400ca25a13fd6dedbe8ef4a1d0979bbbfe88a.
  • Особенность: Проблема проявляется только при активном парсинге DCC-команд в IRC-трафике.

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


Причина ошибки заключается в несовпадении конвенций обработки указателей в функции parse_dcc(). Функция ожидает, что параметр data_end указывает на последний валидный байт данных.

Однако единственный вызывающий код передает data_limit = ib_ptr + datalen, что указывает на позицию сразу после последнего валидного байта. В результате цикл поиска символа новой строки использует условие tmp <= data_end.

Если в данных отсутствует символ \n, цикл доходит до tmp == data_end и выполняет чтение *tmp. Это приводит к обращению к памяти за пределами области, заполненной функцией skb_header_pointer().

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


Атакующий отправляет в систему пакет IRC-трафика, содержащий DCC-команду без завершающего символа новой строки. Модуль nf_conntrack_irc перехватывает пакет и передает данные в parse_dcc().

Из-за off-by-one ошибки функция читает байт, расположенный за пределами валидных данных. Этот байт может содержать случайные или устаревшие данные из памяти. Если прочитанный байт является ASCII-цифрой, функция simple_strtoul интерпретирует его как часть IP-адреса или порта.

В результате в таблице conntrack формируется запись с некорректными параметрами. Это может привести к блокировке легитимного трафика или, в худшем случае, к обходу правил фильтрации.

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


Для успешной эксплуатации уязвимости необходимо соблюдение следующих условий:

  • В ядре Linux должен быть загружен и активен модуль nf_conntrack_irc.
  • Система должна обрабатывать входящий IRC-трафик, проходящий через netfilter.
  • Атакующий должен иметь возможность отправлять пакеты в систему (удаленный доступ).
  • В пакете должна отсутствовать завершающая DCC-команду строка, чтобы спровоцировать выход за границы буфера.

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


Сценарий атаки начинается с отправки специально сформированного IRC-сообщения. Сообщение содержит DCC-команду, которая не завершается символом \n в пределах переданных данных.

Модуль netfilter обрабатывает пакет и вызывает parse_dcc(). Функция ищет символ новой строки, но не находит его в валидной области. Цикл продолжает работу и читает байт за границей буфера.

Если этот байт содержит цифру, simple_strtoul формирует некорректный IP или порт. Conntrack-запись создается с этими параметрами. Атакующий может использовать это для манипуляции с правилами фильтрации или отслеживания соединений.

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


На момент публикации CVE-2026-80603 публичные эксплойты или подтвержденные случаи эксплуатации в реальных атаках не зафиксированы. Ошибка была исправлена в ядре Linux, что снижает вероятность массового использования.

Отсутствие публичного эксплойта не означает, что уязвимость не может быть использована. Техническое описание ошибки и патч позволяют разработать эксплойт, но для этого требуется контроль над IRC-трафиком, проходящим через уязвимую систему.

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


Специфичные индикаторы компрометации (IOC) для CVE-2026-80603 в доступных источниках не описаны. Для обнаружения атаки можно использовать следующие неспецифичные методы контроля:

  • Мониторинг логов netfilter на наличие некорректных conntrack-записей.
  • Анализ IRC-трафика на предмет DCC-команд без завершающих символов.
  • Проверка целостности правил фильтрации на предмет неочевидных изменений.
  • Контроль за аномальным поведением модуля nf_conntrack_irc в логах ядра.

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


Для обнаружения атаки рекомендуется использовать следующие методы:

  • Логи netfilter: Ищите записи conntrack с некорректными IP-адресами или портами, которые не соответствуют ожидаемому трафику.
  • Анализ трафика: Используйте инструменты для перехвата и анализа IRC-трафика, чтобы выявить DCC-команды без завершающих символов.
  • Мониторинг ядра: Следите за сообщениями об ошибках или предупреждениями, связанными с модулем nf_conntrack_irc.
  • Аудит правил: Регулярно проверяйте правила iptables/nftables на предмет неочевидных изменений, которые могли быть вызваны некорректными conntrack-записями.

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


Для проверки версии ядра и наличия уязвимости используйте следующие команды:

Bash:
uname -r
uname -a
cat /proc/version

Сравните полученную версию с списком исправленных версий в официальных источниках. Если ядро не содержит патч ef6400ca25a13fd6dedbe8ef4a1d0979bbbfe88a, система уязвима.

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


Для устранения уязвимости необходимо обновить ядро Linux до версии, содержащей патч ef6400ca25a13fd6dedbe8ef4a1d0979bbbfe88a. Патч изменяет условие цикла в parse_dcc() с tmp <= data_end на tmp < data_end.

  • Обновление ядра: Используйте пакетный менеджер вашей дистрибутива для обновления ядра.
  • Проверка патча: Убедитесь, что в исходном коде ядра применены изменения из патча.
  • Перезагрузка: После обновления ядра выполните перезагрузку системы для применения изменений.

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


Пока обновление ядра не выполнено, можно использовать следующие временные меры:

  • Отключение модуля: Если возможно, отключите модуль nf_conntrack_irc с помощью modprobe -r nf_conntrack_irc.
  • Фильтрация трафика: Настройте правила iptables/nftables для блокировки IRC-трафика, если он не является критическим для работы системы.
  • Мониторинг: Усиленный мониторинг conntrack-записей для выявления некорректных данных.
  • Изоляция: Ограничьте доступ к системе из внешних сетей, если это допустимо.

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


Для проверки успешного устранения уязвимости выполните следующие шаги:

  • Проверка версии: Убедитесь, что версия ядра содержит патч ef6400ca25a13fd6dedbe8ef4a1d0979bbbfe88a.
  • Тестирование: Отправьте тестовый IRC-трафик с DCC-командой без завершающего символа и проверьте, что conntrack-записи формируются корректно.
  • Аудит логов: Проверьте логи netfilter на наличие ошибок или предупреждений, связанных с nf_conntrack_irc.
  • Проверка правил: Убедитесь, что правила фильтрации не были изменены некорректными conntrack-записями.

Вывод​


CVE-2026-80603 представляет собой серьезную уязвимость в модуле netfilter Linux Kernel, позволяющую нарушителю манипулировать conntrack-записями через off-by-one ошибку. Обновление ядра до версии с патчем ef6400ca25a13fd6dedbe8ef4a1d0979bbbfe88a является основным способом устранения риска. Временные меры включают отключение модуля и усиленный мониторинг.

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


  1. NVD — CVE-2026-80603
  2. FIRST EPSS — CVE-2026-80603
  3. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree
  4. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree
  5. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree
  6. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree
  7. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree
  8. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree
  9. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree
  10. netfilter: nf_conntrack_irc: fix parse_dcc() off-by-one OOB read - kernel/git/stable/linux.git - Linux kernel stable tree

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


  • 02.09.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ