
Ferramenta para verificar vulnerabilidades de confusão de dependências em múltiplos sistemas de gerenciamento de pacotes.
Uma ferramenta para verificar namespaces livres remanescentes para nomes de pacotes privados referenciados na configuração de dependências para Python (pypi) requirements.txt, JavaScript (npm) package.json, PHP (composer) composer.json ou MVN (maven) pom.xml.
Em 9 de fevereiro de 2021, o pesquisador de segurança Alex Birsan publicou um artigo que abordou diferentes falhas na ordem de resolução em ferramentas de gerenciamento de dependências presentes em múltiplos ecossistemas de linguagens de programação.
A Microsoft publicou um whitepaper descrevendo maneiras de mitigar o impacto, enquanto a causa raiz ainda permanece.
O confused simplesmente lê um arquivo de definição de dependências de uma aplicação e verifica os repositórios públicos de pacotes para cada entrada de dependência nesse arquivo. Ele irá relatar todos os nomes de pacotes que não são encontrados nos repositórios públicos - um estado que implica que um pacote pode estar vulnerável a esse tipo de ataque, enquanto esse vetor ainda não foi explorado.
Isso, no entanto, não significa que uma aplicação não esteja sendo ativamente explorada. Se você sabe que seu software está usando repositórios privados de pacotes, você deve garantir que os namespaces para seus pacotes privados foram reivindicados por uma parte confiável (normalmente você mesmo ou sua empresa).
Alguns ecossistemas de empacotamento, como npm, têm um conceito chamado "escopos" que podem ser privados ou públicos. Em resumo, significa um namespace que tem um nível superior - o escopo. Os escopos não são inerentemente visíveis publicamente, o que significa que o confused não pode detectar de forma confiável se foi reivindicado. Se sua aplicação usa nomes de pacotes com escopo, você deve garantir que uma parte confiável tenha reivindicado o nome do escopo nos repositórios públicos.
Baixe um binário pré-compilado da página de releases, descompacte e execute!
ou
Se você tem um compilador Go recente instalado: go get -u github.com/visma-prodsec/confused (o mesmo comando funciona para atualizar)
ou
git clone https://github.com/visma-prodsec/confused ; cd confused ; go get ; go build
Usage:
confused [-l LANGUAGENAME] depfilename.ext
Usage of confused:
-l string
Package repository system. Possible values: "pip", "npm", "composer", "mvn", "rubygems" (default "npm")
-s string
Comma-separated list of known-secure namespaces. Supports wildcards
-v Verbose output
./confused -l pip requirements.txt
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l npm package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
[!] @mycompany/internal_package1
[!] @mycompany/internal_package2
# Example when @mycompany private scope has been registered in npm, using -s
./confused -l npm -s '@mycompany/*' package.json
Issues found, the following packages are not available in public package repositories:
[!] internal_package1
./confused -l mvn pom.xml
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2
./confused -l rubygems Gemfile.lock
Issues found, the following packages are not available in public package repositories:
[!] internal
[!] internal/package1
[!] internal/_package2