hacktricks/pentesting-web/dependency-confusion.md

79 lines
5.4 KiB
Markdown

# Dependency Confusion
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
## Basic Information
Ukratko, ranjivost zavisnosti se javlja kada projekat koristi biblioteku sa **pogrešno napisanim** imenom, **nepostojećom** ili sa **neodređenom verzijom** i korišćeni repozitorij zavisnosti omogućava da se **prikupe ažurirane verzije iz javnih** repozitorija.
* **Pogrešno napisano**: Uvoz **`reqests`** umesto `requests`
* **Nepostojeće**: Uvoz `company-logging`, interne biblioteke koja **više ne postoji**
* **Neodređena verzija**: Uvoz **interne** **postojeće** `company-requests` biblioteke, ali repozitorij proverava **javne repozitorije** da vidi da li postoje **veće verzije**.
## Exploitation
{% hint style="warning" %}
U svim slučajevima napadaču je potrebno samo da objavi **zloćudni paket sa imenom** biblioteka koje koristi žrtvinska kompanija.
{% endhint %}
### Misspelled & Inexistent
Ako vaša kompanija pokušava da **uvozi biblioteku koja nije interna**, vrlo verovatno će repozitorij biblioteka tražiti u **javnim repozitorijima**. Ako je napadač to stvorio, vaš kod i mašine koje rade su vrlo verovatno kompromitovani.
### Unspecified Version
Veoma je uobičajeno da programeri **ne specificiraju nijednu verziju** korišćene biblioteke, ili specificiraju samo **glavnu verziju**. Tada će interpreter pokušati da preuzme **najnoviju verziju** koja odgovara tim zahtevima.\
Ako je biblioteka **poznata spoljna biblioteka** (kao što je python `requests`), **napadač ne može mnogo da uradi**, jer neće moći da stvori biblioteku pod imenom `requests` (osim ako nije originalni autor).\
Međutim, ako je biblioteka **interna**, kao što je `requests-company` u ovom primeru, ako **repo biblioteke** dozvoljava da se **proveravaju nove verzije i spolja**, tražiće noviju verziju koja je javno dostupna.\
Dakle, ako **napadač zna** da kompanija koristi `requests-company` biblioteku **verzija 1.0.1** (dozvoljava manje ažuriranja). Može **objaviti** biblioteku `requests-company` **verzija 1.0.2** i kompanija će **koristiti tu biblioteku umesto** interne.
## AWS Fix
Ova ranjivost je pronađena u AWS **CodeArtifact** (pročitajte [**detalje u ovom blog postu**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)).\
AWS je to ispravio omogućavajući da se specificira da li je biblioteka interna ili eksterna, kako bi se izbeglo preuzimanje internih zavisnosti iz spoljnih repozitorija.
## Finding Vulnerable Libraries
U [**originalnom postu o zavisničkoj konfuziji**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610) autor je pretraživao hiljade izloženih package.json fajlova koji sadrže zavisnosti javascript projekata.
## References
* [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" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}