|
В ядре Linux выявлена уязвимость, по аналогии с уязвимостями Copy Fail, Dirty Frag и Fragnesia позволяющая непривилегированному пользователю получить права root, перезаписав данные в страничном кэше. Уязвимости присвоено кодовое имя DirtyDecrypt (проблема также упоминается под именем DirtyCBC). Доступен прототип эксплоита.
CVE-идентификатор в примечании к эксплоиту не упоминается, указано лишь, что исследователи выявили проблему 9 мая, после чего сообщили об этом разработчикам ядра, которые ответили, что их находка дублирует другой отчёт об уже исправленной уязвимости. Так как патч с исправлением уже включён в ядро исследователи решили опубликовать разработанный ими эксплоит. Судя по описанию внутри эксплоита, в нём используется уязвимость CVE-2026-31635, исправление для которой было принято в ядро в апреле и вошло в состав ветки 7.0.0 и сформированного 18 апреля выпуска 6.18.23. Проблема проявляется начиная с ядра 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. Последующий запуск программы приведёт к тому, что в память будет загружен не оригинальный исполнядолжен бытьемый файл с накопителя, а изменённая копия из страничного кэша. В качестве suid-программ в эксплоите предусмотрена возможность использования "/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.
|