HTTP Request Smuggling

Web uygulamalarının HTTP isteklerini işleme biçimindeki zafiyetleri kullanarak gerçekleştirilen gelişmiş siber saldırı tekniklerini öğrenin

TEHDİT SEVİYESİ: YÜKSEk

HTTP Request Smuggling Nasıl Çalışır?

Modern web uygulamaları genellikle kullanıcılar ve asıl uygulama mantığı arasında HTTP sunucu zinciri kullanır. Kullanıcılar istekleri front-end sunucuya (yük dengeleyici veya reverse proxy) gönderir ve bu sunucu istekleri bir veya daha fazla back-end sunucuya iletir.

Kullanıcı → Front-end Server → Back-end Server → Uygulama
             [İstek]      [İletim]       [İşleme]
             
Front-end ve back-end sunucunun aynı bağlantı üzerinden 
birden fazla HTTP isteğini sırayla göndermesi:
Kritik Nokta: Front-end ve back-end sistemlerin istek sınırları konusunda anlaşması çok önemlidir. Aksi takdirde, saldırgan belirsiz bir istek gönderebilir ve bu farklı şekilde yorumlanabilir.
Saldırı Senaryosu
Saldırgan, front-end isteğinin bir kısmının back-end sunucu tarafından sonraki isteğin başlangıcı olarak yorumlanmasına neden olur. Bu, bir sonraki istekle etkileşim kurar ve uygulamanın o isteği işleme biçimini etkileyebilir.

HTTP Request Smuggling Zafiyet Türleri

HTTP/1 spesifikasyonu, bir isteğin nerede bittiğini belirtmek için iki farklı yol sağlar: Content-Length header'ı ve Transfer-Encoding header'ı. Bu çifte standardın kötüye kullanılması request smuggling zafiyetlerinin temel nedenidir.

CL.TE Saldırıları Yüksek Risk
TE.CL Saldırıları Yüksek Risk
TE.TE Saldırıları Çok Yüksek Risk
HTTP/2 Downgrading Orta Risk
Content-Length vs Transfer-Encoding:
  • • Content-Length: Mesaj gövdesinin byte cinsinden uzunluğu
  • • Transfer-Encoding: Chunked encoding kullanımı
  • • Her iki header birlikte kullanılırsa çakışma oluşur
  • • Farklı sunucular farklı header'lara öncelik verebilir

CL.TE Saldırıları

CL.TE saldırılarında front-end sunucu Content-Length header'ını kullanırken, back-end sunucu Transfer-Encoding header'ını kullanır.

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 13
Transfer-Encoding: chunked

0

SMUGGLED
Saldırı Analizi
Front-end: Content-Length=13 → SMUGGLED'a kadar 13 byte okur
Back-end: Transfer-Encoding → chunked okur, 0 chunk ile bitirir
Sonuç: "SMUGGLED" kelimesi bir sonraki istek olarak işlenir
Exploit Etkisi: Bu teknikle saldırgan, back-end sunucuda kalan "SMUGGLED" metnini bir sonraki kullanıcının isteğinin başlangıcı haline getirebilir.

TE.CL Saldırıları

TE.CL saldırılarında front-end sunucu Transfer-Encoding header'ını kullanırken, back-end sunucu Content-Length header'ını kullanır.

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 3
Transfer-Encoding: chunked

8
SMUGGLED
0
Dikkat: Bu isteği Burp Repeater ile gönderirken, "Update Content-Length" seçeneğinin kapatılması ve son 0'dan sonra \r\n\r\n eklenmesi gerekir.
Teknik Detay
Front-end: Chunked encoding → 8 byte "SMUGGLED", sonra 0 chunk
Back-end: Content-Length=3 → sadece "8\r\n" okur
Sonuç: "SMUGGLED\r\n0\r\n\r\n" back-end'de yeni istek olur

TE.TE Saldırıları (Header Obfuscation)

TE.TE saldırılarında hem front-end hem de back-end sunucular Transfer-Encoding header'ını destekler, ancak sunuculardan biri header'ın gizlenmiş versiyonunu işlemez.

// Farklı Obfuscation Teknikleri:

Transfer-Encoding: xchunked
Transfer-Encoding : chunked
Transfer-Encoding: chunked
Transfer-Encoding: x
Transfer-Encoding:[tab]chunked
[space]Transfer-Encoding: chunked
X: X[\n]Transfer-Encoding: chunked
En Tehlikeli Saldırı Türü: TE.TE saldırıları tespit edilmesi en zor olan türdür çünkü her iki sunucu da aynı header'ı desteklediği için anomali daha az belirgindir.
Obfuscation Teknikleri:
  • • Header adını değiştirme (xchunked)
  • • Fazla boşluk ekleme
  • • Çift header kullanma
  • • Tab karakteri ekleme
  • • Satır sonu karakterleri manipülasyonu

HTTP Request Smuggling Tespit Yöntemleri

Request smuggling zafiyetlerini tespit etmek için farklı teknikler kullanılabilir. En etkili yöntem timing tabanlı tespit teknikleridir.

Tespit Süreci

