03.02.2023

Уязвимость в firejail, позволяющая получить root-доступ в системе

В утилите для изолированного выполнения приложений Firejail выявлена уязвимость (CVE-2022-31214), позволяющая локальному пользователю получить права root в основной системе. В открытом доступе имеется рабочий эксплоит, проверенный в актуальных выпусках openSUSE, Debian, Arch, Gentoo и Fedora с установленной утилитой firejail. Проблема устранена в выпуске firejail 0.9.70. В качестве обходного пути защиты можно выставить в настройках (/etc/firejail/firejail.config) параметры «join no» и «force-nonewprivs yes».

Firejail использует для изоляции механизм пространств имён (namespaces), AppArmor и фильтрацию системных вызовов (seccomp-bpf) в Linux, но для настройки изолированного запуска требует повышенных привилегий, которые получает через привязку к утилите флага suid root или запуск при помощи sudo. Уязвимость вызвана ошибкой в логике работы опции «—join=<PID>», предназначенной для подключения к уже работающему изолированному окружению (аналог команды login для sandbox-окружения) с определением окружения по работающему в нём идентификатору процесса. На этапе до сброса привилегий firejail определяет привилегии указанного процесса и применяет их к новому процессу, подключаемому к окружению при помощи опции «—join».

Перед подключением осуществляется проверка, запущен ли указанный процесс в окружении firejail. Данная проверка оценивает наличие файла /run/firejail/mnt/join. Для эксплуатации уязвимости атакующий может симулировать фиктивное не изолированное окружение firejail, используя пространство точек монтирования (mount namespace), после чего подключиться к нему при помощи опции «—join». Если в настройках не активирован режим запрета получения дополнительных привилегий в новых процессах (prctl NO_NEW_PRIVS), firejail подключит пользователя к фиктивному окружению и попытается применить настройки пространства имён идентификаторов пользователей (user namespace) процесса init (PID 1).

В итоге подключённый через «firejail —join» процесс окажется в исходном для пользователя пространстве имён идентификаторов пользователей с неизменными привилегиями, но в другом пространстве точек монтирования, полностью контролируемом атакующим. В том числе атакующий может выполнять setuid-root программы в созданном им пространстве точек монтирования, что позволяет, например, изменить настройки /etc/sudoers или параметры PAM в своей файловой иерархии и получить возможность выполнения команд с правами root при помощи утилит sudo или su.

Источник.