# 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ı
### İ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 `
` 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}}