mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/http-connection-request-smuggling.md'] t
This commit is contained in:
parent
f4af61f1d4
commit
03cf7e7531
@ -1,34 +1,83 @@
|
||||
# HTTP Bağlantı İsteği Smuggling
|
||||
# HTTP Bağlantı İsteği Kaçırma
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
**Bu, gönderinin bir özetidir** [**https://portswigger.net/research/browser-powered-desync-attacks**](https://portswigger.net/research/browser-powered-desync-attacks)
|
||||
**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 başlığına** dayanabilir ve genellikle erişime izin verilen hostların bir beyaz listesini kullanır. Ancak, bazı proxy'lerde beyaz listenin yalnızca bir bağlantıdaki ilk istekte uygulanmasına neden olan bir zafiyet bulunmaktadır. Sonuç olarak, saldırganlar önce izin verilen bir hosta istek yaparak ve ardından aynı bağlantı üzerinden bir iç site talep ederek bunu istismar edebilirler:
|
||||
```
|
||||
İ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]
|
||||
Host: allowed-external-host.example
|
||||
|
||||
GET / HTTP/1.1
|
||||
Host: [internal-host]
|
||||
GET /admin HTTP/1.1
|
||||
Host: internal-only.example
|
||||
```
|
||||
### İlk İstek Yönlendirmesi
|
||||
|
||||
Bazı yapılandırmalarda, bir ön uç sunucusu **ilk isteğin Host başlığını** kullanarak o isteğin arka uç yönlendirmesini belirleyebilir ve ardından aynı istemci bağlantısından gelen tüm sonraki istekleri aynı arka uç bağlantısına sürekli olarak yönlendirebilir. Bu şu şekilde gösterilebilir:
|
||||
```
|
||||
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: example.com
|
||||
Host: public.example
|
||||
|
||||
POST /pwreset HTTP/1.1
|
||||
Host: psres.net
|
||||
Host: private.internal
|
||||
```
|
||||
Bu sorun, diğer zafiyetleri istismar etmek veya ek sanal hostlara yetkisiz erişim sağlamak için şifre sıfırlama zehirlenmesi veya [web cache poisoning](https://portswigger.net/web-security/web-cache-poisoning) gibi [Host header attacks](https://portswigger.net/web-security/host-header) ile birleştirilebilir.
|
||||
> [!TIP]
|
||||
> Burp Suite Professional ≥2022.10'da **HTTP Request Smuggler → Connection-state probe**'u etkinleştirerek bu zayıflıkları otomatik olarak tespit edebilirsiniz.
|
||||
|
||||
> [!NOTE]
|
||||
> Bu zafiyetleri tanımlamak için HTTP Request Smuggler'daki 'connection-state probe' özelliği kullanılabilir.
|
||||
---
|
||||
|
||||
## 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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user