Уязвимость в Linux-драйвере exFAT, позволяющая поднять привилегии в системе

В поставляемом в ядре Linux драйвере для файловой системы exFAT выявлена уязвимость (CVE-2023-4273), позволяющая при монтировании специально оформленного раздела (например, при подключении вредоносного USB Flash) добиться переполнения стека и выполнения своего кода с правами ядра. Проблема пока устранена в экспериментальном выпуске ядра Linux 6.5-rc5. Проследить за исправлением в дистрибутивах можно на следующих страницах: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch.

Отсутствие проверки размера при копировании имени файла в буфер, размещённый в стеке, приводит к переполнению стека ядра в случае задания очень длинного имени файла, превышающего ограничение ФС в 255 символов. Уязвимость присутствует в функции exfat_get_uniname_from_ext_entry, выполняющей реконструкцию длинных имён через цикличное чтение записей с частями имени файла из индекса каталога и слияния полученных частей имени в итоговое длинное имя. Проверка размера в коде exfat_get_uniname_from_ext_entry выполнялась в привязке к каждой записи с частью имени, но не охватывала итоговое имя (например, имя можно разбить на 100 частей и добиться записи в буфер 1500 символов вместо 258).

Выявивший уязвимость исследователь смог подготовить прототип эксплоита, который позволяет повысить свои привилегии в системе. При тестировании в виртуальном машине VirtualBox эксплоит срабатывает в 100% случаев, но запуске в обычном окружении, работающим поверх оборудования, вероятность срабатывания снижается до примерно 50%. Уязвимость также может быть использована для компрометации ядер, загружаемых в режиме UEFI Secure Boot.

Release. Ссылка here.