
CVE-2026-31431 Copy Fail — тестер LPE для ядра Linux через MCP
📖 Руководство по установке — быстрый старт, ручная настройка и устранение неполадок
CVE-2026-31431 — худшая уязвимость Linux из когда-либо обнаруженных. Теперь управляется через MCP.
732 байта Python. Без компиляции. Без состояния гонки. Без смещений под каждый дистрибутив. Один выстрел — универсальный root на любом ядре Linux, выпущенном с 2017 года.
Этот инструмент — MCP-сервер + веб-панель, проверяющие любую доступную Linux-систему на уязвимость. Он создан, потому что оригинальный PoC уже тривиален в использовании — здесь просто добавлены UI, сетевое сканирование и отслеживание парка устройств.
ПРЕДУПРЕЖДЕНИЕ: Это реальная LPE-уязвимость ядра. Используйте только на системах, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированное использование — уголовное преступление в большинстве юрисдикций.
1. Её обнаружил ИИ за один час.
Платформа Xint Code от Theori просканировала подсистему crypto/ ядра Linux по одному промпту оператора. Час спустя она получила универсальную LPE-уязвимость, которая в течение девяти лет ускользала от всех рецензентов-людей, инструментов статического анализа и фаззеров. Ошибка существовала с 2017 года и требовала межсистемных рассуждений (происхождение AF_ALG-сокета + поведение scratch-write в authencesn) — именно тех связей, в которых отлично преуспевают инструменты на базе LLM. Стоимость обнаружения была ничтожной. Последствия для ландшафта уязвимостей экзистенциальны.
2. Эксплойт — это 732 байта чистого Python, без зависимостей. Не нужна цепочка компиляции. Не нужно устанавливать библиотеки. Нет архитектурно-зависимых смещений. Он работает одинаково на серверах x86_64, роутерах aarch64, ARM-NAS и любом другом Linux-оборудовании с Python 3.10+. Его можно вставить в веб-шелл, передать через netcat или записать с USB-флешки. Барьер для применения в качестве оружия фактически равен нулю.
3. Он не оставляет следов на диске.
Эксплойт повреждает только page cache ядра в памяти. Двоичный файл /usr/bin/su на диске никогда не изменяется. Любой инструмент контроля целостности файлов, который сравнивает контрольные суммы на диске — AIDE, Tripwire, dm-verity — не видит ничего подозрительного. Повреждение исчезает после перезагрузки. Единственный способ обнаружить, что эксплойт был запущен, — перехватить его на лету с помощью auditd или eBPF. С точки зрения криминалистики эксплойт невидим.
4. Миллиарды устройств никогда не будут пропатчены.
Крупные дистрибутивы (Ubuntu, RHEL, Debian, SUSE) выпустили патчи в течение 72 часов. Но ошибка ядра вшита в каждое Linux-устройство, выпущенное с 2017 года и имеющее CONFIG_CRYPTO_USER_API_AEAD=y, — а это практически все они. Роутеры OpenWrt (патча нет по состоянию на 2026-05-02). IP-камеры с вендорными ядрами 2019 года. Смарт-телевизоры с замороженными ветками прошивок. Медицинские инфузионные насосы, для каждого обновления которых требуется повторная сертификация FDA. Промышленные контроллеры с 10-летним жизненным циклом поддержки. Устройства Android защищены случайным ограничением политики SELinux — а не исправлением ядра, — а рутованные устройства, кастомные прошивки, старые Fire-планшеты и Android TV-стики полностью уязвимы. Суммарное число — не миллионы. Это миллиарды. И для большинства из них патч не появится никогда.
Это инструмент тестирования безопасности и повышения осведомленности, обёрнутый вокруг публичного PoC. Он не делает ничего такого, чего не делает исходный скрипт из 732 байт. Вот что он добавляет:
Сам эксплойт публичен, его тривиально скопировать, и его существование нельзя отменить. Этот инструмент создан, чтобы сделать тестирование быстрым и безопасным для тех, у кого есть разрешение на тестирование.
git clone https://github.com/sandraschi/copy-fail-mcp
cd copy-fail-mcp
just
Откроется интерактивная панель со всеми доступными командами. Выполните just bootstrap для установки зависимостей, затем just serve или just dev для запуска.
Если у вас не установлен just:
pip install copy-fail-mcp
copy-fail check --host 192.168.1.100
copy-fail serve --http --port 10955
User → AF_ALG socket (authencesn) → splice() target file → HMAC fails
↓
4 bytes written past AEAD boundary
↓
Into page cache of /usr/bin/su
↓
su is now corrupted in memory
↓
Run su → root shell
Суть ошибки: два поведения подсистем, по отдельности безвредные, становятся смертоносными при совместном использовании. Путь splice в AF_ALG открывает страницы page cache как доступные для записи выходные данные. authencesn записывает 4 байта за легитимную границу AEAD как scratch-пространство. Соедините их — и вы сможете повредить представление любого читаемого файла в памяти точно контролируемыми данными. Эксплойт нацелен на проверку прав в /usr/bin/su.
MIT. Эксплойт-скрипт создан Taeyang Lee / Theori / Xint Code Research Team (оригинальный PoC).
| Property | Copy Fail | Dirty COW (2016) | Dirty Pipe (2022) |
|---|
| Размер эксплойта | 732 байта (Python stdlib) | ~200 строк C | ~100 строк C |
| Нужна компиляция | Нет — чистый Python | Да — компиляция C | Да — компиляция C |
| Состояние гонки | Нет — детерминированно | Да — окно гонки | Нет |
| Смещения под каждый дистрибутив | Нет — один и тот же скрипт везде | Нет | Нет |
| След на диске | Нет — только page cache, контрольные суммы чистые | Нет | Нет |
| Выход из контейнера | Да — общий page cache | Да | Да |
| Версии ядра | >= 4.14 (2017–наст. время) | >= 2.6.22 (2007–2018) | >= 5.8 (2020–2022) |
| Затронутые устройства | Миллиарды (продолжают расти) | Исправлено в 2018 | Исправлено в 2022 |
| Никогда не будут пропатчены | Миллиарды IoT/встраиваемых устройств/роутеров | В основном пропатчены | В основном пропатчены |
| Кем обнаружена | ИИ (Xint Code, сканирование за 1 час) | Исследователь-человек | Исследователь-человек |
| Стоимость обнаружения | ~$6 за облачные вычисления | Месяцы человеческого труда | Месяцы человеческого труда |
| Tool | Description | Ingress |
|---|
cf_scan_network | Сканирование подсети /24 на наличие SSH-хостов, определение Linux | Прямой (асинхронный TCP) |
cf_check_target | Проверка ядра, конфигурации AEAD, статуса патчей дистрибутива | SSH-агент |
cf_run_exploit | Развёртывание PoC через SSH, выполнение, сообщение о root | SSH-агент |
cf_assess | Проверка + эксплойт за один шаг | SSH-агент |
cf_apply_mitigation | Блэклист модулей или блэклист initcall | SSH-агент |
cf_get_exploit_script | Возврат исходного PoC (732 байта) в виде текста | Любой канал |
cf_exploit_local | Запись PoC в локальный путь для ручного развёртывания | Локальная оболочка |