DirtyDecrypt - очередная уязвимость класса Copy Fail, предоставляющая права root в Linux
https://www.opennet.ru/opennews/art.shtml?num=65473
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".
В качестве обходного пути защиты можно заблокировать загрузку модуля ядра rxrpc:
sh -c "printf 'install rxrpc /bin/false\n' > /etc/modprobe.d/dirtydecrypt.conf; rmmod rxrpc 2>/dev/null; true"PoC
DirtyDecrypt / DirtyCBC
https://github.com/v12-security/pocs/tree/main/dirtydecrypt