Dependency Confusion
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
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.
Em todos os casos, o atacante só precisa publicar um pacote malicioso com o nome das bibliotecas usadas pela empresa vítima.
Se sua empresa está tentando importar uma biblioteca que não é interna, é muito 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.
É 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.
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.
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.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)