Dependency Confusion

Support HackTricks

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 de requests

  • Inexistente: Importar company-logging, uma biblioteca interna que não existe mais

  • Versã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

Support HackTricks

Last updated