# Confusion de Dépendance {{#include ../banners/hacktricks-training.md}}
{% embed url="https://websec.nl/" %} ## Informations de Base En résumé, une vulnérabilité de confusion de dépendance se produit lorsqu'un projet utilise une bibliothèque avec un nom **mal orthographié**, **inexistant** ou avec une **version non spécifiée** et le dépôt de dépendances utilisé permet de **rassembler des versions mises à jour à partir de dépôts publics**. - **Mal orthographié** : Importer **`reqests`** au lieu de `requests` - **Inexistant** : Importer `company-logging`, une bibliothèque interne qui **n'existe plus** - **Version non spécifiée** : Importer une bibliothèque `company-requests` **interne** **existante**, mais le dépôt vérifie les **dépôts publics** pour voir s'il existe des **versions supérieures**. ## Exploitation > [!WARNING] > Dans tous les cas, l'attaquant doit simplement publier un **package malveillant avec le nom** des bibliothèques utilisées par l'entreprise victime. ### Mal Orthographié & Inexistant Si votre entreprise essaie d'**importer une bibliothèque qui n'est pas interne**, il est très probable que le dépôt de bibliothèques va la rechercher dans des **dépôts publics**. Si un attaquant l'a créée, votre code et les machines en cours d'exécution seront très probablement compromis. ### Version Non Spécifiée Il est très courant que les développeurs **ne spécifient aucune version** de la bibliothèque utilisée, ou spécifient juste une **version majeure**. Ensuite, l'interpréteur essaiera de télécharger la **dernière version** correspondant à ces exigences.\ Si la bibliothèque est une **bibliothèque externe connue** (comme `requests` de python), un **attaquant ne peut pas faire grand-chose**, car il ne pourra pas créer une bibliothèque appelée `requests` (à moins qu'il ne soit l'auteur original).\ Cependant, si la bibliothèque est **interne**, comme `requests-company` dans cet exemple, si le **dépôt de la bibliothèque** permet de **vérifier les nouvelles versions également de manière externe**, il recherchera une version plus récente disponible publiquement.\ Donc, si un **attaquant sait** que l'entreprise utilise la bibliothèque `requests-company` **version 1.0.1** (permettant des mises à jour mineures). Il peut **publier** la bibliothèque `requests-company` **version 1.0.2** et l'entreprise **utilisera cette bibliothèque à la place** de l'interne. ## Correction AWS Cette vulnérabilité a été trouvée dans AWS **CodeArtifact** (lisez les [**détails dans cet article de blog**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)).\ AWS a corrigé cela en permettant de spécifier si une bibliothèque est interne ou externe, pour éviter de télécharger des dépendances internes à partir de dépôts externes. ## Trouver des Bibliothèques Vulnérables Dans le [**post original sur la confusion de dépendance**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610), l'auteur a recherché des milliers de fichiers package.json exposés contenant les dépendances de projets javascript. ## Références - [https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610) - [https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)
{% embed url="https://websec.nl/" %} {{#include ../banners/hacktricks-training.md}}