
vcheck v1.6.3
Инструмент обнаружения и устранения уязвимостей для ошибок Copy Fail и Dirty Frag (CVE-2026-31431, CVE-2026-43284, CVE-2026-43500)
vcheck
Проверка удалённого 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). Загруженный модуль почти всегда означает, что что-то на хосте активно его использует; проверьте это перед внесением в чёрный список. - Модули IPsec (
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 плюс интерфейса конфигурации netlinkxfrm_userдостаточно, а внесениеxfrm_algoв чёрный список сломало бы все остальные xfrm-преобразования без какой-либо дополнительной пользы. - Модули RxRPC (
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]