Threat Response
Threat Response

Информация об уязвимости Copy Fail, которая позволяет получить root практически на любой современной сборке Linux

Рабочий эксплойт на Python (позже появились и на других языках) реализуется примерно десятью строками кода и использует штатные системные вызовы, которые неотличимы от нормального функционирования системы. Рассказываем, что представляет собой уязвимость CVE-2026-31431 с неофициальным названием Copy Fail, опубликованная 29 апреля. Мы оценили ее применимость для наших продуктов, а также представили способы устранения и детектирования.

Предположительно, корень проблемы – коммит 72548b093ee3, добавленный в ядро Linux в 2017 году. Он внедрил поддержку операций «на месте» (in-place) для AEAD-шифрования в модуле algif_aead, что привело к дефекту обработки буферов. Таким образом, уязвимость затрагивает ядра, выпущенные в период с 2017 по 2026 год. Под угрозой находятся как устаревшие серверные конфигурации, так и актуальные дистрибутивы: Ubuntu, RHEL, отдельные сборки WSL2 и другие системы с загруженным модулем algif_aead.

Суть уязвимости и как работает эксплойт

Криптографический алгоритм authencesn в процессе работы использует часть выделенной памяти как временный буфер и записывает четыре байта напрямую в страницы файлового кэша (page cache). Это дает злоумышленнику возможность контролируемо изменять содержимое кэша любого файла, доступного для чтения.

Рабочий эксплойт – это минималистичный Python-скрипт (~732 байта), который через интерфейс AF_ALG и системный вызов splice() записывает четыре контролируемых байта в кэш, например, исполняемого файла с битом setuid. В результате код программы изменяется непосредственно в оперативной памяти: при следующем запуске она выполняет вредоносные действия с правами суперпользователя. При этом сам файл на диске остается неизменным, что позволяет обойти средства контроля целостности.

Уязвимость нельзя использовать удаленно – атакующему нужен локальный доступ к системе, однако этот дефект может быть использован в цепочке атаки, после получения RCE, или, например, внутренним злоумышленником.

Особую значимость уязвимость приобретает в контексте контейнерных сред. По умолчанию технологии Docker, LXC и Kubernetes предоставляют процессам внутри контейнера доступ к подсистеме AF_ALG, если модуль algif_aead загружен в ядре хоста. Таким образом, Copy Fail создает риск нарушения изоляции контейнера и получения контроля над физической машиной. При этом эксплуатация не требует применения сложных техник, таких как race condition или подбор адресов в памяти, что снижает порог входа для потенциального атакующего. Детектирование атаки затруднено тем, что эксплойт использует исключительно легитимные системные вызовы, которые сложно отличить от штатной работы приложений.

Исправление уже включено в стабильные ветки ядра Linux (коммит a664bf3d603d): разработчики устранили некорректную валидацию буферов при обработке криптографических операций «на месте» (in-place). В случаях, когда оперативное обновление ядра невозможно, рекомендуется временно заблокировать загрузку модуля algif_aead. Для этого необходимо добавить правило install algif_aead /bin/false в директорию конфигурации modprobe.d и выгрузить модуль командой rmmod. В системах, где криптографический интерфейс скомпилирован в ядро (CONFIG_CRYPTO_USER_API_AEAD=y), может потребоваться добавление параметра initcall_blacklist в загрузочные настройки. Дополнительная техническая документация по интерфейсу AF_ALG и уязвимости CVE-2026-31431 доступны в открытых источниках.

Как выявить атаку в случае эксплойта на Python

Оригинальный эксплойт на Python оставляет видимые следы. Обратите внимание на характерные командные строки. Команда sh -c напрямую запускает привилегированные suid-утилиты (su, sudo, mount, umount, passwd, gpasswd, chfn, chsh, newgrp, fusermount3).

Запуск отслеживается по характерным командным строкам:

Также сигналом опасности будет любой процесс Python, запускающий Shell. Вот цепочка процессов, которая является возможным признаком атаки: Python — Shell — привилегированный исполняемый файл. Артефакты запуска исходного эксплойта на Python можно наблюдать на скриншоте:

Обнаружение с помощью SIEM-системы

Ниже представлены рекомендации по детектированию атак в SIEM-системе с использованием журналов событий auditd:

Обнаружение чтения (syscall: openat) бинарных файлов с установленным suid-битом (su, sudo, newgrp, passwd, gpasswd, chfn, mount, umount, fusermount, fusermount3, chsh — список может пополняться) от имени процесса не из /usr/bin, /bin или от имени python. Логирование может быть включено следующим правилом:

-w /usr/bin/su -p r — пример для /usr/bin/su

Обнаружения функции передачи данных splice (syscall: splice) между файловыми дискрипторами после чтения бинарного файла с установленным suid битом (см. выше) от пользователя без root. Логирование для splice может быть включено следующими правилами:

Обнаружение по характерным командным строкам (syscall: execve), где командная строка равна sh -c -- su — пример для /usr/bin/su

Обнаружение создания сокета с параметром SOCK_STREAM=AF_ALG (syscall: socket), где аргумент a0=26. Необходимо учитывать, что в событии auditd значение аргумента указано в шестнадцатеричном виде, а в правиле аудита необходимо указывать в десятичном виде. Логирование может быть включено следующими правилами:

Детектирование продуктами «Лаборатории Касперского»

Как мы упоминали выше, для уязвимости Copy Fail появляются новые эксплойты: помимо первоначальной реализации на языке Python, в открытых репозиториях уже зафиксированы рабочие варианты на языках Go и Rust. Данные реализации могут использовать иные техники обхода защитных механизмов и варьировать последовательность системных вызовов, что требует адаптации правил детектирования.

В связи с этим рекомендуется обратить внимание на аномальную активность, связанную с изменением идентификаторов пользователей (UID) в цепочках процессов. В частности, следует мониторить случаи, когда родительский и дочерний процессы, запущенные от имени неизвестных исполняемых файлов или файлов, нехарактерных для данной инфраструктуры, демонстрируют несоответствие ожидаемых привилегий – например, повышение прав без явного вызова setuid или sudo. Такие события могут свидетельствовать о попытке эксплуатации уязвимостей класса LPE, включая Copy Fail.

Эксперты «Лаборатории Касперского» в настоящее время завершают разработку универсального метода детектирования атак, использующих данную уязвимость.

Эксплуатация атаки через первоначальный PoC, написанный на Python, успешно выявляется с помощью Kaspersky Endpoint Detection and Response Expert.

Данную активность можно выявлять, отслеживая сценарий, при котором процесс оболочки, запущенный не от имени root, инициируется из Python-процесса, а в его аргументах присутствует попытка выполнения команды su или любого другого SUID-бинарного файла.

Такой подход позволяет обнаруживать потенциально опасные действия, когда Python-скрипт пытается инициировать выполнение привилегированных команд через оболочку, не обладая необходимыми правами. Это может указывать на попытки эскалации привилегий или обхода установленных ограничений доступа. KEDR Expert детектирует эту активность с помощью правила possible_lpe_by_python.

Кроме того, как уже отмечалось ранее, данную активность можно выявлять путем анализа характерных командных строк. В частности, внимание следует уделять конструкциям вида sh -c -- su, где устойчивый паттерн sh -c используется для передачи команды оболочке. KEDR Expert детектирует эту активность с помощью правила possible_copy_fail_cve_2026_31431.

Информация об уязвимости Copy Fail, которая позволяет получить root практически на любой современной сборке Linux

Ваш e-mail не будет опубликован. Обязательные поля помечены *

 

Отчеты