Skip to main content

Gravação arbitrária de arquivos durante a extração de arquivos compactados (Zip Slip) no go-rpmutils

Escrito por

20 de julho de 2020

0 minutos de leitura

Boas-vindas ao Perfil Mensal de Vulnerabilidades da Snyk. Nesta série, a Snyk revisita as vulnerabilidades descobertas ou reportadas à nossa Equipe de Pesquisa em Segurança. Escolhemos uma vulnerabilidade de destaque do mês anterior e contamos a história por trás de sua descoberta, pesquisa e divulgação. Destacamos pesquisadores, desenvolvedores e usuários que ajudam a identificar e corrigir vulnerabilidades na comunidade de código aberto.

Neste mês, vamos analisar uma das vulnerabilidades Zip Slip que a Equipe de Pesquisa em Segurança da Snyk identificou em pacotes Golang.


Vulnerabilidade: Gravação arbitrária de arquivos durante a extração de arquivos compactados (Zip Slip) CVEs atribuídos:CVE-2020-7667Analista da Snyk: George GkitsasDescoberta por: Equipe de Pesquisa da Snyk

Em 5 de junho de 2020, a Equipe de Pesquisa da Snyk publicou os detalhes de uma vulnerabilidade que permitia a gravação arbitrária de arquivos por meio de um arquivo zip malicioso. A vulnerabilidade foi identificada no pacote Golang go-rpmutils e descoberta por pesquisadores da Snyk como parte de um esforço maior para identificar vulnerabilidades Zip Slip em todo o ecossistema de código aberto. George Gkitsas, analista sênior de segurança, foi quem identificou inicialmente a vulnerabilidade no pacote rpmutils. A vulnerabilidade foi reportada à pessoa responsável pela manutenção do pacote, corrigida rapidamente e publicada no CVE e na Snyk Vulnerability Database assim que a versão corrigida do pacote foi lançada.

Antes de entrar nos detalhes da pesquisa que revelou essa vulnerabilidade, vamos explicar rapidamente o que é uma vulnerabilidade Zip Slip. A exploração de uma vulnerabilidade Zip Slip envolve o uso de travessia de diretórios por meio de um arquivo compactado criado para fins maliciosos. Quando um método vulnerável extrai esse arquivo, arquivos em locais não previstos podem ser sobrescritos. Isso pode permitir que um invasor sobrescreva arquivos do sistema e, por fim, execute comandos maliciosos remotamente ou até obtenha acesso remoto ao sistema. Para saber mais sobre a vulnerabilidade Zip Slip e como evitá-la, confira o guia rápido sobre Zip Slip.

Como integrante da Equipe de Pesquisa da Snyk, George buscava padrões que pudessem ser identificados rapidamente em repositórios para ajudar a localizar pacotes potencialmente vulneráveis. Como parte da pesquisa, ele decidiu começar pelo ecossistema Golang. Na primeira etapa, a equipe selecionou cerca de 60 pacotes e analisou cada um em busca da possível vulnerabilidade. A equipe identificou vários falsos positivos, o que ajudou a aprimorar seus algoritmos, mas, ao final, a pesquisa revelou cinco vulnerabilidades. Três delas, incluindo a do pacote vulnerável go-rpmutils, receberam CVEs e foram publicadas na Snyk Vulnerability Database. A Snyk continua trabalhando com as pessoas responsáveis pela manutenção dos outros dois pacotes vulneráveis para garantir que haja uma correção antes da divulgação pública das vulnerabilidades.

Editor de código escuro mostrando código Go que abre um arquivo e extrai um arquivo ZIP usando cpio.

No caso do go-rpmutils, depois de descobrir a vulnerabilidade e confirmar que ela podia ser explorada, George tentou entrar em contato com a pessoa responsável pela manutenção do pacote — neste caso, uma organização, a SAS Software. O primeiro contato foi feito por e-mail, usando o endereço informado no perfil da organização para o próprio repositório. Embora esse não tenha sido o endereço correto para esse tipo de relato, a mensagem de George foi rapidamente encaminhada a uma pessoa responsável por lidar com essas divulgações. Mais tarde, a Snyk soube que a SAS Software tem um endereço de e-mail dedicado a relatos de vulnerabilidades. Essa é considerada por muitos nas comunidades de segurança e desenvolvimento uma prática recomendada.

De todo modo, a SAS Software foi receptiva durante todo o processo: a resposta inicial ao relato chegou em poucas horas. George trabalhou com a equipe de segurança para garantir a divulgação pública responsável da vulnerabilidade assim que houvesse uma correção. A equipe da empresa respondeu rapidamente com uma correção, que George pôde testar e validar para confirmar que resolvia a vulnerabilidade. A vulnerabilidade foi publicada em 5 de junho de 2020, apenas seis dias após a notificação inicial à empresa.

Este caso é um ótimo exemplo da colaboração entre pesquisadores e responsáveis pela manutenção de pacotes, possível quando todas as partes se comprometem a tratar questões de segurança de forma responsável e eficiente. Neste caso, a SAS Software, responsável pela manutenção, foi muito receptiva e agiu com rapidez e determinação para resolver o problema. A Snyk e a SAS Software trabalharam juntas para garantir que a correção solucionasse o problema por completo e que os detalhes da vulnerabilidade só fossem divulgados após a disponibilização da correção. Uma lição que podemos tirar deste caso para melhorar no futuro é a importância de ter um canal dedicado para receber relatos de vulnerabilidades. Também vale a pena facilitar o acesso a esse canal, informando-o nos arquivos README e no perfil do repositório.

O objetivo da Snyk é confirmar a validade e a possibilidade de exploração das vulnerabilidades, além de oferecer aos responsáveis pela manutenção dos pacotes uma divulgação responsável e orientações detalhadas para corrigi-las. Para saber mais sobre essa vulnerabilidade ou como relatar uma vulnerabilidade que você descobriu em um projeto de código aberto, confira os links abaixo.

Comece a jogar Capture the Flag

Aprenda a resolver desafios de Capture the Flag assistindo sob demanda ao nosso workshop virtual introdutório.