CVE-2026-31431 (Copy Fail): уязвимость ядра Linux — кому угрожает и как устранить
CVE-2026-31431 (Copy Fail) — уязвимость ядра Linux, позволяющая локальному пользователю получить root-права за считанные секунды без гонок, ретраев и краш-окон. Эксплойт умещается в 732 байта Python-кода и работает на всех основных дистрибутивах с 2017 года.
Уязвимы Ubuntu, RHEL, SUSE, Amazon Linux, а также российские Astra Linux, РЕД ОС и AltLinux. Мы разобрали механизм атаки от перехвата страничного кэша до подмены setuid-бинарника и подготовили пошаговую инструкцию по проверке и устранению.

Ключевой тезис: CVE-2026-31431 — детерминированная ошибка в шаблоне authencesn криптоподсистемы Linux. 4-байтная запись в страничный кэш любого читаемого файла через цепочку AF_ALG + splice() + authencesn. 732-байтный Python-скрипт получает root на всех проверенных дистрибутивах, включая Ubuntu, RHEL, SUSE и Amazon Linux. Файл на диске не меняется — стандартные проверки целостности угрозу пропускают.
Содержание
Что такое CVE-2026-31431 и почему её назвали Copy Fail
CVE-2026-31431 — это логическая ошибка в криптографическом шаблоне authencesn ядра Linux, обнаруженная исследовательской группой Xint Code. Уязвимость позволяет непривилегированному локальному пользователю выполнить контролируемую 4-байтную запись в страничный кэш любого доступного для чтения файла. Файл на диске остаётся неизменным, но ядро использует кэшированную в памяти версию — именно её читают read(), mmap() и execve().
Название Copy Fail отражает суть: механизм передачи данных между файловыми дескрипторами через splice() не дублирует страницы, а передаёт ссылки. Когда страничный кэш файла попадает в scatterlist криптографической операции как часть выходного буфера, алгоритм authencesn записывает 4 байта за пределы легитимной области вывода — прямо в кэшированную страницу целевого файла. Стандартные инструменты проверки целостности по контрольным суммам диска угрозу не обнаруживают.
В отличие от Dirty Cow (CVE-2016-5195), требовавшей выигрыша гонки в подсистеме VM и часто вызывавшей крах системы, Copy Fail срабатывает детерминированно — без гонок, ретраев и окон нестабильности. Dirty Pipe (CVE-2022-0847) был версионно-специфичен и требовал точной манипуляции буферами каналов. Copy Fail — прямолинейный логический дефект, работающий на всех архитектурах без подбора смещений и перекомпиляции.
Ключевые характеристики Copy Fail: переносимость — один скрипт на всех протестированных дистрибутивах (Ubuntu, RHEL, SUSE, Amazon Linux) без модификаций; компактность — 732 байта Python-кода со стандартными библиотеками (os, socket, zlib); скрытность — запись идёт в обход обычного пути VFS, страница не помечается ядром как «грязная»; межконтейнерность — страничный кэш разделяется между контейнерами на хосте, что делает уязвимость вектором выхода за пределы контейнера.

Затронутые системы: Ubuntu, RHEL и российские Astra Linux, РЕД ОС, AltLinux
Уязвимости подвержены все основные дистрибутивы Linux, выпущенные с 2017 года. Именно тогда патч 72548b093ee3 оптимизировал algif_aead.c для выполнения AEAD-операций «на месте» (in-place). До этого момента страничный кэш находился в scatterlist источника (только чтение), и запись authencesn уходила в пользовательский буфер — уязвимости не существовало. Хронология создания проблемы: авторы authencesn (2011) использовали вызывающий буфер как черновик; разработчики AF_ALG (2015) добавили splice()-путь, но использовали раздельные scatterlist; оптимизация 2017 года объединила src и dst — и три безопасных по отдельности решения создали уязвимость.
Среди зарубежных дистрибутивов подтверждена уязвимость всех LTS-релизов Ubuntu с 16.04, Red Hat Enterprise Linux 7/8/9, SUSE Linux Enterprise Server 12/15 и Amazon Linux 2. Эксплойт проверен исследователями на всех четырёх платформах — работает стабильно без модификаций. Единственное требование: Python 3.10+ для os.splice. Никаких скомпилированных нагрузок и внешних зависимостей.
Российские операционные системы в зоне риска. Astra Linux Special Edition (релизы 1.6, 1.7) использует ядро 4.15/5.4/5.10 с модулем algif_aead. РЕД ОС (7.3 на ядре 5.10, версия 8 на ядре 6.1) и AltLinux (ветки p9, p10, p11) также включают проблемную комбинацию. Мы проверили типовые конфигурации ядра в этих ОС: CONFIG_AF_ALG либо в статусе =y (вкомпилирован), либо =m (доступен для загрузки). Отключение AF_ALG на уровне конфигурации — исключение, а не правило.
CVE-2026-31431 не зависит от архитектуры процессора — x86_64, ARM64, aarch64 и другие платформы затронуты одинаково. Страничный кэш реализован единообразно на всех архитектурах, а код authencesn и algif_aead написан на C без ассемблерных вставок. Любой процессор, на котором работает Linux, потенциально уязвим.

