Уязвимости Dirty Frag, които променят страницовия кеш за получаване на root в каквито и да е дистрибуции на Linux

В ядрото на Linux са открити две уязвимости, подобни на наскоро разкритата уязвимост Copy Fail, но проявяващи се в други подсистеми – xfrm-ESP и RxRPC. Серията уязвимости е получила кодовото име Dirty Frag (появява се и наименованието Copy Fail 2). Уязвимостите позволяват на непривилегирован потребител да получи права root, преписвайки данни на процеса в страницовия кеш. Наличен е експлоит, работещ на всички актуални дистрибуции на Linux. Информацията за уязвимостта беше разкрита преди публикуването на корекции, но съществува метод за заобикаляне на проблема.

Dirty Frag обхваща две различни уязвимости: първата е в модула xfrm-ESP, използван за ускоряване на операциите по криптиране в IPsec с помощта на протокола ESP (Encapsulating Security Payload), а втората е в драйвера RxRPC, реализиращ семейството на сокетите AF_RXRPC и одноименния RPC протокол, работещ над UDP. Всяка от уязвимостите поотделно позволява получаване на права root. Уязвимостта в xfrm-ESP се проявява в ядрото на Linux от януари 2017 година, а уязвимостта в RxRPC – от юни 2023 година. И двете проблема са предизвикани от оптимизации, допускащи директно записване в страницовия кеш.

За експлоатацията на уязвимостта в 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 с ядро 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 байта на избраното отклонение и да се промени съдържанието на всеки файл, намиращ се в страницовия кеш.

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

Разкритията на информация относно уязвимостите и координираното издаване на актуализации с решаване на проблемите беше насрочено за 12 май, но поради изтичане на информация данните за уязвимостта трябваше да бъдат публикувани преди публикуването на корекциите. В края на април в публичния списък за разпространение netdev бяха публикувани пачове за rxrpc, ipsec и xfrm, без споменаване, че те са свързани с решаването на уязвимостта. На 5 май мейнтейнерът на подсистемата IPsec прие в git-репозиториума netdev промяна с предложената корекция в модула xfrm-esp, описанието на която до голяма степен повтаряше описанието на проблема, довел до уязвимостта Copy Fail в модула algif_aead. Един от изследователите по сигурността се заинтересува от тази корекция, успя да създаде работещ експлойт и го публикува, без да знае, че разкритията на информация относно проблема преди 12 май са подложени на ембарго.

Обновления с поправками за ядрото Linux и пакети с ядрото в дистрибуциите все още не са публикувани, но са налични проблемни патчи — xfrm-esp и rxrpc. 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"

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster