
Herramienta para verificar vulnerabilidades de confusión de dependencias en múltiples sistemas de gestión de paquetes.
Una herramienta para verificar espacios de nombres libres persistentes para nombres de paquetes privados referenciados en la configuración de dependencias
para Python (pypi) requirements.txt, JavaScript (npm) package.json, PHP (composer) composer.json o MVN (maven) pom.xml.
El 9 de febrero de 2021, el investigador de seguridad Alex Birsan publicó un artículo que abordaba diferentes fallos en el orden de resolución en las herramientas de gestión de dependencias presentes en múltiples ecosistemas de lenguajes de programación.
Microsoft publicó un documento técnico que describe formas de mitigar el impacto, mientras que la causa raíz aún persiste.
confused simplemente lee un archivo de definición de dependencias de una aplicación y verifica los repositorios públicos de paquetes
para cada entrada de dependencia en ese archivo. Procederá a informar todos los nombres de paquetes que no se encuentren en los repositorios públicos,
un estado que implica que un paquete podría ser vulnerable a este tipo de ataque, mientras que este vector aún no ha sido explotado.
Sin embargo, esto no significa que una aplicación no esté siendo explotada activamente. Si sabe que su software utiliza repositorios de paquetes privados, debe asegurarse de que los espacios de nombres de sus paquetes privados hayan sido reclamados por una parte de confianza (normalmente usted mismo o su empresa).
Algunos ecosistemas de empaquetado como npm tienen un concepto llamado "ámbitos" (scopes) que pueden ser privados o públicos. En resumen, significa
un espacio de nombres que tiene un nivel superior: el ámbito. Los ámbitos no son inherentemente visibles públicamente, lo que significa que confused
no puede detectar de manera confiable si ha sido reclamado. Si su aplicación utiliza nombres de paquetes con ámbito, debe asegurarse de que
una parte de confianza haya reclamado el nombre del ámbito en los repositorios públicos.
Descargue un binario precompilado desde la página de versiones, descomprímalo y ejecútelo.
o
Si tiene un compilador Go reciente instalado: go get -u github.com/visma-prodsec/confused (el mismo comando funciona para actualizar)
o
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
Sistema de repositorio de paquetes. Valores posibles: "pip", "npm", "composer", "mvn", "rubygems" (por defecto "npm")
-s string
Lista separada por comas de espacios de nombres conocidos como seguros. Admite comodines
-v Salida verbosa
./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