В ядрото на Linux е открита уязвимост, подобна на уязвимостите Copy Fail, Dirty Frag и Fragnesia, която позволява на непривилегирован потребител да получи права root, записвайки данни в страничния кеш. Уязвимостта е получила кодово име DirtyDecrypt (проблемата се споменава също и като DirtyCBC). Достъпен е прототип на експлоита.
CVE идентификаторът не е споменат в бележките на експлоита, посочва се единствено, че изследователите са открили проблема на 9 май, след което са уведомили разработчиците на ядрото, които отговорили, че находката им дублира друга отчетна информация за вече поправена уязвимост. Тъй като поправката вече е включена в ядрото, изследователите решили да публикуват разработения от тях експлоит. Съдя по описанието в експлоита, в него се използва уязвимостта CVE-2026-31635, чиято поправка е приета в ядрото през април и е част от версия 7.0.0 и формулирането на версия 6.18.23, създадена на 18 април. Проблемът се проявява от ядрото 6.16.
Както в случая с поредицата уязвимости Dirty Frag, новата уязвимост присъства в драйвера RxRPC, реализиращ семейството сокети AF_RXRPC и одноименния RPC протокол, работещ върху UDP. Проблемът е причинен от грешка при проверка на размера на данните в функцията rxgk_verify_response() — вместо проверка „if (auth_len > len)“, в кода е указано „if (auth_len < len)“, което води до предаване в функцията rxgk_decrypt_skb() на данни с размер, по-голям от допустимия. При изпълнение на функцията rxgk_decrypt_skb() разшифровката на данните се извършва с директно заместване на промените в страничния кеш, за да се избегне излишната буфериране. Поради неверната проверка на размера е възможно перезаписване на данни в страничния кеш по избрано отместване.
Експлоатацията на уязвимостта се състои в четене на файл на програма с флаг suid root (за да се запази в страничния кеш) и замяната в страничния кеш на част от кода на програмата с код за стартиране на /usr/bin/sh. Последващото стартиране на програмата ще доведе до зареждане в паметта не на оригиналния изпълняем файл от носителя, а на изменената копия от страничния кеш. В експлоита е предвидена възможността за използване на „/usr/bin/su“, „/bin/su“, „/usr/bin/mount“, „/usr/bin/passwd“ и „/usr/bin/chsh“.
За експлоатация на уязвимостта по време на изграждане на ядрото трябва да бъде активирана опцията CONFIG_RXGK, а за автоматично зареждане да е наличен модулът на ядрото rxrpc.ko (в някои системи той не се генерира). Състоянието на отстраняването на уязвимостите в дистрибутивите може да се оцени на следните страници: Debian, Ubuntu, SUSE/openSUSE, RHEL, Arch, Fedora. Като обходен вариант за защита може да се блокира зареждането на модула на ядрото rxrpc:
sh -c «printf ‘install rxrpc /bin/false\n’ > /etc/modprobe.d/dirtydecrypt.conf; rmmod rxrpc 2>/dev/null; true»
Допълнително може да се отбележи публикуването в пощенския списък на разработчиците на ядрото Linux на пачове, които напълно деактивират в crypto API (AF_ALG) оптимизации, използващи директен достъп до страничния кеш при декриптиране с алгоритмите «skcipher» и «aead». Оптимизациите изключват ненужното буфериране на данни, но създават рискове от сериозни уязвимости. Предполага се, че тяхното деактивиране ще доведе само до незначително понижение в производителността поради появата на допълнителна операция по копиране в отделен буфер. Пачовете са приети от поддържащия системата crypto API и са включени в клон «cryptodev», в който се развиват възможностите за предаване в основния състав на бъдещите версии на ядрото Linux.
Източник: opennet.ru
