
Outil pour vérifier les vulnérabilités de confusion de dépendances dans plusieurs systèmes de gestion de paquets.
Un outil pour détecter les espaces de noms libres résiduels pour les noms de paquets privés référencés dans la configuration des dépendances pour Python (pypi) requirements.txt, JavaScript (npm) package.json, PHP (composer) composer.json ou MVN (maven) pom.xml.
Le 9 février 2021, un chercheur en sécurité, Alex Birsan, a publié un article qui abordait différentes failles d'ordre de résolution dans les outils de gestion des dépendances présents dans plusieurs écosystèmes de langages de programmation.
Microsoft a publié un livre blanc décrivant des moyens d'atténuer l'impact, alors que la cause première subsiste toujours.
confused lit simplement un fichier de définition des dépendances d'une application et vérifie les dépôts publics de paquets pour chaque entrée de dépendance dans ce fichier. Il signalera ensuite tous les noms de paquets non trouvés dans les dépôts publics – un état qui implique qu'un paquet pourrait être vulnérable à ce type d'attaque, bien que ce vecteur n'ait pas encore été exploité.
Cela ne signifie cependant pas qu'une application n'est pas déjà activement exploitée. Si vous savez que votre logiciel utilise des dépôts de paquets privés, vous devez vous assurer que les espaces de noms pour vos paquets privés ont été revendiqués par une partie de confiance (généralement vous-même ou votre entreprise).
Certains écosystèmes de paquets comme npm ont un concept appelé « scopes » (portées) qui peuvent être privés ou publics. En bref, il s'agit d'un espace de noms avec un niveau supérieur – la portée. Les portées ne sont pas intrinsèquement visibles publiquement, ce qui signifie que confused ne peut pas détecter de manière fiable si elles ont été revendiquées. Si votre application utilise des noms de paquets avec portée, vous devez vous assurer qu'une partie de confiance a revendiqué le nom de la portée dans les dépôts publics.
Téléchargez un binaire précompilé depuis la page des versions, décompressez-le et exécutez-le !
ou
Si vous avez un compilateur Go récent installé : go get -u github.com/visma-prodsec/confused (la même commande fonctionne pour la mise à jour)
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