Nimbuspwn, uma vulnerabilidade no networkd-dispatcher que permite que comandos sejam executados como root

Os Pesquisadores de segurança da Microsoft lançados a notícia que identificaram duas vulnerabilidades (CVE-2022-29799, CVE-2022-29800) no serviço networkd-dispatcher codinome Nimbuspwn que permite que um usuário sem privilégios execute comandos arbitrários como root.

networkd-dispatcher pt usado por muitas distribuições Linux, incluindo o Ubuntu, que usa o processo em segundo plano systemd-networkd para definir as configurações de rede e executa funções semelhantes ao NetworkManager-dispatcher, ou seja, lida com a execução de scripts quando o estado da conexão de rede muda, por exemplo, é usado para iniciar uma VPN após estabelecer o conexão de rede principal.

A Microsoft descobriu várias vulnerabilidades, chamadas coletivamente de Nimbuspwn, que podem permitir que um invasor eleve privilégios de root em muitos endpoints de desktop Linux. As vulnerabilidades podem ser encadeadas para obter privilégios de root em sistemas Linux, permitindo que invasores implantem cargas úteis como um backdoor de root e executem outras ações maliciosas por meio da execução arbitrária de código de root. Além disso, as vulnerabilidades do Nimbuspwn podem ser exploradas como um vetor para acesso root por ameaças mais sofisticadas, como malware ou ransomware, para impactar ainda mais os dispositivos vulneráveis.

Descobrimos as vulnerabilidades ouvindo mensagens no barramento do sistema enquanto realizamos revisões de código e análises dinâmicas em serviços executados como root e notamos um padrão estranho em uma unidade systemd chamada networkd-dispatcher.

O processo em segundo plano associado ao networkd-dispatcher é executado como root e ouve eventos através do D-Bus. O serviço systemd-networkd envia informações sobre eventos relacionados à mudança de estado das conexões de rede. O problema é que usuários sem privilégios podem gerar um evento de status inexistente e começar a executar seu script, que será executado como root.

systemd-networkd foi projetado para executar apenas scripts controlador do sistema localizado no diretório /etc/networkd-dispatcher e não substituível pelo usuário, mas devido a uma vulnerabilidade (CVE-2022-29799) era possível que o código de manipulação do caminho do arquivo estivesse desativado no diretório base de limites e executar scripts arbitrários.

Em particular, ao formar o caminho do arquivo para o script, foram utilizados os valores OperationalState e AdministrationState transmitidos por D-Bus, nos quais os caracteres especiais não foram excluídos. Um invasor pode gerar seu próprio estado com os caracteres "../" no nome e redirecionar a chamada networkd-dispatcher para outro diretório.

A segunda vulnerabilidade (CVE-2022-29800) está relacionado a uma condição de corrida: Entre verificar os parâmetros do script (de propriedade do root) e executá-lo, houve um curto período de tempo, o suficiente para substituir o arquivo e pular a verificação do script de propriedade do root. Além disso, o networkd-dispatcher não verificava links simbólicos, mesmo ao executar scripts por meio da chamada subprocess.Popen, o que simplificou bastante a orquestração de ataques.

O diretório "/tmp/nimbuspwn" é criado e um link simbólico "/tmp/nimbuspwn/poc.d" apontando para o diretório "/sbin" é criado, o qual é usado para passar uma verificação de arquivos executáveis ​​pertencentes ao root.

Para arquivos executáveis ​​“/sbin”, arquivos com o mesmo nome são criados no diretório “/tmp/nimbuspwn”, por exemplo, para arquivo “/sbin/vgs”, um arquivo executável “/tmp/nimbuspwn/vgs” é criado , de propriedade de um usuário sem privilégios, no qual é colocado o código que o invasor deseja executar.

Um sinal D-Bus é enviado para o processo networkd-dispatcher com OperationalState definido como "../../../tmp/nimbuspwn/poc". Para enviar um sinal no namespace "org.freedesktop.network1", você usou a capacidade de conectar seus controladores ao systemd-networkd, por exemplo, por manipulações gpgv ou epmd, ou pode usar o fato de que systemd-networkd não é rodando por padrão (por exemplo, no Linux mint).

Ao receber o sinal, o Networkd-dispatcher cria 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".

Assim que a lista de arquivos é recebida, mas o script ainda não foi executado, o link simbólico é redirecionado de "/tmp/nimbuspwn/poc.d" para "/tmp/nimbuspwn" e networkd-dispatcher será executado como raiz. script colocado pelo atacante.

O problema corrigido na versão 2.2 do networkd-dispatcher, embora não haja informações sobre o lançamento de atualizações por distribuições.

Finalmente se você estiver interessado em saber mais sobre isso, você pode verificar os detalhes no link a seguir.


Deixe um comentário

Seu endereço de email não será publicado. Campos obrigatórios são marcados com *

*

*

  1. Responsável pelos dados: Miguel Ángel Gatón
  2. Finalidade dos dados: Controle de SPAM, gerenciamento de comentários.
  3. Legitimação: Seu consentimento
  4. Comunicação de dados: Os dados não serão comunicados a terceiros, exceto por obrigação legal.
  5. Armazenamento de dados: banco de dados hospedado pela Occentus Networks (UE)
  6. Direitos: A qualquer momento você pode limitar, recuperar e excluir suas informações.

  1.   luix dito

    Já foi dito mil e uma vezes: systemd é lixo. Redundante, mal projetado, sobrecarregado, propenso a erros. Uma pena que foi incorporado na minha distro favorita (debian)