hacktricks/pentesting-web/dependency-confusion.md

79 lines
5.9 KiB
Markdown

# Confusion de Dépendance
{% hint style="success" %}
Apprenez et pratiquez le Hacking AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Apprenez et pratiquez le Hacking GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team GCP (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Soutenir HackTricks</summary>
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
</details>
{% endhint %}
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% 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
{% hint style="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.
{% endhint %}
### 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 python `requests`), 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)
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
Apprenez et pratiquez le Hacking AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team AWS (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Apprenez et pratiquez le Hacking GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Formation Expert Red Team GCP (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Soutenir HackTricks</summary>
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
</details>
{% endhint %}