CVE-2026-98432: временный фильтр на 26 серверах

—

от автора

Временная защита: окна, закрытые досками

Временная мера против CVE-2026-98432 уже развернута на 26 серверах. Ниже — порядок применения nftables-фильтра: от проверки пакета ядра до отката и загрузки правила после перезапуска.

Команды рассчитаны на Ubuntu с nftables и systemd, для входящего трафика самого хоста. Для трафика, пересылаемого контейнерам или другим узлам, нужно отдельно выбрать цепочку фильтрации.

1. Проверьте статус исправления

Узнайте запущенное ядро:

uname -r

На странице Canonical найдите свой релиз и пакет ядра. Work in progress означает, что исправление готовится; указанная рядом версия — плановая, пакет еще не выпущен.

Если исправление уже доступно для вашей ветки, запланируйте обновление и загрузку в исправленное ядро. Временный фильтр нужен на период ожидания. Red Hat предлагает отбрасывать IPv4 TCP-пакеты с IP-options: это снижает экспозицию, но не заменяет исправление ядра.

2. Подготовьте один сервер и откат

Начните с одного узла. Сохраните действующие правила и подготовьте доступ к консоли хостера на случай потери SSH.

Посмотрите текущую конфигурацию:

(umask 077; sudo nft list ruleset > "$HOME/nft-before.txt")sudo nft list table inet cve_2026_98432

Ошибка об отсутствии таблицы на этом шаге ожидаема. Если таблица cve_2026_98432 уже существует, сначала разберитесь, кто ее установил. Повторно создавать ее и удалять чужое правило не нужно.

Подготовьте команду отката; выполняйте ее только при необходимости снять новую таблицу:

sudo nft delete table inet cve_2026_98432

Она снимает только добавленный фильтр.

3. Подготовьте правило

Сохраните пример из бюллетеня Red Hat в файл cve-2026-98432.nft:

table inet cve_2026_98432 {    chain input {        type filter hook input priority -310; policy accept;        ip protocol tcp ip hdrlength > 5 counter drop    }}

Условие ip hdrlength > 5 относится к заголовку IPv4. Обычные TCP-options, например MSS и timestamps, находятся в TCP-заголовке и под это условие не попадают.

Проверьте синтаксис:

sudo nft --check --file cve-2026-98432.nft

Исправьте ошибки до применения. Не очищайте существующие таблицы через flush ruleset.

4. Взведите автооткат и примените фильтр

До загрузки правила поставьте таймер на пять минут. Сначала убедитесь, что command -v nft возвращает полный путь к программе:

nft_bin=$(command -v nft)sudo systemd-run --collect --unit=cve-98432-rollback --on-active=5m \  "$nft_bin" delete table inet cve_2026_98432sudo systemctl is-active cve-98432-rollback.timer

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

Загрузите правило и проверьте его наличие:

sudo nft --file cve-2026-98432.nftsudo nft list table inet cve_2026_98432

5. Проверьте доступ и сервисы

Откройте новое SSH-подключение с другой машины. Затем проверьте прикладной трафик: HTTPS, API или реальное подключение клиентом вашего сервиса. Сравните прежние правила с сохраненной конфигурацией.

После успешной проверки отмените таймер и еще раз убедитесь, что таблица остается на месте:

sudo systemctl stop cve-98432-rollback.timer cve-98432-rollback.servicesudo nft list table inet cve_2026_98432
  • Если таблицы уже нет, автооткат мог сработать.

  • Если связь нарушилась, дайте таймеру сработать либо удалите только эту таблицу через консоль.

  • После любого отката остановите таймер и его службу командой из предыдущего блока. Затем повторите процедуру с шага 4, заново взведя таймер.

6. Настройте загрузку и повторите на остальных узлах

Добавьте применение отдельной таблицы в действующую схему запуска firewall. Загрузчик фильтра должен добавлять только свою таблицу, сохраняя правила основного firewall. Если ими управляют ufw, Docker или другой менеджер, не включайте ради этой таблицы nftables.service с flush ruleset в конфигурации. Проверьте и обратный порядок: основной firewall при загрузке не должен стирать фильтр.

Перед перезагрузкой проверьте все измененные файлы загрузки через nft --check --file. Например, для штатной конфигурации:

sudo nft --check --file /etc/nftables.conf

В согласованное окно перезагрузите пилот. После загрузки проверьте успешный запуск службы основного firewall, наличие новой таблицы и сохранность прежних таблиц, цепочек и правил по снимку ~/nft-before.txt; счетчики пакетов и динамические элементы наборов могут измениться. Затем откройте новое SSH-подключение и проверьте сервис. После приемки пилота повторяйте процедуру на остальных узлах, с отдельным автооткатом для каждого.

После выпуска исправления обновите ядро и загрузитесь в него. Сопоставьте запущенную версию с исправленным пакетом своей ветки. Затем уберите загрузку временной таблицы из конфигурации и снова проверьте измененные файлы через nft --check --file. После этого удалите саму таблицу.

ссылка на оригинал статьи https://habr.com/ru/articles/1102958/