Домой Новости Уязвимости Dirty Frag в Linux дают root-права через кэш

Уязвимости Dirty Frag в Linux дают root-права через кэш

Критическая серия уязвимостей Dirty Frag в ядре Linux позволяет непривилегированным пользователям повысить привилегии до root через манипуляции со страничный кэшем.

Уязвимости Dirty Frag в ядре Linux
Иллюстрация уязвимостей в Linux Источник: linux.org.ru

В ядре Linux обнаружены две уязвимости, которые концептуально схожи с недавно раскрытой брешью Copy Fail, но затрагивают другие подсистемы — xfrm-ESP и RxRPC. Данной серии уязвимостей присвоено общее кодовое имя Dirty Frag (также известное как Copy Fail 2). Ошибки безопасности позволяют обычному непривилегированному пользователю получить максимальные права root посредством перезаписи данных процесса в страничном кэше. На данный момент уже подготовлен и доступен рабочий эксплоит, функционирующий во всех популярных дистрибутивах Linux. Информация о проблеме была раскрыта до официального выхода патчей, однако существуют временные обходные пути для защиты систем.

Суть уязвимостей Dirty Frag

Комплекс уязвимостей Dirty Frag состоит из двух независимых векторов:

  • Первая уязвимость локализована в модуле xfrm-ESP, который применяется для ускорения операций шифрования в стеке IPsec с использованием протокола ESP (Encapsulating Security Payload). Данная ошибка присутствует в ядре Linux с января 2017 года.
  • Вторая уязвимость кроется в драйвере RxRPC, отвечающем за реализацию семейства сокетов AF_RXRPC и одноименного RPC-протокола поверх UDP. Эта проблема затрагивает систему с июня 2023 года.

Каждая из уязвимостей по отдельности открывает путь к повышению привилегий до root. Обе бреши стали следствием специфических оптимизаций, допускающих прямую запись в страничный кэш оперативной памяти.

Особенности эксплуатации и затронутые дистрибутивы

Для успешной атаки через вектор xfrm-ESP злоумышленник должен обладать правами на создание пространств имён (namespaces). В то же время, эксплуатация уязвимости RxRPC требует возможности загрузки модуля ядра rxrpc.ko.

В качестве примера можно привести дистрибутив Ubuntu: правила AppArmor запрещают непривилегированным пользователям создавать пространства имён, однако модуль rxrpc.ko загружается по умолчанию. В других операционных системах ситуация может быть противоположной — создание пространств имён не блокируется, но отсутствует модуль RxRPC.

Исследователь безопасности, обнаруживший проблему, создал комбинированный эксплоит, использующий обе уязвимости по очереди. Это позволяет успешно атаковать практически все крупные дистрибутивы Linux. Работоспособность эксплоита была подтверждена на следующих конфигурациях:

  • Ubuntu 24.04.4 с ядром 6.17.0–23
  • RHEL 10.1 с ядром 6.12.0–124.49.1
  • openSUSE Tumbleweed с ядром 7.0.2–1
  • CentOS Stream 10 с ядром 6.12.0–224
  • AlmaLinux 10 с ядром 6.12.0–124.52.3
  • Fedora 44 с ядром 6.19.14–300

Технический механизм атаки через страничный кэш

Аналогично уязвимости Copy Fail, проблемы в xfrm-ESP и RxRPC обусловлены выполнением расшифровки данных на месте с помощью системного вызова splice(). Данная функция осуществляет передачу информации между файловыми дескрипторами и каналами (pipe) без дополнительного копирования, оперируя прямыми ссылками на элементы в страничном кэше.

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

Архитектура Linux устроена таким образом, что любые операции чтения из файлов в первую очередь обращаются к страничному кэшу. Если данные в нем изменены, система вернет не реальную информацию с накопителя, а поддельный контент. Классический сценарий эксплуатации уязвимости сводится к манипуляциям со страничный кэшем для исполняемых файлов, обладающих флагом SUID root:

  1. Злоумышленник инициирует чтение защищенной утилиты (например, /usr/bin/su), помещая ее в страничный кэш.
  2. С помощью уязвимости в кэш внедряется произвольный вредоносный код.
  3. Последующий запуск утилиты su приводит к загрузке в память измененной копии из кэша вместо оригинального бинарного файла с диска, что обеспечивает выполнение команд с правами суперпользователя.
  4. Преждевременное раскрытие и методы защиты

    Официальный скоординированный релиз патчей и публикация информации об уязвимостях были запланированы на 12 мая, однако из-за утечки данные попали в сеть раньше времени. В конце апреля в публичной рассылке netdev появились патчи для подсистем rxrpc, ipsec и xfrm без явного указания на их исправительный характер. 5 мая мейнтейнер IPsec принял изменения в git-репозиторий, описание которых напоминало историю с уязвимостью Copy Fail. Сторонний исследователь обратил внимание на код, самостоятельно собрал рабочий эксплоит и опубликовал его, не подозревая о действующем эмбарго.

    На момент публикации полноценные пакеты с обновлениями ядра в дистрибутивах еще не были выпущены, однако разработчики подготовили отдельные исправляющие патчи для xfrm-esp и rxrpc. Официальные идентификаторы CVE на момент обнародования информации не присвоены, что временно затрудняет автоматическое отслеживание апдейтов.

    В качестве временной меры предосторожности администраторы могут принудительно заблокировать загрузку уязвимых модулей ядра esp4, esp6 и rxrpc.

    Источник: https://www.linux.org.ru