
Ansible playbook для обнаружения и устранения CVE-2026-31431 (Copy Fail) — уязвимости локального повышения привилегий в ядре Linux
Copy Fail Detection and Remediation
Набор ролей и плейбуков Ansible для обнаружения и устранения CVE-2026-31431 (Copy Fail) — критической уязвимости локального повышения привилегий в модуле algif_aead ядра Linux.
🔗 GitHub: https://github.com/parmstro/cfDr
Название cfDr — игра слов от «Copy Fail Doctor» — ваше надёжное средство от CVE-2026-31431.
CVE-2026-31431 (CVSS 7.8) — логическая ошибка в интерфейсе сокетов AEAD ядра Linux (AF_ALG), обнаруженная в 2026 году. Уязвимость позволяет любому непривилегированному локальному пользователю повысить привилегии до root за считанные секунды.
algif_aead (криптоинтерфейс AF_ALG)Версии ядра: Linux kernel >= 4.10 (выпущено в 2017)
Затронутые дистрибутивы:
Примечание: любой дистрибутив Linux с ядром 4.10 или новее потенциально уязвим.
Эта уязвимость особенно опасна, потому что:
Как только атакующий получает любую форму локального доступа (SSH, веб-шелл, побег из контейнера и т. д.), он может:
Пока ожидаются пропатченные ядра от вендоров, доступно несколько стратегий смягчения. cfDr реализует все из них с интеллектуальными рекомендациями на основе конфигурации вашей системы.
Не все меры устранения одинаковы. Вот что вам нужно знать:
| Метод | Может ли root обойти? | Покрытие | Поддержка Enterprise Linux |
|---|---|---|---|
| Блокировка модуля | ✅ Да (через insmod) | Предотвращает загрузку через modprobe | Все версии |
| Политика SELinux | ❌ НЕТ (уровень LSM) | Только настроенные домены | Все версии (по умолчанию) |
| systemd seccomp | ❌ НЕТ (фильтр системных вызовов) | Только настроенные службы | Все версии |
| eBPF LSM | ❌ НЕТ (уровень LSM) | Системный уровень (если настроено) | RHEL 9+, Fedora 34+ |
Рекомендация cfDr по умолчанию: Флаг 3 (Блокировка модуля + SELinux)
Это обеспечивает два независимых уровня защиты:``` ┌─────────────────────────────────────────────────┐ │ Layer 1: Module Blacklist │ │ • Prevents modprobe algif_aead │ │ • Persists across reboots │ │ • CAN be bypassed by malicious root (insmod) │ ├─────────────────────────────────────────────────┤ │ Layer 2: SELinux Policy │ │ • Blocks AF_ALG socket() at syscall level │ │ • Works even if module is loaded │ │ • CANNOT be bypassed from userspace │ │ • Covers user_t, unconfined_t (majority cases) │ └─────────────────────────────────────────────────┘
Result: If either layer fails, the other still protects
### Почему одного чёрного списка модулей недостаточно
Решительный злоумышленник с root-доступом может обойти чёрный список модулей:```bash
# Module blacklist DOES NOT prevent:
insmod /lib/modules/$(uname -r)/kernel/crypto/algif_aead.ko.xz
Однако это допустимо, поскольку:
Для полной, необходной защиты вам необходимо:
Чёрный список модулей + как минимум одно из:
cfDr использует побитовые флаги для включения нескольких мер смягчения:
| Значение флага | Включённые меры смягчения | Сценарий использования |
|---|---|---|
| 1 | Только чёрный список модулей | Минимальная защита, системы без SELinux |
| 2 | Только SELinux | Среды только с SELinux |
| 3 | Чёрный список модулей + SELinux | РЕКОМЕНДУЕМЫЙ вариант по умолчанию |
| 5 | Чёрный список модулей + seccomp | Без SELinux с усилением служб |
| 7 | Чёрный список модулей + SELinux + seccomp | Расширенная защита |
| 15 | Все меры смягчения | Максимальная защита (только RHEL 9+) |
Расчёт флагов: 1 (чёрный список) + 2 (SELinux) + 4 (seccomp) + 8 (eBPF) = сумма
Защита SELinux:
user_t, unconfined_t, httpd_t, postgresql_t, mysqld_tuser_t и unconfined_t покрывают подавляющее большинство сценариев атакЗащита systemd seccomp:
httpd, nginx, postgresql, mariadb, redis, memcachedЗащита eBPF LSM:
cfDr выполняет комплексную оценку по нескольким измерениям:
uname -r
- Определяет, если версия ядра >= 4.10 (уязвимый диапазон)
- Идентифицирует выпуск ядра и дистрибутив
#### 2. Проверка доступности модуля```bash
modinfo algif_aead
algif_aead в ядреlsmod | grep algif_aead
- Определяет, загружен ли модуль в данный момент
- **Критически важно**: Загруженный модуль = активно эксплуатируемый
#### 4. Активное обнаружение сокетов```bash
lsof -U | grep AF_ALG