Vulnerabilidades foram identificadas no gerenciador de pacotes Guix (CVE não atribuídos) na implementação do comando interno "guix substitute", que é chamado automaticamente pelo processo em segundo plano guix-daemon durante operações de instalação de pacotes. O comando é utilizado para baixar pacotes binários já compilados de servidores externos, verificando sua integridade por meio de assinatura digital. A vulnerabilidade mais crítica permite que um código seja executado remotamente no sistema do usuário com os mesmos direitos sob os quais o processo de segundo plano guix-daemon está sendo executado.
O problema afeta todas as configurações com o processo guix-daemon, independentemente de ser iniciado com privilégios de root ou sob um usuário não privilegiado. Para explorar a vulnerabilidade, é suficiente qualquer tentativa de baixar pacotes binários de servidor, controlados pelo atacante. Nesse caso, o arquivo malicioso servidor não precisa ser explicitamente selecionado ou especificado nas configurações do usuário — ele pode ser definido usando a opção "--discover", permitindo a substituição do servidor durante um ataque MITM. Nas configurações em que o guix-daemon é executado com privilégios elevados, um usuário local pode executar um ataque se puder se conectar ao processo em segundo plano através de um socket Unix (que, por padrão, está acessível para todos os usuários).
A vulnerabilidade está presente no manipulador "restore-file", que é utilizado para descompactar ao carregar um pacote, sem aguardar seu carregamento completo e a verificação do arquivo baixado pela assinatura digital. O problema é causado pela falta de verificação da presença dos caracteres ".", "\/" e ".." nos caminhos dos arquivos presentes no arquivo compactado. Através da substituição de nomes de arquivos incorretos no arquivo, o atacante pode gravar um arquivo arbitrário em qualquer área do sistema de arquivos, conforme permitido pelos direitos sob os quais o processo em segundo plano guix-daemon está sendo executado.
Para organizar a execução de seu código no sistema, por exemplo, pode-se adicionar um script de inicialização automática, como "~\/ .bashrc" ou "~\/ .profile", ou alterar o arquivo "~\/ .ssh\/authorized_keys" com chaves SSH. Se em um sistema multiusuário o guix-daemon está sendo executado sob o usuário root, o atacante pode sobrescrever o arquivo de senhas ou scripts do sistema.
A possibilidade de criar servidores falsas para distribuir pacotes maliciosos foi causada pelo fato de que o procedimento de carregamento de metadados (narinfo) sobre os pacotes binários disponíveis (fetch-narinfos) não realizava a verificação do certificado do servidor, confiando que a maior parte dos metadados é assinada digitalmente. Como se revelou, a assinatura não abrangia a URL para o download do pacote, o que permitia a sua substituição sem comprometer a integridade dos metadados. Em última análise, o pacote falso seria descartado devido à falha na verificação de seu conteúdo pela hash, assegurada digitalmente, mas essa verificação ocorria após a etapa de descompactação, onde surgia o problema com caracteres especiais nos nomes dos arquivos.
Além do comando 'guix substitute', o manipulador vulnerável 'restore-file' é utilizado nas operações dos comandos 'guix offload', 'guix archive —extract' e 'guix challenge', através dos quais a vulnerabilidade também pode ser explorada. Como uma solução alternativa para bloquear a vulnerabilidade, recomenda-se especificar claramente a opção '—no-substitutes' em todos os comandos do guix. A correção da vulnerabilidade foi incorporada ao código fonte do Guix. Os usuários são aconselhados a instalar imediatamente as atualizações formadas pelos desenvolvedores do guix e do guix-daemon.
Além do problema mencionado no Guix, mais três vulnerabilidades foram corrigidas:
- A possibilidade de substituição de pacotes binários devido à falta de verificação da correspondência entre o pacote solicitado e os metadados retornados no manipulador fetch-narinfos. A vulnerabilidade pode ser utilizada para entregar uma versão desatualizada do pacote solicitado, contendo vulnerabilidades.
- A definição do conteúdo da primeira linha de arquivos arbitrários no sistema através da solicitação de um usuário local com o URI 'file://' ('—substitute-urls file:///etc/shadow'). Se o guix-daemon estiver sendo executado com privilégios de root, ele lerá o arquivo solicitado, determinará que não é metadados e exibirá um erro, no qual será mencionada a linha que não pôde ser analisada.
- A indicação de um nome de repositório externo especialmente formatado ("..\/..\/..\/..\/newfile") ao executar os comandos "guix pull" e "guix time-machine" permite gravar dados com informações sobre o commit em um arquivo existente no sistema de arquivos, desde que seu conteúdo se assemelhe a uma lista de strings na linguagem Scheme. A vulnerabilidade pode ser utilizada para ataques DoS, mas não se pode descartar que, através de manipulações astutas com o pseudo-FS \/proc, se possa realizar manipulações mais perigosas no sistema.
Fonte: opennet.ru