Кому не нужно беспокоиться
Не все системы находятся под непосредственной угрозой. Если ваша организация использует ядро, собранное без поддержки AF_ALG (CONFIG_AF_ALG=n), уязвимость неэксплуатируема. Проверить конфигурацию: zgrep CONFIG_AF_ALG /proc/config.gz или grep CONFIG_AF_ALG /boot/config-$(uname -r). Значение =m или =y означает доступность интерфейса. Отсутствие записи (CONFIG_AF_ALG is not set) — система неуязвима.
Системы с ядрами, собранными до 2017 года (ветки младше 4.9), не подвержены уязвимости — оптимизация in-place для algif_aead в них отсутствует, а значит страничный кэш никогда не попадает в выходной scatterlist. Однако такие ядра давно не получают обновлений безопасности и содержат десятки других известных уязвимостей. Эксплуатировать систему на ядре 3.x или 4.4 в 2026 году — более серьёзный риск, чем CVE-2026-31431.
Для оценки реального риска учитывайте модель угроз. Атака требует локального доступа — непривилегированной учётной записи на целевом хосте. Системы, доступные только по SSH с ключевой аутентификацией для доверенных администраторов, имеют существенно меньшую поверхность атаки. Но если на сервере работают многопользовательские сервисы (хостинг, CI/CD-раннеры, терминальные серверы, учебные среды), риск высок — любой студент, стажёр или клиент хостинга с шелл-доступом может получить root.
Для контейнерных сред важно понимать: пространства имён не защищают. Страничный кэш — ресурс уровня ядра, разделяемый всеми процессами на хосте. Даже если атакующий заперт в контейнере с минимальными capabilities, он может модифицировать страничный кэш setuid-бинарника на хосте и получить root за пределами контейнера. Подробный разбор этого вектора — во второй части отчёта Xint Code о контейнерном побеге.
Технический механизм: как взаимодействие authencesn, AF_ALG и splice() создаёт уязвимость
Цепочка CVE-2026-31431 соединяет три независимых механизма ядра Linux: сокеты AF_ALG, системный вызов splice() и криптографический шаблон authencesn. Каждый компонент по отдельности корректен — проблема возникает исключительно на их пересечении. Понимание этого пересечения критично для грамотного выбора мер защиты.
Компонент 1: AF_ALG. Это тип сокета, предоставляющий криптографическую подсистему ядра непривилегированным пользовательским процессам. Открыв сокет, привязав его к шаблону AEAD — например, authencesn(hmac(sha256),cbc(aes)) — и установив ключ, пользователь может выполнять шифрование и расшифрование произвольных данных. Никаких привилегий не требуется: AF_ALG доступен любому процессу по умолчанию. Это фундаментальное проектное решение, не баг.
Компонент 2: splice(). Системный вызов splice() передаёт данные между файловыми дескрипторами и каналами без копирования — страницы страничного кэша передаются по ссылке. Когда пользователь направляет файл через splice() в канал, а затем в сокет AF_ALG, входной scatterlist сокета содержит прямые ссылки на физические страницы кэша ядра. Страницы не дублируются — scatterlist указывает на те же данные, которые read(), mmap() и execve() используют для доступа к файлу.
Компонент 3: оптимизация in-place. Патч 72548b093ee3 (2017) в algif_aead.c объединил входной и выходной scatterlist для экономии памяти. Теперь для расшифрования AAD и шифротекст копируются через memcpy_sglist из входного scatterlist в выходной буфер, но тег аутентификации (последние authsize байт входного scatterlist) не копируется. Вместо этого его scatterlist-записи цепляются к выходному scatterlist через sg_chain() — они по-прежнему указывают на страницы кэша целевого файла. После этого req->src и req->dst указывают на одну и ту же голову объединённой цепочки: буфер пользователя плюс страничный кэш.
Компонент 4: authencesn. Криптошаблон authencesn, разработанный для IPsec с поддержкой Extended Sequence Numbers (RFC 4303), использует выходной буфер вызывающего кода как рабочую область для перестановки байтов ESN. В crypto_authenc_esn_decrypt() вызов scatterwalk_map_and_copy записывает 4 байта seqno_lo на смещении assoclen + cryptlen — за пределы AEAD-тега, прямо в область, которая при in-place режиме указывает на страничный кэш. После завершения HMAC-проверки (которая завершается ошибкой, поскольку шифротекст поддельный) seqno_lo считывается обратно для восстановления AAD, но оригинальные байты на позиции записи не восстанавливаются. Четырёхбайтная запись сохраняется в страничном кэше.
Атакующий полностью контролирует три параметра: выбор файла (любой доступный на чтение), целевое смещение внутри файла (через комбинацию splice offset, splice length и assoclen) и записываемое значение (seqno_lo берётся из байт 4–7 AAD, переданного атакующим в sendmsg). Повторяя эту процедуру для каждого 4-байтного фрагмента, злоумышленник побайтово перезаписывает секцию .text setuid-бинарника, после чего execve() загружает модифицированную версию и передаёт управление шелл-коду.
Как проверить, уязвима ли ваша система
CVE-2026-31431 диагностируется тремя командами без привилегий. Проверка начинается с определения версии ядра: uname -r. Все версии от 4.9 до актуальных (включая 6.x) потенциально уязвимы. Исправленные сборки появятся по мере выпуска патчей дистрибутивами — отслеживайте бюллетени безопасности вашего вендора и ФСТЭК России (bd.fstec.ru).
Далее проверьте доступность модуля algif_aead: lsmod | grep algif_aead. Если модуль загружен — интерфейс активен. Отсутствие в lsmod не гарантирует защиту: модуль может быть вкомпилирован статически. Проверьте modprobe --dry-run algif_aead — успешное выполнение означает, что модуль может быть загружен. Окончательный вердикт даёт команда: grep authencesn /proc/crypto. Наличие строки с authencesn в /proc/crypto означает, что шаблон зарегистрирован и доступен.
Мы подготовили безопасный однострочник для быстрой проверки — он не выполняет запись и пригоден для промышленных систем. Успешное выполнение без исключения означает доступность AF_ALG и authencesn — система уязвима. Ошибка Address family not supported или No such device говорит о недоступности интерфейса.
Для массовой проверки в организациях мы рекомендуем скрипт, обходящий все хосты по SSH и собирающий вывод трёх команд: версия ядра, наличие authencesn в /proc/crypto и статус модуля algif_aead. На 100 серверов такая проверка занимает менее 5 минут при параллельном запуске. В Ansible это делается модулем shell с register и последующей фильтрацией результатов по критерию наличия authencesn. Для сред с оркестрацией Kubernetes проверьте worker-узлы: именно они разделяют страничный кэш с контейнерами.
# 1. Версия ядра (≥4.9 → потенциально уязвимо)
uname -r
# 2. Загружен ли algif_aead прямо сейчас
lsmod | grep algif_aead
# 3. Доступен ли модуль для загрузки (CONFIG_AF_ALG=m)
modprobe --dry-run algif_aead
# 4. Зарегистрирован ли authencesn в криптосистеме
grep authencesn /proc/crypto
Как устранить уязвимость: обновление ядра и временные меры
Единственный надёжный способ устранения CVE-2026-31431 — обновление ядра до версии с исправлением. На момент публикации патч проходит включение в mainline-ядро и процедуру бэкпортирования в стабильные ветки. Следите за обновлениями вашего дистрибутива. Ниже — проверенные команды для основных платформ.
Зарубежные дистрибутивы. Ubuntu/Debian: sudo apt update && sudo apt upgrade linux-image-generic -y && sudo reboot. RHEL/Rocky/AlmaLinux: sudo dnf update kernel -y && sudo reboot. SUSE: sudo zypper update kernel-default -y && sudo reboot. Amazon Linux 2: sudo yum update kernel -y && sudo reboot. После перезагрузки обязательно проверьте: uname -r должно показать новую версию ядра.
Российские дистрибутивы. Astra Linux: sudo apt update && sudo apt dist-upgrade -y && sudo reboot. Внимание: в Astra Linux Special Edition обновление ядра может потребовать повторной сертификации согласно приказу ФСТЭК — согласуйте процедуру с отделом ИБ. РЕД ОС: sudo dnf update kernel -y && sudo reboot. AltLinux: sudo apt-get update && sudo apt-get install kernel-image-std-def -y && sudo reboot. Для всех трёх дистрибутивов рекомендуем предварительно создать снапшот или резервную копию /boot на случай отката.
Временные меры (до установки обновления, снижают, но не исключают риск):
(1) Выгрузка модуля algif_aead: sudo rmmod algif_aead или sudo modprobe -r algif_aead. Работает только если модуль загружен динамически. Блокировка повторной загрузки: echo blacklist algif_aead | sudo tee /etc/modprobe.d/block-algif_aead.conf.
(2) Ограничение локального доступа: отключение неиспользуемых учётных записей, аудит SSH-доступа, двухфакторная аутентификация.
(3) Для контейнерных сред: сегментация хостов по уровню доверия — не размещайте контейнеры с ненадёжным кодом на тех же узлах, где работают критичные системные сервисы.
(4) Мониторинг использования AF_ALG: аудит через auditd или eBPF-программы, отслеживающие создание сокетов AF_ALG непривилегированными процессами.
График внедрения: интернет-доступные системы — немедленно (день 0); хосты с множеством локальных пользователей — день 1; внутренние серверы с ограниченным доступом — день 3; изолированные системы за межсетевым экраном — в рамках ближайшего регламентного окна, но не позднее 7 дней. Для систем, где перезагрузка невозможна без согласования, инициируйте процедуру немедленно — ожидание патча не отменяет необходимость перезагрузки после его установки.
# === Зарубежные дистрибутивы ===
# Ubuntu / Debian
sudo apt update && sudo apt upgrade linux-image-generic -y && sudo reboot
# RHEL / Rocky / AlmaLinux
sudo dnf update kernel -y && sudo reboot
# SUSE / SLES
sudo zypper update kernel-default -y && sudo reboot
# Amazon Linux 2
sudo yum update kernel -y && sudo reboot
# === Российские дистрибутивы ===
# Astra Linux
sudo apt update && sudo apt dist-upgrade -y && sudo reboot
# РЕД ОС
sudo dnf update kernel -y && sudo reboot
# AltLinux (p9 / p10 / p11)
sudo apt-get update && sudo apt-get install kernel-image-std-def -y && sudo reboot
# === Временные меры (до установки патча) ===
# Выгрузка algif_aead (если загружен динамически)
sudo rmmod algif_aead
# Запрет автозагрузки после перезагрузки
echo blacklist algif_aead | sudo tee /etc/modprobe.d/block-algif_aead.conf
Дедлайн CISA KEV и что это означает для организаций
CISA (Агентство кибербезопасности и инфраструктурной безопасности США) включила CVE-2026-31431 в каталог Known Exploited Vulnerabilities (KEV). Это решение имеет конкретные последствия для организаций любого масштаба. Согласно директиве BOD 22-01, все федеральные агентства США обязаны устранить уязвимость в установленный срок — стандартная практика KEV предполагает 14–21 день с момента включения в каталог. Для государственных учреждений, работающих с американскими партнёрами, это означает обязательное применение патча или компенсирующих мер.
Для частных организаций включение в KEV не накладывает прямых юридических обязательств, но является сильным сигналом приоритизации. CISA включает в каталог только уязвимости с подтверждённой эксплуатацией «в дикой природе» (in the wild). Факт включения Copy Fail в KEV означает три вещи: PoC-эксплойт общедоступен, активная эксплуатация подтверждена или неизбежна, а CISA рассматривает уязвимость как представляющую «значительный риск для федерального предприятия». Затягивание с обновлением превращает известную уязвимость в гарантированный вектор компрометации.
С точки зрения compliance, наличие неустранённой уязвимости из каталога KEV создаёт риски при аудитах. Стандарты PCI DSS (требование 6.1), ГОСТ Р 57580 и 152-ФЗ предписывают устранение критических уязвимостей в установленные сроки. Аудитор, обнаруживший неустранённую KEV-уязвимость со статусом «активно эксплуатируемая», с высокой вероятностью зафиксирует несоответствие. Мы рекомендуем включить CVE-2026-31431 в процесс управления уязвимостями с приоритетом Critical/CVSS 10 и отслеживать статус через бюллетени ФСТЭК России.
Практический план действий для руководителя IT-отдела, укладывающийся в типовой KEV-дедлайн (14 дней):
День 1 — инвентаризация всех Linux-хостов, проверка каждого описанным выше однострочником, формирование реестра уязвимых систем.
День 2–3 — применение временных мер (rmmod algif_aead, blacklist модуля) на интернет-доступных системах.
День 4–7 — тестирование обновления ядра на стенде, проверка совместимости с корпоративным ПО.
День 8–10 — плановое обновление продуктовых систем с предварительным уведомлением пользователей.
День 11–14 — верификация: повторная проверка всех хостов, подтверждение отсутствия authencesn в /proc/crypto, документирование в журнале управления инцидентами.
Итог
- CVE-2026-31431 (Copy Fail) — детерминированная уязвимость: 732-байтный Python-скрипт получает root на любом дистрибутиве с 2017 года без гонок и ретраев
- Под угрозой все основные Linux-дистрибутивы, включая российские Astra Linux, РЕД ОС и AltLinux; проверка уязвимости делается одной командой
- Единственный надёжный метод устранения — обновление ядра; временные меры (rmmod algif_aead) снижают, но не исключают риск
- Включение в каталог CISA KEV означает подтверждённую эксплуатацию в реальных атаках — внедряйте исправление до истечения дедлайна
- Контейнерная изоляция не защищает: страничный кэш разделяется между всеми процессами на хосте — CVE-2026-31431 работает как вектор межконтейнерной эскалации
Часто задаваемые вопросы
Ответы на часто задаваемые вопросы по теме статьи.
Да. Astra Linux Special Edition (релизы 1.6, 1.7) использует версии ядра 4.15/5.4/5.10, включающие уязвимую комбинацию AF_ALG + authencesn + splice(). Модуль algif_aead либо вкомпилирован (CONFIG_AF_ALG=y), либо доступен для загрузки (CONFIG_AF_ALG=m). Проверьте вашу систему: grep authencesn /proc/crypto — наличие записи означает уязвимость. Обновление выполняется через sudo apt update && sudo apt dist-upgrade.
Установите обновление ядра от поставщика дистрибутива. Ubuntu/Debian: sudo apt upgrade linux-image-generic -y && sudo reboot. RHEL: sudo dnf update kernel -y && sudo reboot. Astra Linux: sudo apt dist-upgrade -y && sudo reboot. Временная мера: sudo rmmod algif_aead && echo blacklist algif_aead | sudo tee /etc/modprobe.d/block-algif_aead.conf. После обновления обязательна перезагрузка.
algif_aead — модуль ядра Linux, реализующий интерфейс AF_ALG для алгоритмов AEAD (Authenticated Encryption with Associated Data). Предоставляет операции шифрования и расшифрования через сокеты, доступен непривилегированным пользователям по умолчанию. В комбинации с криптошаблоном authencesn и системным вызовом splice() создаёт уязвимость CVE-2026-31431, позволяя записывать данные в страничный кэш произвольного файла.
Все версии ядра с 4.9 (2017 год) до актуальных, включая ветки 5.x и 6.x, при наличии AF_ALG и authencesn в конфигурации. Уязвимость не зависит от архитектуры (x86_64, ARM64, aarch64). Ключевой признак — наличие authencesn в /proc/crypto. Системы с CONFIG_AF_ALG=n не подвержены атаке. Ядра младше 4.9 также неуязвимы, но их использование небезопасно по другим причинам.
Константин Тютюнник, основатель IT For Prof. 15 лет опыта в IT-аутсорсинге для B2B. Эксперт по DevOps, Linux-инфраструктуре и импортозамещению.
Уязвимость CVE-2026-31431 — не рядовой CVE, а критический вектор компрометации ядра. Оставленная без внимания, она даёт злоумышленнику root-доступ за секунды. Наша команда проводит аудит Linux-инфраструктуры, устанавливает обновления ядра и внедряет компенсирующие меры для российских дистрибутивов. Запросите экспресс-проверку вашей инфраструктуры на CVE-2026-31431 — мы выполним диагностику в течение 24 часов и предоставим план устранения.



