
Инструмент обнаружения и устранения уязвимостей для ошибок Copy Fail и Dirty Frag (CVE-2026-31431, CVE-2026-43284, CVE-2026-43500)
Проверка удалённого Linux-хоста по SSH на уязвимости ядерных модулей Copy Fail и Dirty Frag и, при необходимости, применение мер по устранению:
| CVE | Название | Затронутые модули |
|---|---|---|
| CVE-2026-31431 | Copy Fail | algif_aead |
| CVE-2026-43284 | Dirty Frag (IPsec) | esp4, esp6, ipcomp4, ipcomp6, xfrm_user |
| CVE-2026-43500 | Dirty Frag (RxRPC) | rxrpc, kafs |
Для каждого затронутого модуля vcheck сообщает, загружен ли он в данный момент, встроен ли в работающее ядро, есть ли следы его использования в журналах ядра, есть ли активные сокеты AF_ALG (только для Copy Fail) и внесён ли он уже в чёрный список в /etc/modprobe.d/.
С флагом -fix vcheck сообщает исходное состояние, записывает фрагмент cve-XXXX-XXXXX-disable.conf для каждого модуля, который ещё не внесён в чёрный список, затем повторно выполняет проверки и сообщает итоговое состояние. С -fix -unload vcheck также пытается выгрузить затронутые модули, которые были загружены до применения исправления, а затем с помощью финального сканирования проверяет, загружены ли они по-прежнему. С -fix -rebuild-initramfs vcheck пересобирает initramfs (только) для текущего работающего ядра после записи фрагмента, чтобы чёрный список был встроен в следующий загрузочный образ. Старые записи ядра сохраняют исходный initramfs в качестве запасного варианта.
-fix только после проверочного запускаВсегда сначала запускайте vcheck без -fix. Изучите отчёт и убедитесь, что затронутые модули можно безопасно отключить на этом хосте, прежде чем повторно запускать с -fix. Отключение ядерных модулей, от которых зависят легитимные рабочие нагрузки, может повлиять на пользователей и нарушить работу приложений.
В частности:
-fix безопасным только когда ни один из затронутых модулей в данный момент не загружен — то есть каждый модуль сообщается либо как mitigated, либо как module not blacklisted (отсутствуют строки VULNERABLE или blacklisted but currently loaded). Загруженный модуль почти всегда означает, что что-то на хосте активно его использует; проверьте это перед внесением в чёрный список.esp4, esp6, ipcomp4, ipcomp6, xfrm_user) необходимы для любых развёртываний IPsec/strongSwan/WireGuard-over-IPsec/IKE. Модули ipcomp4/ipcomp6 реализуют сжатие полезной нагрузки IPComp и могут автоматически согласовываться в составе IPsec SA, даже если не были явно сконфигурированы. Не вносите ни один из них в чёрный список на VPN-шлюзе, IPsec-конечной точке или в любом месте, где ip xfrm policy возвращает правила. Обратите внимание, что модуль фреймворка xfrm_algo намеренно не включён в этот список — согласно рекомендациям производителей (Red Hat, Ubuntu, AWS), блокировки модулей протоколов ESP и IPComp плюс интерфейса конфигурации netlink xfrm_user достаточно, а внесение xfrm_algo в чёрный список сломало бы все остальные xfrm-преобразования без какой-либо дополнительной пользы.rxrpc, kafs) необходимы для любого хоста, который монтирует файловые системы AFS. Их отключение нарушит эти монтирования при следующей загрузке.algif_aead предоставляет доступ к криптографии ядра через семейство сокетов AF_ALG. Он редко используется прикладным кодом напрямую, но перед внесением в чёрный список проверьте активные сокеты (ss -p --af-alg) и потребителей в пользовательском пространстве.Фрагменты чёрного списка, которые записывает vcheck, вступают в силу только в момент загрузки модуля (обычно при следующей перезагрузке или при modprobe -r <module>, когда система простаивает). Модуль, который уже загружен, продолжит работать даже после -fix — vcheck сообщит об этом как blacklisted but currently loaded; run 'modprobe -r' or reboot. Передача -unload вместе с -fix предписывает vcheck выполнить modprobe -r для загруженных затронутых модулей после записи фрагментов чёрного списка. Используйте это только после того, как подтвердили, что модули можно безопасно удалить из работающего ядра.
Передача -rebuild-initramfs вместе с -fix пересоздаёт initramfs только для текущего работающего ядра (update-initramfs -u -k $(uname -r) на Debian/Ubuntu, dracut -f --kver $(uname -r) на RHEL/Fedora). Остальные установленные ядра сохраняют свой initramfs нетронутым, поэтому если после перезагрузки что-то пойдёт не так, вы сможете выбрать более старую запись ядра из меню загрузки и восстановиться. Будущие установки ядра пересобирают собственный initramfs на основе текущего состояния /etc/modprobe.d/, поэтому чёрный список распространяется автоматически без повторного запуска vcheck. Если ни update-initramfs, ни dracut не установлены (например, Arch, Alpine, неизменяемые образы), vcheck выводит предупреждение и продолжает работу — пересоберите вручную инструментом вашего дистрибутива перед перезагрузкой.
Пересборка может занять несколько минут (особенно dracut на хостах с большим количеством драйверов), что превысило бы диагностический -command-timeout. Она выполняется под собственным -initramfs-timeout (по умолчанию 10m), поэтому пересборка получает необходимое время, а быстрые проверки сохраняют свой жёсткий бюджет. Увеличьте -initramfs-timeout для медленного оборудования или укажите 0, чтобы полностью отключить тайм-аут. Во время длительных удалённых команд vcheck по умолчанию отправляет SSH keepalive-запросы каждые 30s, чтобы таймеры простоя NAT/межсетевых экранов не разрывали соединение. Настройте это параметром -ssh-keepalive или укажите 0, чтобы отключить его.
Homebrew (macOS):
brew install --cask krisiasty/tap/vcheck
Готовые бинарные файлы для Linux, macOS и Windows публикуются на странице релизов.
Из исходников (требуется Go 1.26+):
go install github.com/krisiasty/vcheck@latest
vcheck -host HOST [flags]