mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
84 lines
5.6 KiB
Markdown
84 lines
5.6 KiB
Markdown
# HTTP Bağlantı İsteği Kaçırma
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
**Bu sayfa,** [Tarayıcı Güçlü Desync Saldırıları](https://portswigger.net/research/browser-powered-desync-attacks) üzerine PortSwigger'ın öncü araştırmasını özetler, genişletir ve günceller ve HTTP/2 bağlantı durumu istismarına dair sonraki çalışmaları içerir. Bu, **bir kökenin yalnızca bir TCP/TLS bağlantısı başına bir kez belirlendiği** zayıflıklara odaklanır ve bir saldırganın kanalı kurduktan sonra istekleri farklı bir dahili ana bilgisayara “kaçırmasına” olanak tanır.
|
||
|
||
## Bağlantı Durumu Saldırıları <a href="#state" id="state"></a>
|
||
|
||
### İlk İstek Doğrulaması
|
||
|
||
İstekleri yönlendirirken, ters proxy'ler genellikle hedef arka uç sunucusunu belirlemek için **Host** (veya HTTP/2'de **:authority**) başlığına dayanabilir ve genellikle erişime izin verilen ana bilgisayarların bir beyaz listesine güvenebilir. Ancak, bazı proxy'lerde beyaz listenin **bağlantıdaki ilk istekte yalnızca bir kez uygulandığı** bir zayıflık bulunmaktadır. Sonuç olarak, saldırganlar önce izin verilen bir isteği göndererek ve ardından aynı temel bağlantıyı yeniden kullanarak dahili sanal ana bilgisayarlara erişebilirler:
|
||
```http
|
||
GET / HTTP/1.1
|
||
Host: allowed-external-host.example
|
||
|
||
GET /admin HTTP/1.1
|
||
Host: internal-only.example
|
||
```
|
||
### İlk İstek Yönlendirmesi
|
||
|
||
Birçok HTTP/1.1 ters proxy, bir çıkış bağlantısını arka uç havuzuna **yalnızca ilettikleri ilk isteğe dayanarak** eşler. Aynı ön uç soketi üzerinden gönderilen tüm sonraki istekler, Host başlıklarına bakılmaksızın sessizce yeniden kullanılır. Bu, şifre sıfırlama zehirlenmesi veya [web önbellek zehirlenmesi](https://portswigger.net/web-security/web-cache-poisoning) gibi klasik [Host başlık saldırıları](https://portswigger.net/web-security/host-header) ile birleştirilerek diğer sanal hostlara SSRF benzeri erişim elde etmek için kullanılabilir:
|
||
```http
|
||
GET / HTTP/1.1
|
||
Host: public.example
|
||
|
||
POST /pwreset HTTP/1.1
|
||
Host: private.internal
|
||
```
|
||
> [!TIP]
|
||
> Burp Suite Professional ≥2022.10'da **HTTP Request Smuggler → Connection-state probe**'u etkinleştirerek bu zayıflıkları otomatik olarak tespit edebilirsiniz.
|
||
|
||
---
|
||
|
||
## 2023-2025'te YENİ – HTTP/2/3 Bağlantı Birleştirme İstismarı
|
||
|
||
Modern tarayıcılar, sertifika, ALPN protokolü ve IP adresi eşleştiğinde HTTP/2 ve HTTP/3 isteklerini tek bir TLS bağlantısında **birleştirir**. Eğer bir ön uç yalnızca ilk isteği yetkilendiriyorsa, sonraki her birleştirilmiş istek o yetkilendirmeyi miras alır – **Host/:authority değişse bile**.
|
||
|
||
### İstismar senaryosu
|
||
1. Saldırgan, hedef `internal.company` ile aynı CDN kenar düğümüne çözümleyen `evil.com`'u kontrol eder.
|
||
2. Kurbanın tarayıcısı zaten `evil.com`'a açık bir HTTP/2 bağlantısına sahiptir.
|
||
3. Saldırgan, sayfasına gizli bir `<img src="https://internal.company/…">` yerleştirir.
|
||
4. Bağlantı parametreleri eşleştiği için, tarayıcı **mevcut** TLS bağlantısını yeniden kullanır ve `internal.company` için isteği çoklu yollarla gönderir.
|
||
5. Eğer CDN/yönlendirici yalnızca ilk isteği doğruladıysa, iç host açığa çıkar.
|
||
|
||
Chrome/Edge/Firefox için PoC'ler James Kettle'ın *“HTTP/2: The Sequel is Always Worse”* (Black Hat USA 2023) konuşmasında mevcuttur.
|
||
|
||
### Araçlar
|
||
* **Burp Suite 2023.12**, otomatik olarak birleştirme ve TE/CL tekniklerini denemek için deneysel bir **HTTP/2 Smuggler** ekleme noktası tanıttı.
|
||
* **smuggleFuzz** (https://github.com/microsoft/smugglefuzz) – 2024'te HTTP/2 ve HTTP/3 üzerinden ön uç/arka uç desenkronizasyon vektörlerini zorlamak için yayımlanan bir Python çerçevesi.
|
||
|
||
### Önlemler
|
||
* Her istekte **Host/:authority'yi yeniden doğrulayın**, yalnızca bağlantı oluşturma sırasında değil.
|
||
* CDN/yük dengeleyici katmanlarında **kaynak birleştirmeyi** devre dışı bırakın veya sıkı bir şekilde sınırlayın (örneğin, NGINX'de `http2_origin_cn` kapalı).
|
||
* Tarayıcının yasal olarak birleştirememesi için iç ve dış ana bilgisayar adları için ayrı sertifikalar veya IP adresleri dağıtın.
|
||
* Pratikte her isteğin ardından **connection: close** veya `proxy_next_upstream` tercih edin.
|
||
|
||
---
|
||
|
||
## Gerçek Dünya Vakaları (2022-2025)
|
||
|
||
| Yıl | Bileşen | CVE | Notlar |
|
||
|------|-----------|-----|-------|
|
||
| 2022 | AWS Uygulama Yük Dengeleyici | – | Host başlığı yalnızca ilk istekte doğrulandı; kurallar motorunu yamanarak düzeltildi (SecurityLabs tarafından açıklandı). |
|
||
| 2023 | Apache Traffic Server < 9.2.2 | CVE-2023-39852 | `CONFIG proxy.config.http.parent_proxy_routing_enable` ayarlandığında HTTP/2 bağlantı yeniden kullanımı yoluyla istek sızdırmasına izin verdi. |
|
||
| 2024 | Envoy Proxy < 1.29.0 | CVE-2024-2470 | İlk akıştan sonra :authority'nin yanlış doğrulanması, paylaşılan ağlarda kiralık istek sızdırmasına neden oldu. |
|
||
|
||
---
|
||
|
||
## Tespit Kılavuzu
|
||
|
||
1. Farklı Host veya :authority başlıkları ile **aynı** TCP/TLS bağlantısında iki istek gönderin.
|
||
2. İkinci yanıtın ilk hosttan (güvenli) mı yoksa ikinci hosttan (açık) mı geldiğini gözlemleyin.
|
||
3. Burp'ta: `Repeat → keep-alive → Send → Follow`.
|
||
4. HTTP/2'yi test ederken, masum bir host için **özel** bir akış (ID 1) açın, ardından bir iç hosta ikinci bir akış (ID 3) çoklu yollarla gönderin ve bir yanıt arayın.
|
||
|
||
---
|
||
|
||
## Referanslar
|
||
|
||
* PortSwigger Araştırma – *HTTP/2: The Sequel is Always Worse* (Black Hat USA 2023)
|
||
* Envoy Güvenlik Danışmanlığı CVE-2024-2470 – Yanlış yetki doğrulama
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|