mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-22 19:13:39 +00:00
59 lines
6.8 KiB
Markdown
59 lines
6.8 KiB
Markdown
# Contaminação de Conexão HTTP
|
|
|
|
Os navegadores da web usam o [**HTTP connection coalescing**](https://daniel.haxx.se/blog/2016/08/18/http2-connection-coalescing), que permite que eles **reutilizem** uma única **conexão HTTP/2+** para solicitações que vão para **diferentes sites**, desde que os sites **resolvam para o mesmo IP** e usem um certificado TLS válido para ambos os nomes de host.
|
|
|
|
O **roteamento da primeira solicitação** é um comportamento perigoso de proxy reverso em que o **proxy analisa a primeira solicitação** em uma conexão para descobrir **qual back-end** roteá-la e, em seguida, **envia** todas as **solicitações subsequentes** nessa conexão para o **mesmo back-end**.
|
|
|
|
**A coalescência de conexão e o roteamento da primeira solicitação não funcionam bem juntos**. Por exemplo, imagine que secure.example.com e wordpress.example.com estão ambos atrás de um proxy reverso usando um certificado válido para \*.example.com:
|
|
```shell-session
|
|
$ nslookup wordpress.example.com
|
|
52.16.179.7 // reverse proxy that supports HTTP/2 and does first-request routing
|
|
|
|
$ nslookup secure.example.com
|
|
52.16.179.7 // same reverse proxy
|
|
|
|
$ openssl s_client -connect x.portswigger-labs.net:443
|
|
subject=/CN=*.example.com // wildcard TLS certificate
|
|
```
|
|
Se um navegador tentar enviar uma solicitação para **wordpress.example.com** seguido por **secure.example.com**, a coalescência de conexão do navegador forçará **ambas as solicitações em uma única conexão** para o front-end. O roteamento da primeira solicitação resultará na **solicitação para secure.example.com ser incorretamente roteada para o back-end do WordPress**. Isso significa que se você encontrar [XSS](https://portswigger.net/web-security/cross-site-scripting) em wordpress.example.com, você pode usá-lo para comprometer secure.example.com!
|
|
```javascript
|
|
// create HTTP/2+ connection
|
|
fetch('https://wordpress.example.com/', {credentials: 'include'})
|
|
|
|
// connection coalescing will force this down the same connection...
|
|
// ...leading to the front-end misrouting it to WordPress
|
|
// the browser thinks our injected JS is coming from secure.example.com
|
|
// exposing saved passwords, cookies, etc.
|
|
location='https://secure.example.com/plugin/x?q=<script>stealPasswords()'
|
|
```
|
|
Você pode **explorar a coalescência de conexão por si mesmo** usando o **gráfico de tempo na aba Network nas ferramentas de desenvolvedor do Chrome** (ou usando o WireShark se você é um masoquista). Emita pares de solicitações usando fetch() e veja se o gráfico mostra o tempo gasto na 'Conexão inicial' para a segunda solicitação, e se a coluna ID de conexão corresponde:
|
|
|
|
{% code overflow="wrap" %}
|
|
```javascript
|
|
fetch('//sub1.hackxor.net/', {mode: 'no-cors', credentials: 'include'}).then(()=>{ fetch('//sub2.hackxor.net/', {mode: 'no-cors', credentials: 'include'}) })
|
|
```
|
|
{% endcode %}
|
|
|
|
<figure><img src="../.gitbook/assets/image (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Não investi o tempo necessário para explorar essa ameaça em profundidade ou procurá-la na natureza, pois acredito que atualmente é rara por duas razões. Em primeiro lugar, o roteamento de primeira solicitação é relativamente incomum e a complexidade de implementação do HTTP/2 significa que há apenas um pequeno conjunto de servidores HTTP/2 exclusivos em relação ao HTTP/1.1. Em segundo lugar, a coalescência de conexão significa que os servidores HTTP/2 que executam o roteamento de primeira solicitação podem quebrar intermitentemente para visitantes genuínos, então os proprietários podem acabar corrigindo a vulnerabilidade sem incentivo do atacante.
|
|
|
|
Dito isso, nem tudo são más notícias para os atacantes. O **HTTP/3 propõe** [**remover o requisito de correspondência de endereço IP**](https://www.rfc-editor.org/rfc/rfc9114.html#name-connection-reuse)**, o que exporá todos que possuem um front-end que usa o roteamento de primeira solicitação e tem um certificado válido para vários hosts**.
|
|
|
|
Isso também cria um segundo risco que não está relacionado ao roteamento de primeira solicitação - significa que um **servidor comprometido com um certificado curinga não requer mais um MITM para ser explorado**. Na prática, isso aumenta muito o número de atores mal-intencionados que podem se beneficiar disso.
|
|
|
|
Para evitar esses riscos antes que se tornem realidade, certifique-se de que seus proxies reversos não executem o roteamento de primeira solicitação. Você pode testar isso manualmente no Repeater, habilitando o reuso de conexão HTTP/1 e HTTP/2, e também procurar por isso usando o ataque 'Connection-State' em [HTTP Request Smuggler](https://github.com/PortSwigger/http-request-smuggler). Além disso, esteja ciente de que, embora os certificados TLS curinga nunca tenham sido ideais, o HTTP/3 significa que um servidor comprometido com um certificado curinga agora pode ser usado para atacar domínios irmãos sem um MITM ativo.
|
|
|
|
Essas novas ameaças continuam a tendência contínua de infraestrutura da web se transformando em uma bagunça altamente entrelaçada, onde uma fraqueza em qualquer site individual tem numerosos efeitos colaterais não óbvios na segurança do sistema geral. Será interessante ver como esses riscos se desenrolam na prática.
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|