
Воспроизведён бесфайловый LPE CVE‑2026‑31431 («Copy Fail») на Kali Linux, затем созданы детектирующие правила auditd, Sigma и YARA для обнаружения этой скрытой эксплойтации ядра, не оставляющей следов на диске.
Этот репозиторий документирует полный цикл воспроизведения, разработки средств обнаружения и реагирования на инциденты для CVE-2026-31431 («Copy Fail») — критической уязвимости локального повышения привилегий в ядре Linux, затрагивающей ядра с 4.14 по 7.0-rc.
Copy Fail — это логическая ошибка, а не повреждение памяти. Она детерминирована, затрагивает практически каждый дистрибутив Linux, выпущенный с 2017 года, и полностью бесфайловая — традиционный мониторинг целостности файлов (AIDE, Tripwire) не может её обнаружить. Рабочий proof-of-concept умещается всего в 732 байта Python.
| Компонент | Детали |
|---|---|
| Гипервизор | VirtualBox |
| Целевая ВМ | Kali Linux 2026.1 |
| Ядро | 6.18.12+kali-amd64 |
| PoC эксплойта | theori-io/copy-fail-CVE-2026-31431 |
| Обнаружение | auditd, Sigma, YARA |
Лаборатория начинается с подтверждения того, что на целевой системе запущено уязвимое ядро.
Выпуск Kali Linux 2026.1 и сведения о ядре.
Вывод uname -r, показывающий уязвимое ядро 6.18.12+kali-amd64.
Для эксплойта требуется модуль ядра algif_aead и криптографический шаблон authencesn.
Модуль загружен
lsmod и modinfo подтверждают доступность algif_aead; /proc/crypto показывает уязвимый шаблон authencesn.
PoC использует os.splice, для чего требуется Python 3.10+. Мы проверяем интерпретатор.
Версия Python Установлен Python 3.12, всё готово.
Перед запуском полного эксплойта безопасная проверка подтверждает, что система уязвима.
Проверка сообщает «potentially vulnerable», открывая путь к эксплуатации.
Создаётся непривилегированная учётная запись testuser для имитации атакующего без особых прав.
id показывает UID 1001, подтверждая доступ без прав root.
Официальный PoC от Theori клонируется и запускается из непривилегированной учётной записи.
Репозиторий эксплойта успешно клонирован.
Запуск эксплойта
Python-эксплойт перезаписывает кэш страниц и «подрывает» повреждённый бинарный файл /usr/bin/su.
Вывод whoami и id доказывает полное повышение привилегий до root.
Эксплойт повреждает только кэш страниц в памяти. Файл /usr/bin/su на диске сохраняет свою исходную контрольную сумму.
Совпадение SHA256
sha256sum совпадает с исходным хешем пакета даже после эксплуатации, подтверждая отсутствие изменений на диске.
Copy Fail невозможно обнаружить с помощью мониторинга целостности файлов. Вместо этого мы сосредотачиваемся на примитивах уровня системных вызовов, которые он использует.
Мы развёртываем пользовательские правила auditd, которые срабатывают на:
AF_ALG (семейство 38)splice()
Все пользовательские правила активны, что проверено с помощью auditctl -l.
После повторного запуска эксплойта мы видим оповещения для именно тех системных вызовов, которые использовались:
ausearch показывает событие создания сокета AF_ALG от процесса testuser.
ausearch показывает событие splice() от того же PID — сильная корреляция.
Правило Sigma переводит результаты auditd в независимый от производителя формат SIEM.
Правило Sigma YAML, обнаруживающее создание сокета AF_ALG и вызовы splice().
Правило YARA помогает выявить код эксплойта Copy Fail на диске.
Правило YARA, сопоставляющее строку authencesn, константы сокетов и ссылки на splice(), встречающиеся в PoC.
| Уровень | Что видит | Статус |
|---|---|---|
| auditd | Сокет AF_ALG + системные вызовы splice | ✅ Развёрнуто |
| Sigma | Шаблоны системных вызовов через SIEM | ✅ Правило готово |
| YARA | Код PoC на диске | ✅ Правило готово |
| FIM (AIDE/Tripwire) | Изменения файлов | ❌ Слепая зона — запись на диск не происходит |
Полный отчёт о реагировании на инциденты доступен в reports/incident-copy-fail.md. Он включает:
Немедленная мера противодействия (без перезагрузки):
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo rmmod algif_aead