Pesquisadores de segurança da Microsoft identificaram duas vulnerabilidades (CVE-2022-29799, CVE-2022-29800) no serviço networkd-dispatcher, codificadas como Nimbuspwn, que permitem a um usuário não privilegiado executar comandos arbitrários com direitos de root. O problema foi corrigido na versão 2.2 do networkd-dispatcher. Não há informações sobre a publicação de atualizações pelos distribuidores ainda (Debian, RHEL, Fedora, SUSE, Ubuntu, Arch Linux).
O networkd-dispatcher é utilizado em várias distribuições Linux, incluindo o Ubuntu, que usa o processo em segundo plano systemd-networkd para configurar parâmetros de rede e executa funções semelhantes ao NetworkManager-dispatcher, ou seja, é responsável por iniciar scripts quando há mudanças no estado da conexão de rede, por exemplo, é aplicado para iniciar VPN após a configuração da conexão de rede principal.
O processo em segundo plano associado ao networkd-dispatcher é executado com direitos de root e recebe sinais de eventos através do barramento D-Bus. As informações sobre eventos relacionados a mudanças no estado das conexões de rede são enviadas pelo serviço systemd-networkd. O problema é que usuários não privilegiados podem gerar um evento com um estado inexistente e iniciar a execução de seu script, que será executado com direitos de root.
O systemd-networkd é projetado para executar apenas scripts de manipuladores do sistema localizados no diretório /etc/networkd-dispatcher e que não estão acessíveis para substituição pelo usuário. No entanto, devido à vulnerabilidade (CVE-2022-29799) no código de manipulação do caminho do arquivo, havia a possibilidade de sair do diretório base e executar scripts arbitrários. Em particular, ao formar o caminho do arquivo para o script, foram utilizados os valores OperationalState e AdministrativeState passados através do D-Bus, nos quais não houve limpeza de caracteres especiais. O atacante poderia gerar seu próprio estado, cujo nome continha caracteres "..\/" e redirecionar a chamada do networkd-dispatcher para outro diretório.
A segunda vulnerabilidade (CVE-2022-29800) está relacionada a uma condição de corrida — entre a verificação dos parâmetros do script (pertencente ao root) e a sua execução existia um pequeno intervalo de tempo suficiente para substituir o arquivo e contornar a verificação da propriedade do script pelo usuário root. Além disso, o networkd-dispatcher não tinha verificação para links simbólicos, incluindo na execução de scripts via subprocess.Popen, o que facilitou significativamente a organização do ataque.
Técnica de exploração:
- Um diretório "\/tmp\/nimbuspwn" e um link simbólico "\/tmp\/nimbuspwn\/poc.d" são criados, apontando para o diretório "\/sbin", que é utilizado para passar na verificação de arquivos executáveis pertencentes ao root.
- Para arquivos executáveis de "\/sbin" são criados arquivos com nomes semelhantes no diretório "\/tmp\/nimbuspwn", por exemplo, para o arquivo "\/sbin\/vgs" é criado um arquivo executável "\/tmp\/nimbuspwn\/vgs", pertencente a um usuário não privilegiado, que contém o código que o atacante deseja executar.
- Através do processo D-Bus, um sinal é enviado para o networkd-dispatcher, indicando no OperationalState o valor "..\/..\/..\/tmp\/nimbuspwn\/poc". Para enviar o sinal no namespace "org.freedesktop.network1" foi utilizada a possibilidade de conectar seus próprios manipuladores ao systemd-networkd, por exemplo, através de manipulações com gpgv ou epmd, ou pode-se tirar proveito do fato de que o systemd-networkd não é executado por padrão (por exemplo, no Linux Mint).
- Após receber o sinal, o networkd-dispatcher constrói uma lista de arquivos executáveis pertencentes ao usuário root e disponíveis no diretório "\/etc\/networkd-dispatcher\/..\/..\/..\/tmp\/nimbuspwn\/poc.d", que na verdade se refere a "\/sbin".
- No momento em que a lista de arquivos é obtida, mas o script ainda não foi executado, o link simbólico é redirecionado de "\/tmp\/nimbuspwn\/poc.d" para "\/tmp\/nimbuspwn" e o networkd-dispatcher irá executar com privilégios de root o script armazenado pelo atacante.

Fonte: opennet.ru
