ufm: (Default)
[personal profile] ufm
Repost

Уязвимости Dirty Frag, изменяющие страничный кэш для получения root в любых дистрибутивах Linux

В ядре Linux выявлены две уязвимости (https://github.com/V4bel/dirtyfrag), по своей сути аналогичные несколько дней назад раскрытой уязвимости Copy Fail (https://www.opennet.ru/opennews/art.shtml?num=65325), но проявляющиеся в других подсистемах - xfrm-ESP и RxRPC. Серии уязвимостей присвоено кодовое имя Dirty Frag (https://dirtyfrag.io/) (также встречается упоминание Copy Fail 2). Уязвимости позволяют непривилегированному пользователю получить права root, перезаписав данные процесса в страничном кэше. Доступен эксплоит (https://github.com/V4bel/dirtyfrag/blob/master/exp.c), работающий во всех актуальных дистрибутивах Linux. Информация об уязвимости раскрыта до публикации исправлений, но есть обходной метод блокирования проблемы.

Dirty Frag охватывает две разные уязвимости: первая в модуле xfrm-ESP (https://docs.kernel.org/networking/xfrm/index.html), используемом для ускорения операций шифрования в IPsec с использованием протокола ESP (Encapsulating Security Payload), а вторая в драйвере RxRPC (https://docs.kernel.org/networking/rxrpc.html), реализующем семейство сокетов AF_RXRPC и одноимённый RPC-протокол, работающий поверх UDP. Каждая из уязвимостей по-отдельности позволяет добиться получения прав root. Уязвимость в xfrm-ESP проявляется в ядре Linux с января 2017 года (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cac2661c53f3), а уязвимость в RxRPC - с июня 2023 года (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2dc334f1a63a). Обе проблемы вызваны оптимизациями, допускающими прямую запись в страничный кэш.

Для эксплуатации уязвимости в xfrm-ESP у пользователя должны быть права на создание пространств имён, а для эксплуатации уязвимости в
RxRPC должна быть возможность загрузки модуля ядра rxrpc.ko. Например, в Ubuntu в правилах AppArmor непривилегированному пользователю запрещено создание пространств имён, но по умолчанию загружается модуль rxrpc.ko. В каких-то дистрибутивах отсутствует модуль rxrpc.ko, а но не блокируется создание пространств имён. Выявивший проблему исследователь подготовил комбинированный эксплоит, способный атаковать систему через обе уязвимости, что позволяет эксплуатировать проблему во всех крупных дистрибутивах. Работа эксплоита подтверждена в 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 c ядром 6.12.0-224, AlmaLinux 10 с ядром 6.12.0-124.52.3 и Fedora 44 с ядром 6.19.14-300.

Как и в случае с уязвимостью Copy Fail, проблемы в xfrm-ESP и RxRPC вызваны (https://github.com/V4bel/dirtyfrag/blob/master/assets/write-up.md) выполнением расшифровки данных по месту c
использованием функции splice(), передающей данные между файловыми дескрипторами и каналами (pipe) без копирования, путём передачи ссылок на элементы в страничном кэше. Смещения для операции записи рассчитывались без должных проверок, учитывающих использование прямой ссылки на элементы в страничном кэше, что позволяло через отправку специально оформленных запросов перезаписать 4 байта по выбранному смещению и изменить находящееся страничном кэше содержимое любого файла.

Все операции чтения из файлов в первую очередь отдают содержимое из страничного кэша. В случае модификации данных в страничном кэше операции чтения из файла приведут к возвращению не реально хранимой на накопителе информации, а подменённых данных. Эксплуатация уязвимости сводится к изменению страничного кэша для исполняемого файла с флагом suid root. Например, для получения прав root можно прочитать исполняемый файл /usr/bin/su для его помещения в страничный кэш, после чего добиться подстановки своего кода в загруженное в страничный кэш содержимого этого файла. Последующий запуск утилиты "su" приведёт к тому, что в память будет загружен не оригинальный исполняемый файл с накопителя, а изменённая копия из страничного кэша.

Раскрытие информации об уязвимостях и скоординированный выпуск обновлений с устранением проблем было намечено на 12 мая, но из-за
утечки информации (https://www.openwall.com/lists/oss-security/2026/05/07/12) сведения об уязвимости пришлось опубликовать (https://www.openwall.com/lists/oss-security/2026/05/07/8) до публикации исправлений. В конце апреля в публичном списке рассылки netdev были опубликованы патчи к rxrpc (https://lore.kernel.org/all/afKV2zGR6rrelPC7@v4bel/), ipsec (https://lore.kernel.org/all/afLDKSvAvMwGh7Fy@v4bel/) и xfrm (https://lore.kernel.org/all/20260504073403.38854-1-h3xrabbit@gmail.com/), без упоминания, что они связаны с устранением уязвимости. 5 мая мэйнтейнер подсистемы IPsec принял в git-репозиторий netdev изменение (https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4) c предлагаемым исправлением в модуле xfrm-esp, описание к которому во многом повторяло описание проблемы, приведшей к уязвимости Copy Fail в модуле algif_aead. Один из исследователей безопасности заинтересовался этим исправлением, сумел создать (https://afflicted.sh/blog/posts/copy-fail-2.html) рабочий эксплоит и опубликовал его (https://github.com/0xdeadbeefnetwork/Copy_Fail2-Electric_Boogaloo), не зная о том, что на раскрытие сведений о проблеме до 12 мая введено эмбарго.

Обновления с исправлениями для ядра Linux и пакетов с ядром в дистрибутивах пока не опубликованы, но доступны устраняющие проблемы патчи - xfrm-esp (https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4) и rxrpc (https://lore.kernel.org/all/afKV2zGR6rrelPC7@v4bel/). CVE-идентификаторы не присвоены, что усложняет отслеживание обновления пакетов в дистрибутивах. В качестве обходного пути защиты можно заблокировать загрузку модулей ядра esp4, esp6 и rxrpc:

sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; true"



Источник: https://www.opennet.ru/opennews/art.shtml?num=65395 (https://www.opennet.ru/opennews/art.shtml?num=65395)

https://www.opennet.ru/opennews/art.shtml?num=65395
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting