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 mal escrito, inexistente ou com uma versão não especificada e o repositório de dependências utilizado permite coletar versões atualizadas de repositórios públicos.
Mal escrito: Importar
reqests
em vez derequests
Inexistente: Importar
company-logging
, uma biblioteca interna que não existe maisVersão não especificada: Importar uma biblioteca
company-requests
interna existente, mas o repositório verifica repositórios públicos para ver se há versões maiores.
Exploração
Em todos os casos, o atacante só precisa publicar um pacote malicioso com o nome das bibliotecas usadas pela empresa vítima.
Mal Escrito & Inexistente
Se sua empresa está tentando importar uma biblioteca que não é interna, é altamente provável que o repositório de bibliotecas esteja procurando por ela em repositórios públicos. Se um atacante a criou, seu código e máquinas em execução provavelmente estarão comprometidos.
Versão Não Especificada
É muito comum que os desenvolvedores não especifiquem nenhuma versão da biblioteca utilizada, ou especifiquem apenas uma versão maior. Então, o interpretador tentará baixar a última versão que atenda a esses requisitos.
Se a biblioteca for uma biblioteca externa conhecida (como o requests
do python), um atacante não pode fazer muito, pois ele não conseguirá 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 buscará por uma versão mais nova disponível publicamente.
Portanto, se um atacante souber que a empresa está usando a biblioteca requests-company
versão 1.0.1 (permitindo 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 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 pesquisou milhares de arquivos package.json expostos contendo as dependências de projetos javascript.
Referências
Last updated