## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-HYZ-IS-COPYFAIL-FIX
# CopyFail-Fix
🌐 **English** | Português | Español | 中文 | Íslenska
Однокомандное смягчение и исправление для CVE-2026-31431 — уязвимости локального повышения привилегий в ядре Linux «Copy Fail». Скрипт отключает уязвимый модуль `algif_aead`, обновляет ядро через `apt` и (опционально) устанавливает таймер `systemd` для поддержания системы в актуальном состоянии.
Разработан для **Ubuntu серверов** (также совместим с системами на основе Debian).
> **⚠️ Перед запуском ознакомьтесь со скриптом.** Это инструмент безопасности, работающий от root. Прочитайте `copyfail.sh` перед тем, как передавать его в `sudo`. По возможности всегда используйте официальный процесс обновления ядра вашего дистрибутива.
## Зачем?
CVE-2026-31431 («Copy Fail») — логическая ошибка в модуле ядра `algif_aead` (интерфейс сокетов AEAD криптографического API пользовательского пространства). Локальный непривилегированный пользователь может вызвать детерминированную запись 4 байт в кэш страниц любого читаемого файла — включая setuid-бинарники — и получить root-доступ за секунды. Ошибка была внесена в 2017 году (коммит `72548b093ee3`) и затрагивает все ядра, собранные между 2017 годом и исправлением. Этот скрипт отключает уязвимый модуль, пока вы применяете патч ядра от вашего дистрибутива.
## Требования
* **Ubuntu 20.04+** (или система на основе Debian)
* Наличие `apt-get` и `awk`
* Права root (`sudo`)
## Быстрый старт
root@kitploit:~
wget -O copyfail.sh https://raw.githubusercontent.com/paulorlima9/copyfail-fix/main/copyfail.sh
chmod +x copyfail.sh
sudo ./copyfail.sh
При первом запуске скрипт выполнит:
1. Запись `/etc/modprobe.d/disable-algif.conf` для блокировки загрузки модуля `algif_aead`
2. Выгрузку `algif_aead`, если он загружен
3. Запуск `apt-get update && apt-get upgrade -y` для получения исправленного ядра
4. Запрос на включение **Supervision** (автоматические ежедневные обновления)
После обновления требуется перезагрузка для загрузки нового ядра.
## Использование
root@kitploit:~
sudo ./copyfail.sh [options]
## Примеры
**Полное исправление** — применить смягчение и обновить ядро:
root@kitploit:~
sudo ./copyfail.sh
**Только проверка состояния** :
root@kitploit:~
sudo ./copyfail.sh --check
**Только смягчение** (без обновления ядра):
root@kitploit:~
sudo ./copyfail.sh --mitigate
**Отменить смягчение** после подтверждения, что ядро исправлено и перезагружено:
root@kitploit:~
sudo ./copyfail.sh --revert
**Включить ежедневное автообновление** (Supervision):
root@kitploit:~
sudo ./copyfail.sh --supervision
## Supervision
Функция Supervision устанавливает **таймер systemd** , который запускает `apt-get upgrade` каждые 24 часа, гарантируя, что исправления ядра будут получены сразу после их публикации вашим дистрибутивом.
При включении создаются два юнита systemd:
* `copyfail-fix-supervision.service` — сервис одноразового запуска, выполняющий скрипт с опцией `--upgrade`
* `copyfail-fix-supervision.timer` — таймер, запускающий сервис ежедневно (и через 5 минут после загрузки)
### Управление таймером
root@kitploit:~
# Проверка состояния таймера
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
## Как это работает
1. Записывает `install algif_aead /bin/false` в `/etc/modprobe.d/disable-algif.conf`, чтобы модуль не мог загрузиться при следующей загрузке
2. Выполняет `rmmod algif_aead` для выгрузки из работающего ядра (пропускается, если модуль используется — требуется перезагрузка)
3. Запускает `apt-get update` с последующим неинтерактивным `apt-get upgrade` для установки последнего пакета ядра
4. С опцией `--check` проверяет `uname -r`, `lsmod`, файл modprobe и последний установленный пакет `linux-image-*`
5. С опцией `--revert` удаляет файл modprobe и перезагружает модуль через `modprobe`
## Обозначения в выводе
Во время выполнения скрипт показывает индикаторы прогресса:
* **`+`** (зелёный) — действие выполнено
* **`-`** (красный) — действие отменено
* **`.`** (серый) — действие пропущено (уже применено или не применимо)
* **`!`** (жёлтый) — предупреждение (например, требуется перезагрузка)
## Ссылки на CVE
* Ubuntu Security Notice — CVE-2026-31431
* Red Hat — RHSB-2026-002 Copy Fail
* CERT-EU 2026-005
## Лицензия
MIT