В инструментите за изолирано стартиране на приложения 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.
Източник: opennet.ru
