Vulnerabilidades de raiz local no kit de ferramentas de gerenciamento de pacotes Snap

Qualys identificou duas vulnerabilidades (CVE-2021-44731, CVE-2021-44730) no utilitário snap-confine, fornecido com o sinalizador raiz SUID e chamado pelo processo snapd para criar um ambiente executável para aplicativos entregues em pacotes independentes no formato instantâneo. As vulnerabilidades permitem que um usuário local sem privilégios execute código com privilégios de root no sistema. Os problemas foram resolvidos na atualização do pacote snapd de hoje para Ubuntu 21.10, 20.04 e 18.04.

A primeira vulnerabilidade (CVE-2021-44730) permite um ataque por meio da manipulação de link físico, mas requer a desativação da proteção do link físico do sistema (definindo sysctl fs.protected_hardlinks como 0). O problema é causado pela verificação incorreta da localização dos arquivos executáveis ​​dos programas auxiliares snap-update-ns e snap-discard-ns executados como root. O caminho para esses arquivos foi calculado na função sc_open_snapd_tool() com base em seu próprio caminho de /proc/self/exe, que permite criar um link físico para snap-confine em seu diretório e colocar suas próprias versões do snap- update-ns e snap-utilitários neste diretório descartam-ns. Após a execução por meio de um link físico, o snap-confine com direitos de root iniciará os arquivos snap-update-ns e snap-discard-ns do diretório atual, substituídos pelo invasor.

A segunda vulnerabilidade é causada por uma condição de corrida e pode ser explorada na configuração padrão do Ubuntu Desktop. Para que a exploração funcione com sucesso no Ubuntu Server, você deve selecionar um dos pacotes da seção “Featured Server Snaps” durante a instalação. A condição de corrida é evidente na função setup_private_mount() chamada durante a preparação do namespace do ponto de montagem para o pacote snap. Esta função cria um diretório temporário “/tmp/snap.$SNAP_NAME/tmp” ou usa um existente para vincular e montar diretórios para um pacote snap nele.

Como o nome do diretório temporário é previsível, um invasor pode substituir seu conteúdo por um link simbólico após verificar o proprietário, mas antes de chamar a chamada do sistema mount. Por exemplo, você pode criar um link simbólico "/tmp/snap.lxd/tmp" no diretório /tmp/snap.lxd apontando para um diretório arbitrário, e uma chamada para mount() seguirá o link simbólico e montará o diretório no snap espaço para nome. De maneira semelhante, você pode montar seu conteúdo em /var/lib e, substituindo /var/lib/snapd/mount/snap.snap-store.user-fstab, organizar a montagem de seu diretório /etc no namespace de o pacote snap para organizar o carregamento de sua biblioteca com direitos de root, substituindo /etc/ld.so.preload.

Observa-se que a criação de um exploit acabou não sendo uma tarefa trivial, uma vez que o utilitário snap-confine é escrito em Go usando técnicas de programação seguras, possui proteção baseada em perfis AppArmor, filtra chamadas de sistema com base no mecanismo seccomp e usa o namespace de montagem para isolamento. No entanto, os pesquisadores conseguiram preparar uma exploração funcional para obter direitos de root no sistema. O código de exploração será publicado algumas semanas após os usuários instalarem as atualizações fornecidas.

Fonte: opennet.ru

Adicionar um comentário