Уязвимость в 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=”, предназначенной для подключения к уже работающему изолированному окружению (аналог команды login но для sandbox-окружения) с определением окружения по работающему в нём
идентификатору процесса. На этапе до сброса привилегий firejail определяет привилегии указанного процесса и применяет их к новому процессу, подключаемому к окружению при помощи опции “–join”.

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

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

Release. Ссылка here.