Dependency Confusion
Informações Básicas
Em resumo, uma vulnerabilidade de confusão de dependência ocorre quando um projeto está usando uma biblioteca com um nome com erro de digitação, inexistente ou com uma versão não especificada e o repositório de dependências usadas permite reunir versões atualizadas de repositórios públicos.
Com erro de digitação: Importe
reqests
em vez derequests
Inexistente: Importe
company-logging
, uma biblioteca interna que não existe maisVersão não especificada: Importe uma biblioteca interna existente
company-requests
, mas o repositório verifica repositórios públicos para ver se existem versões superiores.
Exploração
Em todos os casos, o atacante só precisa publicar um pacote malicioso com o nome das bibliotecas usadas pela empresa vítima.
Com Erro de Digitação & Inexistente
Se sua empresa está tentando importar uma biblioteca que não é interna, é altamente provável que o repositório de bibliotecas vá procurá-la em repositórios públicos. Se um atacante a criou, seu código e máquinas em execução provavelmente serão comprometidos.
Versão Não Especificada
É muito comum os desenvolvedores não especificarem nenhuma versão da biblioteca usada, ou especificar apenas uma versão principal. Então, o interpretador tentará baixar a última versão que atenda a esses requisitos.
Se a biblioteca for uma biblioteca externa conhecida (como requests
em Python), um atacante não pode fazer muito, pois não poderá criar uma biblioteca chamada requests
(a menos que seja o autor original).
No entanto, se a biblioteca for interna, como requests-company
neste exemplo, se o repositório da biblioteca permitir verificar novas versões também externamente, ele procurará por uma versão mais recente disponível publicamente.
Portanto, se um atacante souber que a empresa está usando a biblioteca requests-company
versão 1.0.1 (permite atualizações menores), ele pode publicar a biblioteca requests-company
versão 1.0.2 e a empresa usará essa biblioteca em vez da interna.
Correção da AWS
Essa vulnerabilidade foi encontrada no AWS CodeArtifact (leia os detalhes neste post do blog). A AWS corrigiu isso permitindo especificar se uma biblioteca é interna ou externa, para evitar o download de dependências internas de repositórios externos.
Encontrando Bibliotecas Vulneráveis
No post original sobre confusão de dependência o autor procurou milhares de arquivos package.json expostos contendo as dependências de projetos JavaScript.
Referências
Last updated