
Быстрый скрипт для смягчения последствий и установки патча для CVE-2026-31431 (Copy Fail) на Ubuntu/Debian VPS
🌐 English | Português | Español | 中文 | Íslenska
Однокомандное смягчение и исправление для CVE-2026-31431 — уязвимости локального повышения привилегий "Copy Fail" в ядре Linux. Скрипт отключает уязвимый модуль algif_aead, обновляет ядро через apt и (опционально) устанавливает таймер systemd для поддержания системы в актуальном состоянии.
Разработан для серверов Ubuntu (также совместим с системами на базе Debian).
⚠️ Ознакомьтесь со скриптом перед запуском. Это инструмент безопасности, который выполняется от имени root. Прочитайте
copyfail.shперед передачей его вsudo. Всегда предпочитайте официальный процесс обновления ядра вашего дистрибутива, когда это возможно.
CVE-2026-31431 ("Copy Fail") — это логическая ошибка в модуле ядра algif_aead (интерфейс AEAD-сокетов пользовательского крипто-API). Локальный непривилегированный пользователь может вызвать детерминированную запись 4 байт в page cache любого читаемого файла — включая setuid-бинарники — и получить root-доступ за секунды. Ошибка была внесена в 2017 году (коммит 72548b093ee3) и затрагивает каждое ядро, собранное между 2017 годом и исправлением. Этот скрипт отключает уязвимый модуль, пока вы применяете патч ядра вашего дистрибутива.
apt-get и awksudo)wget -O copyfail.sh https://raw.githubusercontent.com/paulorlima9/copyfail-fix/main/copyfail.sh
chmod +x copyfail.sh
sudo ./copyfail.sh
При первом запуске скрипт:
/etc/modprobe.d/disable-algif.conf, чтобы внести модуль algif_aead в чёрный списокalgif_aead, если он загруженapt-get update && apt-get upgrade -y, чтобы установить пропатченное ядроПосле обновления потребуется перезагрузка для загрузки нового ядра.
sudo ./copyfail.sh [options]
| Опция | Короткая | Описание |
|---|---|---|
--help | -h | Показать справочное сообщение |
--mitigate | -m | Применить только смягчение (отключить модуль algif_aead) |
--upgrade | -u | Обновить только ядро/пакеты (apt-get upgrade) |
--check | -c | Показать текущий статус (версия ядра, модуль, смягчение) |
--revert | -r | Отменить смягчение (после установки патча ядра и перезагрузки) |
--supervision | -s | Включить автоматические ежедневные обновления через таймер systemd |
Полное исправление — применить смягчение и обновить ядро:
sudo ./copyfail.sh
Только проверка статуса:
sudo ./copyfail.sh --check
Только смягчение (без обновления ядра):
sudo ./copyfail.sh --mitigate
Отмена смягчения после подтверждения, что ядро пропатчено и перезагружено:
sudo ./copyfail.sh --revert
Включение ежедневного автообновления (Supervision):
sudo ./copyfail.sh --supervision
Функция Supervision устанавливает таймер systemd, который запускает apt-get upgrade раз в 24 часа, гарантируя, что патчи ядра будут установлены сразу после их публикации вашим дистрибутивом.
При включении создаются два юнита systemd:
copyfail-fix-supervision.service — oneshot-сервис, выполняющий скрипт с опцией --upgradecopyfail-fix-supervision.timer — таймер, запускающий сервис ежедневно (и через 5 минут после загрузки)# Проверить статус таймера
systemctl status copyfail-fix-supervision.timer
# Просмотреть следующее запланированное выполнение
systemctl list-timers copyfail-fix-supervision.timer
# Отключить автообновления
sudo systemctl stop copyfail-fix-supervision.timer
sudo systemctl disable copyfail-fix-supervision.timer
# Запустить обновление вручную
sudo systemctl start copyfail-fix-supervision.service
install algif_aead /bin/false в /etc/modprobe.d/disable-algif.conf, чтобы модуль не мог быть загружен при следующей загрузкеrmmod algif_aead, чтобы выгрузить его из работающего ядра (пропускается, если модуль используется — требуется перезагрузка)apt-get update, а затем неинтерактивный apt-get upgrade для установки последнего пакета ядра--check проверяет uname -r, lsmod, файл modprobe и последний установленный пакет linux-image-*--revert удаляет файл modprobe и перезагружает модуль через modprobeВо время выполнения скрипт отображает индикаторы прогресса:
+ (зелёный) — действие применено- (красный) — действие отменено. (серый) — действие пропущено (уже применено или неприменимо)! (жёлтый) — предупреждение (например, требуется перезагрузка)MIT