# 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}}