
Эксплойт локального повышения привилегий для ядра Linux, использующий уязвимость CVE-2026-31431, предоставляющий надёжный одноразовый PoC с реализациями на нескольких языках, сканером уязвимостей и скриптом для устранения последствий.
100% надёжное локальное повышение привилегий в Linux, затрагивающее все основные дистрибутивы с 2017 года.
Одна логическая ошибка в
authencesn, объединённая черезAF_ALGиsplice()в 4-байтовую запись в page cache — незаметно эксплуатируемая почти десятилетие.
Весь код и документация в этом репозитории предоставлены исключительно для авторизованных исследований в области безопасности и образовательных целей.
Запуск эксплойтов против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения, является незаконным. Используя этот репозиторий, вы принимаете на себя полную ответственность за свои действия.
.
├── README.md ← Вы здесь
├── LICENSE ← MIT
├── .gitignore
├── docs/
│ ├── analysis-report.md ← Полный анализ безопасности
│ ├── analysis-report.html ← Стилизованная HTML-версия
│ ├── exploit-walkthrough.md ← Построчный анализ PoC
│ └── exploit-walkthrough.html ← Стилизованная HTML-версия
└── poc/
├── README.md ← Руководство по использованию PoC
├── copy_fail_exp.py ← Официальный PoC (732 байта, обфусцированный)
├── copy_fail_exp_readable.py ← Деобфусцированная + аннотированная версия
├── copy_fail_exp_compat.py ← Совместимость с Python 3.6+ (ctypes splice)
├── copy_fail_exp_alpine.py ← Вариант для Alpine Linux
├── copy_fail_exp.c ← Реализация на C (без зависимостей)
├── copy_fail_exp.go ← Реализация на Go (без зависимостей)
├── copy_fail_rust/ ← Реализация на Rust
│ ├── Cargo.toml
│ └── src/main.rs
├── check_vulnerable.py ← Сканер уязвимости
└── mitigate.sh ← Скрипт смягчения в один клик
# Из GitHub Releases — готовые бинарники (Linux amd64/arm64) + все Python-скрипты
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-go-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-c-linux.tar.gz
wget https://github.com/nisec-eric/cve-2026-31431/releases/latest/download/copy-fail-python.tar.gz
tar xzf copy-fail-go-linux.tar.gz
tar xzf copy-fail-c-linux.tar.gz
tar xzf copy-fail-python.tar.gz
# Статический бинарник Go (Python не нужен)
chmod +x copy-fail-exp-amd64
./copy-fail-exp-amd64
# Статический бинарник C
chmod +x copy-fail-exp-c-amd64
./copy-fail-exp-c-amd64
# Или используйте Python-скрипты напрямую
python3 check_vulnerable.py
📦 Релизы автоматически собираются через GitHub Actions при каждом push тега
v*. Бинарники Go и C собираются для linux/amd64 и linux/arm64 как статические.
python3 poc/check_vulnerable.py
sudo bash poc/mitigate.sh
Это добавляет в чёрный список модуль ядра algif_aead — ничего не ломает для 99% систем.
# Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-*
# RHEL/CentOS/Fedora
sudo dnf update kernel
# Перезагрузитесь в исправленное ядро
sudo reboot
python3 poc/check_vulnerable.py
# Код выхода 1 = защищено ✓
ПРЕДУПРЕЖДЕНИЕ: Запускайте только на системах, которыми вы владеете или на тестирование которых у вас есть разрешение.
# C
gcc -static -o exp ./poc/copy_fail_exp.c && ./exp
# Python
python3 poc/copy_fail_exp.py
python3 poc/copy_fail_exp_compat.py # Python < 3.10
# Go
go build -o exp ./poc/copy_fail_exp.go && ./exp
# Rust
cd poc/copy_fail_rust && cargo run --release
Все версии принимают необязательный аргумент для нацеливания на другой SUID-бинарник:
python3 poc/copy_fail_exp.py /usr/bin/passwd
./exp /usr/bin/sudo
Полная оценка уязвимости, включающая:
authencesn)Построчный анализ PoC, включающий:
AF_ALG, доставка через splice() в page cache, механика sg_chain()authencesn, пересекающую границы scatterlist/etc/passwd, нацеливание на общие библиотеки, побег из контейнераПриветствуется вклад:
Пожалуйста, открывайте issue или pull request.
MIT — Используйте ответственно.
| Поле | Детали |
|---|
| CVE | CVE-2026-31431 |
| Псевдоним | Copy Fail |
| Тип | Локальное повышение привилегий в ядре Linux (LPE) / произвольная запись в page cache |
| CVSS v3.1 | 7.8 HIGH — AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-669 (Некорректная передача ресурсов между сферами) |
| Компонент | crypto/algif_aead — криптографический шаблон authencesn |
| Появилась | 2017 (коммит 72548b093ee3) |
| Исправлена | Основной коммит a664bf3d603d (2026-04-01) |
| Исправленное ядро | v6.18.22+, v6.19.12+, v7.0+ |
| Исследователь | Xint / Theori (Taeyang Lee + аудит с помощью Xint Code AI) |
| Раскрытие | 2026-04-29 — copy.fail |
| Типичный Linux LPE | Copy Fail |
|---|
| Состояние гонки | Требуется | Нет |
| Смещения для каждого дистрибутива | Требуются | Нет |
| Надёжность | 30–80% | 100%, с одного выстрела |
| Окно уязвимости | Узкое | 2017 → 2026 (9 лет) |
| Изменение данных на диске | Возможно | Нет (скрытно) |
| Кросс-контейнерная эксплуатация | Нет | Да |
| Файл | Язык | Требования | Примечания |
|---|
copy_fail_exp.py | Python 3.10+ | только stdlib | Официальный PoC на 732 байта |
copy_fail_exp_compat.py | Python 3.6+ | stdlib + ctypes | Работает на CentOS 7, AL2 и т.д. |
copy_fail_exp_alpine.py | Python 3.10+ | только stdlib | Нацелен на /bin/ping в Alpine |
copy_fail_exp.c | C | gcc + заголовки Linux | Статический бинарник, без зависимостей |
copy_fail_exp.go | Go 1.21+ | только stdlib | Статический бинарник, без зависимостей |
copy_fail_rust/ | Rust 1.70+ | крейты libc + flate2 | Статический бинарник |
| Среда | Риск | Почему |
|---|
| Мультитенантные Linux-хосты | 🔴 Высокий | Любой пользователь → root |
| Kubernetes / контейнеры | 🔴 Высокий | Общий page cache → побег из контейнера |
| CI-раннеры (self-hosted) | 🔴 Высокий | Вредоносный PR → root на раннере |
| Облачные SaaS (пользовательский код) | 🔴 Высокий | Арендатор → root на хосте |
| Стандартные серверы | 🟡 Средний | Цепочка с веб-RCE / украденными учётными данными |
| Однопользовательские ноутбуки | 🟢 Низкий | Уже единственный пользователь |