Foi identificada uma vulnerabilidade na ferramenta de execução isolada de aplicativos Firejail (CVE-2022-31214), permitindo que um usuário local obtenha privilégios de root no sistema principal. Um exploit funcional está disponível publicamente, testado nas versões atuais do openSUSE, Debian, Arch, Gentoo e Fedora com a ferramenta firejail instalada. O problema foi corrigido na versão firejail 0.9.70. Como uma medida alternativa de proteção, podem ser configurados os parâmetros "join no" e "force-nonewprivs yes" nas configurações (/etc/firejail/firejail.config).
Firejail utiliza o mecanismo de namespaces, AppArmor e filtragem de chamadas de sistema (seccomp-bpf) no Linux para isolamento, mas para configurar a execução isolada requer privilégios elevados, que são obtidos através da vinculação à ferramenta com a flag suid root ou através do uso do sudo. A vulnerabilidade é causada por um erro na lógica da opção "—join=", que é destinada a conectar-se a um ambiente isolado já em execução (similar ao comando login para ambientes sandbox) identificando o ambiente pelo ID do processo em execução. Antes da remoção de privilégios, o firejail determina os privilégios do processo especificado e aplica-os ao novo processo sendo conectado ao ambiente com a opção "—join".
Antes de concluir a conexão, é realizada uma verificação para determinar se o processo especificado está em execução no ambiente firejail. Esta verificação avalia a presença do arquivo /run/firejail/mnt/join. Para explorar a vulnerabilidade, um atacante pode simular um ambiente firejail fictício não isolado, utilizando um espaço de pontos de montagem (mount namespace), e em seguida se conectar a ele usando a opção "—join". Se o modo que proíbe a obtenção de privilégios adicionais em novos processos (prctl NO_NEW_PRIVS) não estiver ativado nas configurações, o firejail conectará o usuário ao ambiente fictício e tentará aplicar as configurações do espaço de nomes dos usuários (user namespace) do processo init (PID 1).
Assim, o processo conectado via "firejail —join" estará no espaço de nomes de identificadores de usuário original do usuário, com privilégios inalterados, mas em outro espaço de pontos de montagem, completamente controlado pelo atacante. Isso inclui que o atacante pode executar programas setuid-root no espaço de pontos de montagem criado, o que permite, por exemplo, alterar as configurações /etc/sudoers ou parâmetros PAM em sua hierarquia de arquivos e obter a capacidade de executar comandos com privilégios de root através das ferramentas sudo ou su.
Fonte: opennet.ru
