
Обнаруживает и устраняет CVE-2026-31431 (Copy Fail) в Linux путем проверки уязвимости AF_ALG и, при необходимости, внесения затронутого модуля в чёрный список.
Обнаружение и (опционально) устранение уязвимости CVE-2026-31431 («Copy Fail») на хосте Linux.
Уязвимость представляет собой примитив записи в page-cache, доступный через семейство сокетов AF_ALG с использованием AEAD-преобразования authencesn(hmac(sha256),cbc(aes)). Этот скрипт воспроизводит тот же примитив, который продемонстрировала Theori, но направлен на самостоятельно созданный временный файл, а не на setuid-бинарник, поэтому сам тест не является разрушительным.
Если ядро уязвимо, скрипт предлагает применить меры по смягчению: добавить модуль algif_aead в чёрный список через /etc/modprobe.d/disable-algif-aead.conf и выгрузить модуль. Для полного исправления всё равно потребуется обновление ядра.
os.splice)uv для запуска скрипта с фиксированной версией Pythonsudo / root — требуется для применения мер по смягчению (запись в /etc/modprobe.d и rmmod); само обнаружение работает без привилегий, но скрипт интерактивно запрашивает, применять ли исправлениеsudo $(which uv) run --python 3.10 /path/to/copy_fail_test.py
$(which uv) используется для того, чтобы sudo сохранял правильный бинарник uv в PATH.
Скрипт выполнит следующие действия:
AF_ALG + authencesn(hmac(sha256),cbc(aes)).✅ NOT VULNERABLE — код возврата 0🚨 VULNERABLE — предложит применить меры по смягчению, затем повторно выполнит тест⚠️ INCONCLUSIVE — код возврата 2 (например, вызов splice/sendmsg завершился ошибкой)Если вы подтвердите запрос, скрипт:
install algif_aead /bin/false в /etc/modprobe.d/disable-algif-aead.conf.rmmod algif_aead.Если модуль встроен в ядро (не загружаемый), для вступления чёрного списка в силу потребуется перезагрузка. В любом случае обновите ядро, когда станет доступно обновление — чёрный список лишь убирает одну точку входа.
Ручной эквивалент:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Этап обнаружения выполняет запись в tempfile.NamedTemporaryFile, который создаёт сам скрипт, а затем удаляет; системные файлы не затрагиваются. Этап смягчения — единственная часть, которая изменяет хост, и только если вы подтвердите действие в запросе.