
Эксплойт для CVE-2026-31431 (Copy Fail), нацеленный на уязвимость splice AF_ALG в Linux. Включает тест обнаружения и повышение привилегий через манипуляцию кэшем страниц /usr/bin/su для получения оболочки root.
CVE-2026-31431 (Copy Fail) PoC на языке C, логически согласованный с оригинальным Python эксплойтом theori-io/copy-fail-CVE-2026-31431.
Только для авторизованных исследований безопасности и тестовых сред. Запрещено использовать на неавторизованных системах.
В Linux AF_ALG алгоритм authencesn(hmac(sha256),cbc(aes)) в пути splice + AEAD может записать 4 байта из AAD в page cache целевого файла (содержимое диска не изменяется).
Поведение эксплойта в этом репозитории совпадает с оригинальным:
/usr/bin/su миниатюрного ELF, распакованного с помощью zlibsu, при этом изменённый page cache загружает поддельный su, что обычно даёт root shell без пароля.copy-fail/
├── include/
│ ├── copy_fail.h
│ └── su_payload_zlib.h
├── src/
│ ├── alg.c # AF_ALG / splice 原语
│ ├── util.c # 前置检查
│ ├── test_main.c # 漏洞检测
│ └── exploit_main.c # 提权
├── Makefile
└── README.md
Ubuntu / Debian:
sudo apt install build-essential zlib1g-dev
cd copy-fail
make
Результат сборки:
| Артефакт | Описание |
|---|---|
bin/copy-fail-test | Проверка уязвимости (временный sentinel-файл, системные файлы не изменяются) |
bin/copy-fail-exploit | Повышение привилегий (изменение page cache /usr/bin/su, затем exec su) |
После сборки на системе с более новой версией, при появлении GLIBC_2.34 / GLIBC_2.38 not found, выполните на сборочной машине:
make static
Скопируйте bin/copy-fail-test и bin/copy-fail-exploit на целевую машину и запустите. Также можно выполнить make на целевой машине из исходников (динамическая линковка, меньший размер).
./bin/copy-fail-test
echo $?
| Код возврата | Значение |
|---|---|
| 0 | Не проявлены признаки уязвимости / предварительные условия не выполнены |
| 2 | Обнаружены признаки уязвимости |
| 1 | Ошибка в процессе тестирования |
./bin/copy-fail-exploit
id
Отсутствие вывода — нормальное поведение; при успехе вы попадёте в root shell. При неудаче echo $? обычно возвращает 1.
AF_ALGbind алгоритма authencesn(hmac(sha256),cbc(aes))/usr/bin/susplice может записывать в сокет AF_ALGЕсли детектор сообщает cannot be instantiated (No such file or directory):
grep -r algif_aead /etc/modprobe.d/
sudo modprobe algif_aead
grep authencesn /proc/crypto
Некоторые дистрибутивы отключают algif_aead через modprobe (например, смягчение Ubuntu USN), поэтому необходимо отключить это ограничение на тестовой машине с root-доступом перед тестированием.
После тестирования повышения привилегий (в root shell) можно сбросить загрязнение page cache:
echo 3 > /proc/sys/vm/drop_caches
Или перезагрузить виртуальную машину.