hacktricks/pentesting-web/dependency-confusion.md

80 lines
5.7 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
# Confusão de Dependência
2022-11-29 16:54:14 +00:00
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<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">\
Aprenda e pratique Hacking GCP: <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)
2022-11-29 16:54:14 +00:00
<details>
<summary>Support HackTricks</summary>
2022-11-29 16:54:14 +00:00
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-11-29 16:54:14 +00:00
</details>
{% endhint %}
2022-11-29 16:54:14 +00:00
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
2023-06-06 18:56:34 +00:00
## Informações Básicas
2022-11-29 16:54:14 +00:00
Em resumo, uma vulnerabilidade de confusão de dependência ocorre quando um projeto está usando uma biblioteca com um nome **mal escrito**, **inexistente** ou com uma **versão não especificada** e o repositório de dependências utilizado permite **coletar versões atualizadas de repositórios públicos**.
2022-11-29 16:54:14 +00:00
* **Mal escrito**: Importar **`reqests`** em vez de `requests`
* **Inexistente**: Importar `company-logging`, uma biblioteca interna que **não existe mais**
* **Versão não especificada**: Importar uma biblioteca `company-requests` **interna** **existente**, mas o repositório verifica **repositórios públicos** para ver se há **versões maiores**.
2022-11-29 16:54:14 +00:00
2023-06-06 18:56:34 +00:00
## Exploração
2022-11-29 16:54:14 +00:00
{% hint style="warning" %}
2023-06-06 18:56:34 +00:00
Em todos os casos, o atacante só precisa publicar um **pacote malicioso com o nome** das bibliotecas usadas pela empresa vítima.
2022-11-29 16:54:14 +00:00
{% endhint %}
### Mal Escrito & Inexistente
2022-11-29 16:54:14 +00:00
Se sua empresa está tentando **importar uma biblioteca que não é interna**, é altamente provável que o repositório de bibliotecas esteja procurando por ela em **repositórios públicos**. Se um atacante a criou, seu código e máquinas em execução provavelmente estarão comprometidos.
2022-11-29 16:54:14 +00:00
2023-06-06 18:56:34 +00:00
### Versão Não Especificada
2022-11-29 16:54:14 +00:00
É muito comum que os desenvolvedores **não especifiquem nenhuma versão** da biblioteca utilizada, ou especifiquem apenas uma **versão maior**. Então, o interpretador tentará baixar a **última versão** que atenda a esses requisitos.\
Se a biblioteca for uma **biblioteca externa conhecida** (como o `requests` do python), um **atacante não pode fazer muito**, pois ele não conseguirá criar uma biblioteca chamada `requests` (a menos que seja o autor original).\
No entanto, se a biblioteca for **interna**, como `requests-company` neste exemplo, se o **repositório da biblioteca** permitir **verificar novas versões também externamente**, ele buscará por uma versão mais nova disponível publicamente.\
Portanto, se um **atacante souber** que a empresa está usando a biblioteca `requests-company` **versão 1.0.1** (permitindo atualizações menores). Ele pode **publicar** a biblioteca `requests-company` **versão 1.0.2** e a empresa **usará essa biblioteca em vez** da interna.
2022-11-29 16:54:14 +00:00
## Correção AWS
2022-11-29 16:54:14 +00:00
Essa vulnerabilidade foi encontrada no AWS **CodeArtifact** (leia os [**detalhes neste post do blog**](https://zego.engineering/dependency-confusion-in-aws-codeartifact-86b9ff68963d)).\
2023-06-06 18:56:34 +00:00
A AWS corrigiu isso permitindo especificar se uma biblioteca é interna ou externa, para evitar o download de dependências internas de repositórios externos.
2022-11-29 16:54:14 +00:00
2023-06-06 18:56:34 +00:00
## Encontrando Bibliotecas Vulneráveis
2022-11-29 16:54:14 +00:00
No [**post original sobre confusão de dependência**](https://medium.com/@alex.birsan/dependency-confusion-4a5d60fec610), o autor pesquisou milhares de arquivos package.json expostos contendo as dependências de projetos javascript.
2022-11-29 16:54:14 +00:00
2023-06-06 18:56:34 +00:00
## Referências
2022-11-29 16:54:14 +00:00
* [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" %}
Aprenda e pratique Hacking AWS:<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">\
Aprenda e pratique Hacking GCP: <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)
2022-11-29 16:54:14 +00:00
<details>
<summary>Support HackTricks</summary>
2022-11-29 16:54:14 +00:00
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-11-29 16:54:14 +00:00
</details>
{% endhint %}