Pular para o conteúdo
Vulnerabilidades em guix substitute e guix pull exigem atualização

Vulnerabilidades em guix substitute e guix pull exigem atualização

Vulnerabilidades críticas no Guix substitute e guix pull permitem escalada remota de privilégios e corrupção de arquivos. Atualize e use --no-substitutes.

O projeto Guix divulgou um comunicado de segurança abordando várias vulnerabilidades críticas no utilitário guix substitute e nos comandos guix pull e guix time‑machine. As falhas permitem que um atacante obtenha privilégios remotamente no usuário do daemon de construção, corrompa o repositório de substitutos e escreva arquivos arbitrários no sistema. Todas as versões são afetadas, independentemente de o daemon ser executado como root.

Principais problemas

  • Escalada remota de privilégios – Um servidor de substitutos malicioso (ou um atacante que possa se fazer passar por um) pode extrair arquivos para qualquer diretório gravável pelo usuário do daemon, incluindo /etc/passwd quando o daemon roda como root.
  • Corrupção do repositório – O código que recupera metadados de substitutos (fetch‑narinfos) não verifica se o narinfo recebido corresponde ao solicitado, permitindo que um servidor malicioso substitua um substituto por outro.
  • Divulgação local de arquivos – URIs file:// podem ser usadas para ler qualquer arquivo acessível ao daemon, expondo até senhas armazenadas em arquivos comuns.
  • Escrita arbitrária via canal – O código de autenticação de canais (authenticate‑channel) utiliza um nome de canal inseguro como chave de cache, o que pode levar à criação ou sobrescrita de arquivos no diretório do usuário, representando um risco de negação de serviço.

Uma quinta vulnerabilidade (também com CVE pendente) afeta o procedimento restore‑file, permitindo a extração de substitutos durante o download antes que o hash seja verificado.

Como a exploração funciona

  • Exploração remota – Basta que o sistema solicite um substituto para que um servidor malicioso explote a falha. Isso vale para qualquer servidor configurado, inclusive aqueles descobertos via --discover, e até mesmo para um atacante no meio (MITM), independentemente do uso de HTTPS.
  • Exploração local – Qualquer usuário pode se conectar ao socket do daemon de construção (padrão) e acionar a falha.

Mitigação imediata

  • Desative substitutos globalmente:
    guix daemon --no-substitutes

    ou

    guix --no-substitutes <comando>
  • Não use guix pull ou guix time‑machine com um arquivo de canais de origem não confiável.

Estas medidas só protegem contra ataques remotos e não cobrem explorações locais das vulnerabilidades (1), (2) e (3). A única proteção duradoura é atualizar para uma versão corrigida.

Atualização

Todas as versões são afetadas. A Guix recomenda enfaticamente que todos os usuários atualizem imediatamente:

Para o Guix System

guix pull
sudo guix system reconfigure /run/current-system/configuration.scm
sudo herd restart guix-daemon

Para o Guix em outras distribuições

sudo guix pull

As correções estão incluídas nos commits ed0a9721f8a20d6ddcf6a0495302f502b3f7bb172ef8ed9f0df53bddf14bdecc2ea48c2d233213cc do PR #9665. Usuários atualizados a partir do commit 897832f374dcdc9eeaf19d01e70b9a92fccfc68c ou posteriores estão protegidos.

Verificação

Um script de verificação está disponível:

guix repl -- guix-substitute-and-pull-vuln-check.scm

A execução imprime quatro linhas no formato:

restore-file: vulnerable
fetch-narinfos: not vulnerable
file-uris: vulnerable
cache-key: not vulnerable

Se alguma linha indicar vulnerable, o script sai com código 1. Falhas parciais são consideradas inconclusivas.

Como as correções funcionam

  1. Hardening de restore-file – Validação de nomes de entradas, rejeição de symlinks e criação fresh do arquivo alvo.
  2. Verificação de fetch-narinfos – Inclusão apenas de narinfos que coincidem exatamente com o solicitado.
  3. Restrição de URIs file:// – Bloqueio de URLs file:// em fontes não confiáveis e em narinfos, exceto na suíte de testes.
  4. Chave de cache segura – Uso do ID do commit introdutório (um hash hexadecimal) como chave de cache, evitando criação arbitrária de arquivos.

Adicionalmente, os substitutos são extraídos em um diretório temporário e movidos apenas após verificação do hash, e o código de leitura de narinfo agora rejeita entradas com sintaxe inválida de caminho do repositório.

Considerações sobre a desativação de substitutos

A maneira mais rápida de obter atualizações é usar substitutos, mas isso também aumenta a superfície de ataque para as explorações remotos mais graves. A decisão de usar --no-substitutes deve considerar:

  • Tempo desde a divulgação pública das vulnerabilidades.
  • Segurança dos caminhos de rede até os servidores de substitutos.
  • Capacidade de reconstruir pacotes localmente.
  • Número de usuários do sistema.
  • Modelo de ameaça específico.

Para sistemas com múltiplos usuários ou rotas de rede não seguras, a desativação temporária é recomendada até que a atualização possa ser aplicada com segurança.

Referências

Mantenha seu Guix sempre atualizado. Se suspeitar de uma exploração, execute o script de verificação acima e aplique as correções assim que possível.

Via guix.gnu.org. Você pode conferir o post original em inglês:

Vulnerabilidades do 'guix substitute' e 'guix pull'

Por · Última atualização: