Linux kernel «Copy Fail»: уязвимость CVE-2026-31431 даёт root через AF_ALG, патчей пока нет
Локальный privilege escalation в модуле algif_aead — наследие оптимизации 2017 года. Эксплойт уже опубликован, патчей пока нет. Что отключать на нодах прямо сейчас.
Новости TprogerНа Ubuntu 24.04, RHEL 10.1, SUSE 16 и Amazon Linux 2023 любой пользователь без прав root может стать root за несколько секунд — патча для уязвимости пока нет ни в одном дистрибутиве. CERT-EU выпустил advisory 2026-005 29 апреля и настоятельно рекомендует временные меры для Kubernetes-нод и CI/CD-раннеров с непроверенными нагрузками.
Уязвимость CVE-2026-31431 по прозвищу Copy Fail — это локальный privilege escalation в ядре Linux с CVSS 7.8. Исследователи опубликовали подробное описание и рабочий PoC; mainline-фикс влит 1 апреля 2026 года, но ни Ubuntu, ни Amazon, ни SUSE до сих пор не выпустили обновлённый пакет ядра.
Под ударом — все основные дистрибутивы с ядром, собранным с 2017 года. Эксплойт цепляет AF_ALG-сокет с системным вызовом splice(), выполняет произвольную 4-байтовую запись в страницу page-cache, затем подменяет байты в /usr/bin/su — и запускает root-шелл.
Ключевые выводы
CVE-2026-31431 (Copy Fail) — локальный privesc в ядре Linux, CVSS 7.8. Опубликован 29 апреля 2026 года, есть рабочий PoC.
Дыра в модуле algif_aead — часть userspace crypto API ядра. Появилась в 2017 году с коммитом 72548b093ee3.
Затронуты ядра 2017–2026. Подтверждено: Ubuntu 24.04 (6.17), Amazon Linux 2023 (6.18), RHEL 10.1 (6.12), SUSE 16 (6.12). Ubuntu 26.04 «Resolute» и новее — нет.
Патчей нет ни у кого. Mainline-фикс — коммит a664bf3d603d от 1 апреля, но Ubuntu, Amazon, SUSE на 30 апреля статус — «No fix available».
Что делать сейчас: отключить модуль algif_aead через modprobe.d, в контейнерах — блокировать AF_ALG-сокеты через seccomp-профиль.
Что такое AF_ALG и где это в системе
AF_ALG — это семейство сокетов в ядре Linux, через которое userspace-программы получают доступ к криптографическому API ядра без libcrypto. Открываете сокет с типом AF_ALG, говорите ядру «дай мне AES-GCM», передаёте данные через обычный read/write — и получаете шифрованные обратно. Никаких прав и привилегий не требуется: интерфейс задумывался для удобства, чтобы криптографию можно было дёргать из любой программы.
Уязвимый компонент — модуль algif_aead, обработчик AEAD-операций (Authenticated Encryption with Associated Data — это AES-GCM, ChaCha20-Poly1305 и подобные алгоритмы). В нём в 2017 году появилась оптимизация: вместо того чтобы копировать данные пользователя в служебный буфер, ядро стало работать прямо со страницами page-cache — кэшем файловой системы. Идея была разумной: убрать лишнюю копию, ускорить шифрование больших файлов. Через девять лет выяснилось, чем это обернулось.
Технический разбор: четыре байта в чужой странице
Атака собирается из двух примитивов. Первый — AF_ALG-сокет, который из-за оптимизации 2017 года готов писать результат шифрования в любую page-cache-страницу, переданную в scatterlist назначения. Второй — системный вызов splice(), через который непривилегированный процесс может протолкнуть в этот scatterlist страницу из произвольного файла, который разрешено читать.
Контролировать запись на байт получается так: исследователи подбирают входные данные для AEAD-операции так, чтобы первые четыре байта зашифрованного результата совпали с нужным значением. Эти четыре байта ядро без проверок пишет в указанную страницу — а страница, благодаря splice(), оказывается куском исполняемого файла. Цель — /usr/bin/su: в нужное место кода вставляется четыре байта, которые превращают проверку пароля в return 0. После этого su root пускает любого пользователя без пароля.
Mainline-фикс — коммит a664bf3d603d, влитый 1 апреля 2026 года, — отменяет ту самую оптимизацию 2017 года: модуль снова работает через служебный буфер, и страницы page-cache в scatterlist назначения больше не попадают.
На дистрибутивах с включённым AF_ALG это даже не эксплойт в классическом смысле. Это корректное использование документированного интерфейса ядра — просто результат корректного использования оказывается «root».
Кого это касается
Подтверждённые исследователями системы (с конкретной версией ядра, на которой воспроизвели PoC):
- Ubuntu 24.04 LTS — ядро 6.17.0-1007-aws
- Amazon Linux 2023 — ядро 6.18.8-9.213.amzn2023
- RHEL 10.1 — ядро 6.12.0-124.45.1.el10_1
- SUSE Linux Enterprise 16 — ядро 6.12.0-160000.9-default
Все остальные дистрибутивы с ядром, собранным между 2017 и текущим релизом, скорее всего, тоже уязвимы: Debian, Arch Linux, Fedora, Rocky Linux, AlmaLinux, Oracle Linux, плюс embedded-сборки. Не затронуто только ядро Ubuntu 26.04 «Resolute» и новее.
Статус патчей у вендоров на 30 апреля 2026 года:
- Ubuntu 20.04–24.04 — патча нет
- Amazon Linux 2023 — патча нет
- SUSE Linux Enterprise — патча нет
- Red Hat Enterprise Linux — статус неизвестен
В первую очередь под угрозой — Kubernetes-кластеры и CI/CD-раннеры, где запускаются чужие контейнеры или скрипты: им достаточно AF_ALG-сокета, доступного по умолчанию, чтобы получить root на ноде. Облачные ВМ, где соседствуют разные пользователи и где shared-tenancy не отключён, тоже в группе риска.
Что делать прямо сейчас
Отключить модуль algif_aead
CERT-EU рекомендует отключать модуль персистентно — через modprobe.d и сразу же выгрузить из памяти, если он уже загружен:
После этого попытка загрузить модуль вернётся ошибкой, и приложения не смогут открыть AF_ALG-сокет с типом aead. На dm-crypt/LUKS, kTLS, IPsec/XFRM, OpenSSL, GnuTLS, NSS и SSH это никак не повлияет — все они работают через другие интерфейсы. Под удар попадают только программы, которые явно настроены на afalg-движок или открывают сокеты aead/skcipher/hash напрямую. Проверить, кто использует, можно так:
Заблокировать AF_ALG в контейнерах через seccomp
Эксплойт начинается с открытия AF_ALG-сокета, поэтому в контейнерах достаточно запретить системный вызов socket() для этого семейства. CERT-EU рекомендует это делать на всех контейнеризованных нагрузках вне зависимости от того, пропатчено ядро или нет — это работает и как mitigation, и как defense-in-depth. Минимальный seccomp-профиль:
Значение 38 — это константа AF_ALG в linux/socket.h. Профиль подключается через --security-opt seccomp=... в Docker и Podman, в Kubernetes — через securityContext.seccompProfile.
Часто задаваемые вопросы
Безопасны ли мои Kubernetes-ноды?
Если у вас Ubuntu, RHEL, SUSE или Amazon Linux с ядром версии 4.x–6.18 и на нодах могут запускаться чужие поды, ноды уязвимы. Проверьте версию ядра через uname -r, выполните mitigation из раздела «Что делать прямо сейчас» и подключите seccomp-профиль с блокировкой AF_ALG. Управляемые Kubernetes-сервисы (EKS, GKE, AKS) выкатят патч в течение нескольких дней — следите за бюллетенями вашего провайдера.
Можно ли просто отключить модуль и не возвращаться к этому?
В большинстве серверных и десктопных сценариев — да. Modprobe-блок останется после перезагрузки и не сломает ни disk encryption, ни TLS, ни SSH. Но это временная мера: лучше всё-таки накатить пропатченное ядро, когда вендор его выкатит. Без модуля перестанут работать приложения, которые специально завязаны на afalg-engine — это редкий случай, но проверить стоит.
Откуда взялась эта дыра — она новая или старая?
Старая. Уязвимость живёт с лета 2017 года — её ввёл коммит 72548b093ee3, оптимизировавший работу algif_aead со страницами page-cache. Восемь с половиной лет в любом серверном ядре Linux был спокойный путь к root для локального атакующего. Mainline-фикс (a664bf3d603d) — это просто revert той оптимизации.
PoC уже в интернете — насколько это плохо?
Уже плохо. Рабочий эксплойт лежит на copy.fail с 29 апреля, и для запуска не нужно ничего экзотического: достаточно Python 3.10+ из стандартной библиотеки и непривилегированного шелла. Если у вас на машине запускается что-то от пользователей или CI-задач, нужно действовать сегодня.
Можно ли эксплуатировать эту дыру удалённо?
Нет. Это локальная privilege escalation: атакующему нужен уже какой-то непривилегированный код на машине — пользовательский шелл, поды Kubernetes, контейнер CI-задачи, скрипт от незаслуживающего доверия пользователя. Без этого Copy Fail не сработает. Но в облачной инфраструктуре, где локальный непривилегированный доступ — норма, разница между «локально» и «удалённо» стирается.
Выводы
Copy Fail — типовая история про оптимизацию ради скорости, которая девять лет хранила в себе одну из самых удобных лазеек к root. Ничего сложного для атакующего, ничего сильно ломающегося при mitigation — а вендоры всё равно опаздывают с патчами. До тех пор, пока в apt update или dnf upgrade не появится новое ядро, защита лежит на админах: один modprobe-блок и один seccomp-профиль закрывают вектор полностью.
Источники: CERT-EU Security Advisory 2026-005, copy.fail — описание и PoC исследователей, трекеры вендоров: Ubuntu, SUSE, Red Hat.
Проверьте свои ноды и контейнеры прямо сейчас — пропатченных ядер для большинства дистрибутивов всё ещё нет, и ситуация не изменится в ближайшие сутки.