Timing
Analizi
Differential
Response
Payload
Testing
Zafiyet
Doğrulama
// Timing Tabanlı Tespit
POST / HTTP/1.1
Host: target.com
Content-Length: 4
Transfer-Encoding: chunked

1
Z
Q
Timing Tekniği
Eğer back-end sunucu request smuggling'e açıksa, "Q" karakteri bir sonraki isteğin başlangıcı olarak bekletilir. Bu durumda sunucu timeout süresince bekler ve yavaş yanıt verir.
Tespit İpuçları:
  • • Beklenmedik HTTP durum kodları
  • • Yanıt sürelerindeki anormallikler
  • • Farklı Content-Length değerleri ile test
  • • Burp Suite'in HTTP Request Smuggler extension'ı
  • • Manual timing ölçümleri

Gerçek Dünya Saldırı Örnekleri

HTTP Request Smuggling ile yapılabilecek saldırı türleri ve bunların potansiyel etkileri aşağıda açıklanmıştır.

1. Güvenlik Kontrolü Atlama
Front-end güvenlik kontrollerini atlatarak back-end'e doğrudan erişim sağlama
// Admin Panel Erişimi
POST /admin HTTP/1.1
Host: target.com
Content-Length: 37
Transfer-Encoding: chunked

0

GET /admin/delete-user?id=123 HTTP/1.1
X:
2. Cache Poisoning
Web cache'ini zehirleyerek diğer kullanıcılara kötü niyetli içerik sunma
3. Session Hijacking
Diğer kullanıcıların session bilgilerini çalarak hesaplarını ele geçirme
Gerçek Vaka
2019'da Netflix'te bulunan request smuggling zafiyeti sayesinde saldırganlar internal API'lere erişim sağlayabiliyordu. Bu zafiyet potansiyel olarak milyonlarca kullanıcının verilerini etkileyebilirdi.

Korunma Yöntemleri ve Güvenlik Önlemleri

HTTP Request Smuggling saldırılarından korunmak için çeşitli güvenlik önlemleri alınabilir. En etkili yaklaşım, sistemi tamamen HTTP/2 kullanacak şekilde yapılandırmaktır.

Ana Korunma Stratejileri:
  • • HTTP/2 End-to-End: HTTP downgrading'i devre dışı bırakın
  • • Request Normalization: Belirsiz istekleri normalleştirin
  • • Strict Validation: HTTP/1.1 spesifikasyonuna uygun doğrulama
  • • Connection Closing: Belirsiz istekler için TCP bağlantısını kapatın
  • • Forward Proxy: Mümkünse upstream HTTP/2 kullanın
// Nginx Yapılandırması
server {
    # HTTP/2 zorla
    listen 443 ssl http2;
    
    # Belirsiz header'ları reddet
    if ($http_transfer_encoding ~* "chunked.*chunked") {
        return 400;
    }
    
    # Content-Length doğrulaması
    client_max_body_size 1m;
}
Kritik Yapılandırma: Back-end bağlantı havuzlamasını devre dışı bırakmak bazı saldırı türlerini önleyebilir ancak request tunneling saldırılarına karşı tam koruma sağlamaz.
WAF Yapılandırması
Modern WAF'ler (CloudFlare, AWS WAF) request smuggling korumaları içerir. Ancak bunlara tamamen güvenmek yerine altyapı seviyesinde önlem almak daha güvenlidir.

Gelişmiş HTTP Request Smuggling Teknikleri

Modern web uygulamalarında HTTP/2 to HTTP/1 downgrading ve browser-powered request smuggling gibi gelişmiş teknikler ortaya çıkmıştır.

Gelişmiş Saldırı Vektörleri

HTTP/2
Downgrading
Browser
Powered
Request
Tunneling
Client-Side
Desync
HTTP/2 Downgrading Riski: Birçok web sitesi HTTP/2 front-end sunucu kullanır ancak back-end HTTP/1 altyapısına sahiptir. Bu dönüşüm süreci yeni saldırı vektörleri yaratır.
// HTTP/2 to HTTP/1 Downgrading Exploit
:method: POST
:path: /
:authority: target.com
content-length: 0

GET /admin HTTP/1.1
Host: target.com
Browser-Powered Saldırılar: Bu teknik ile saldırganlar, mağdurun tarayıcısının vulnerable web sitesi ile olan bağlantısını zehirleyebilir. Bu, doğrudan erişimi olmayan sitelere bile saldırı düzenlemeyi mümkün kılar.
Research İpucu
PortSwigger Research ekibi sürekli olarak yeni HTTP Request Smuggling tekniklerini keşfetmektedir. En güncel saldırı vektörleri için whitepaper'larını takip edin.

HTTP Request Smuggling Özeti

Kritik Noktalar
Tespit: Timing tabanlı teknikler en etkili tespit yöntemidir
Etki: Güvenlik kontrol atlama, veri sızıntısı, session hijacking
Korunma: HTTP/2 end-to-end kullanım en güvenli yaklaşımdır
Test: Burp Suite HTTP Request Smuggler extension kullanın

"Güvenlik her zaman en zayıf halkanın gücü kadardır"