Те откриха уязвимост в firejail, която позволява root достъп до системата

Наскоро пуснаха новината, че е установена уязвимост (вече изброени под CVE-2022-31214) в инструмента за тестване на приложението Firejail, подробно е описано, че откритият недостатък може да позволи на локален потребител да стане root на хост системата.

Firejail използва механизма на пространства от имена, AppArmor и филтриране на системни повиквания (seccomp-bpf) в Linux за изолация, но изисква повишени привилегии за конфигуриране на изолирана версия, която получава чрез обвързване към помощната програма suid root или стартиране с sudo.

Уязвимостта се дължи на грешка в логиката на опцията “–join=”. », проектиран да се свърже с изолирана среда, която вече се изпълнява (подобно на командата за вход за среда в пясъчна среда) със средата, дефинирана от идентификатора на процеса, който се изпълнява в нея. Във фазата преди стартиране firejail открива привилегиите на посочения процес и ги прилага към новия процес, който се присъединява към средата с опцията „-join“.

Преди свързване, проверява дали посоченият процес се изпълнява в средата на firejail. Тази проверка оценява съществуването на файла /run/firejail/mnt/join. За да се възползвате от уязвимостта, нападателят може да симулира фиктивна неизолирана среда на пожарен затвор като използвате пространството от имена за монтиране и след това се свържете с него чрез опцията "--join".

Ако конфигурацията не активира режима за забрана за получаване на допълнителни привилегии в нови процеси (prctl NO_NEW_PRIVS), firejail ще свърже потребителя към фиктивна среда и ще се опита да приложи конфигурацията на потребителското пространство от имена на потребителски идентификатори (потребител на пространство от имена) на процеса init ( PID 1).

По-голямата част от логиката зад функцията за присъединяване е в изходния код от файла `src/firejail/join.c`. Критичните секции на кода се изпълняват с повишени привилегии (ефективен UID 0). Идентификаторът на процеса се предава като команда аргументът на линията се проверява, за да се определи дали е rконтейнер и определете някои от неговите свойства, които Това се отнася и за новия процес на влизане.

Основните критерии за вземане на решение дали да се присъедините към целевия процес успешно е наличието на файл в пространството от имена за монтиране на целта, процес, намерен в /run/firejail/mnt/join. Тази проверка се извършва на fфункция `is_ready_for_join()`. Файлът се отваря с lФлаговете `O_RDONLY|O_CLOEXEC` и резултатът от трасето `fstat()` трябва отговарят на следните изисквания:

– файлът трябва да е нормален файл.
– файлът трябва да е собственост на userid 0 (както се вижда от първоначалния потребител
пространство от имена).
– файлът трябва да е с размер 1 байт.

В резултат на това процесът, свързан чрез "firejail --join", ще завърши в пространството за имена оригиналния потребителски идентификатор на потребителя с непроменени привилегии, но в различно пространство за точки на монтиране, напълно контролирано от нападателя.

Получената "присъединена" обвивка вече ще живее при първоначалния потребител
пространство от имена, като все пак запазва оригиналните нормални потребителски привилегии пространството от имена за монтиране ще бъде това, което се контролира от нападателя. Като
конфигурацията nonewprivs не е приложена, атакуващият може сега
стартирайте setuid-root програми в това пространство от имена за монтиране

По-специално, нападателят може да стартира setuid-root програми в пространството на създадената от него точка на монтиране, което му позволява например да промени конфигурацията на /etc/sudoers или PAM параметрите в своята файлова йерархия и да получи възможността да изпълнява команди като root използвайки sudo или неговите помощни програми.

И накрая, заслужава да се спомене, че е разработен функционален експлойт, тестван на текущите версии на openSUSE, Debian, Arch, Gentoo и Fedora с инсталирана помощна програма firejail.

Проблемът беше отстранен във firejail версия 0.9.70. Като корекция на сигурността можете да зададете конфигурацията (/etc/firejail/firejail.config) на "no join" и "force-nonewprivs yes".

Накрая ако се интересувате да научите повече за това, можете да проверите подробностите в следваща връзка.


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.