Dependency confusion
Dernière mise à jour
Cet article vous a-t-il été utile ?
Dernière mise à jour
Cet article vous a-t-il été utile ?
La confusion de dépendances est une technique d'attaque par laquelle les attaquants exploitent les mécanismes de résolution de dépendances utilisés lors du développement de logiciels. Lorsque les développeurs construisent des applications en utilisant des gestionnaires de paquets tels que npm (pour JavaScript) ou pip (pour Python), ils spécifient les dépendances nécessaires pour leur projet. Les attaquants peuvent profiter de l'absence de contrôle rigoureux des sources de ces dépendances. Ils publient des packages malveillants dans des registres publics qui portent le même nom que les packages légitimes, mais avec des versions supérieure. Lorsque les développeurs construisent leur projet, le gestionnaire de paquets peut télécharger et inclure automatiquement le package malveillant sans que les développeurs en aient conscience. Cela permet aux attaquants de compromettre le système cible en exploitant les vulnérabilités du package malveillant.
Afin de tester ce type de vulnérabillité, il faut impérativement trouver les packages utilisés par l'application en back-end. Cela est principalement rendu possible par des fuites de données techniques ou une . (Si le code source est rendu disponible sur Github par exemple)
Exemples:
https://target.com/.git, https://target.com/package.json, https://target.com/package-lock.json...
Exemple:
https://target.com/?page=../../../package.json
Rechercher dans Github, Gitlab, npmjs.com, pastebin.com...ubli
De la même manière, on va ensuite rechercher les packages utilisés en frontend soit via de l'OSINT, soit en analysant le code source des pages à la recherche des imports de packages.
On va alors rechercher les termes suivants:
import
require()
L'étape suivante vise simplement à vérifier si les packages trouvés existent sur les registres publiques:
Si un package trouvé n'existe pas dans les registres publiques, il est alors possible de vérifier la vulnérabilité en le créant et en l'enregistrant sous le même nom et à une version supérieur (une version supérieur sera selectionné en première).
Dans le fichier package.json:
Remplacer la valeur name
par le nom du package privé
Remplacer la valeur version
par une version supérieur à celle du package privé
Remplacer l'url de la commande curl dans preinstall
par votre collaborator
Dans un terminal, se connecter avec la commande npm login
Entrer la commande npm publish .
dans le répertoire de l'exploit.
Vérifier que le package est bien disponible sur npmjs.com
Si la cible est vulnérable, alors a chaque fois que le serveur va executer la commande npm install
, la RCE sera executé.
Node:
Python:
git clone
Créer un compte sur si ce n'est pas déjà fait