HTTP request smuggling ve parameter pollution saldırılarına karşı koruma var mı?
Kısa cevap
Evet; iki saldırı farklı katmanlarda karşılanır. HTTP request smuggling'de ilk katman TR7'nin HTTP ayrıştırmasıdır: TR7 isteği Kurum Servisine iletmeden önce kendisi ayrıştırıp yeniden çerçeveler; birden çok Content-Length ya da Content-Length ile Transfer-Encoding'i birlikte taşıyan istekler varsayılan olarak 400 ile reddedilir. Bu davranışı gevşeten tek ayar, URL Normalization action'ındaki Accept headers not compatible with RFC7230 HTTP/0.9,HTTP/1.0 (Condition independent) seçeneğidir ve koşuldan bağımsız olarak bütün vService trafiğine uygulanır. WAF ayrıca HTTP Request Smuggling kategorisinde 8 kural (15 imza) taşır (çift Transfer-Encoding ve Content-Length, Transfer-Encoding manipülasyonu, header'a gömülü istek satırı); bunların 2 puanlı 3 tanesi yalnızca Aggressive koruma düzeyinde yüklenir. Parameter pollution'da aynı parametrenin bir istekte kaç kez gelebileceği Query, Header ve Form sekmelerindeki value count alanlarıyla (Query Value Count, Header Value Count, Form Value Count) sınırlanır. Any Paths varsayılanı header'da 1, query'de 128, form'da 512'dir; query ve form tekrarı varsayılan olarak ihlal üretmez, API endpoint'lerinde parametre bazında 1'e indirilir. Parameter Pollution kategorisindeki 3 kural (9 imza) dizi sözdizimiyle yapılan kirletmeyi arar. JSON gövdede yinelenen anahtar için denetim yoktur.
Nasıl Çalışır?
HTTP Request Smuggling
Request smuggling, önde duran bir proxy ile arkadaki sunucunun bir isteğin nerede bittiğini farklı yorumlamasını istismar eder; çelişkili Content-Length ve Transfer-Encoding header'larıyla bir isteğin içine ikinci bir istek gizlenir (PortSwigger: HTTP request smuggling). TR7 tam bir proxy olarak çalıştığı için isteği kendisi ayrıştırır ve Kurum Servisine kendi çerçevelediği bağlantı üzerinden iletir.
| Katman | Ne yapar | Ne zaman devrededir |
|---|---|---|
| HTTP ayrıştırması | Birden çok Content-Length ya da Host header'ı ve Content-Length ile Transfer-Encoding'i birlikte taşıyan istekleri 400 ile reddeder | Varsayılan |
| Accept headers not compatible with RFC7230 HTTP/0.9,HTTP/1.0 (Condition independent) | RFC 7230'a uymayan istekleri kabul eder; ayrıştırmadaki reddi gevşetir | Yalnızca vService'e bağlı bir URL Normalization action'ında seçildiğinde; koşuldan bağımsız, bütün trafiğe |
| HTTP Request Smuggling imzaları | Header'larda çift Transfer-Encoding ve Content-Length, Transfer-Encoding manipülasyonu, CRLF ile gömülü istek satırı arar | WAF açıkken; 8 puanlılar her düzeyde, 2 puanlılar yalnızca Aggressive'de |
Kategorinin kuralları: HTTP Request Smuggling TE Duplicate, HTTP Request Smuggling CL Duplicate, HTTP Transfer Encoding Header Manipulation, HTTP Smuggling CRLF HTTP ve HTTP Request Smuggling - Method Line in Header 8 puan; Http Request Smuggling Cl Te Conflict, Http Request Smuggling Malformed Headers ve Header Smuggling Pollution 2 puandır. L7 DDoS & Threat Protection'ın Bot Protection'ı da gövde taşıyan GET isteği gibi protokol çelişkilerini bot skoruna sinyal olarak katar (WAF ile L7 DDoS & Threat Protection arasındaki fark nedir; ikisine birden ihtiyacım var mı?).
Parameter Pollution
HTTP parameter pollution, aynı parametrenin bir istekte birden çok kez gönderilmesiyle (?id=1&id=2) WAF ile uygulamanın farklı değeri okumasını ya da uygulama mantığının değiştirilmesini hedefler (OWASP Testing Guide: HTTP Parameter Pollution).
| Denetim | Kapsam | Any Paths varsayılanı |
|---|---|---|
| Query Value Count | Aynı query parametresinin tekrar sayısı | 128 |
| Header Value Count | Aynı header'ın tekrar sayısı | 1 |
| Form Value Count | Aynı form alanının tekrar sayısı | 512 |
| Parameter Pollution imzaları (PHP Array Parameter Manipulation, PHP Settings Array Pollution, Nested Array Parameter Pollution) | param[]= gibi dizi sözdizimiyle kirletme | WAF açıkken |
| JSON'da yinelenen anahtar | - | Denetim yoktur |
WAF bir istekteki bütün parametre değerlerini ayrı ayrı tarar; imza taramasında tekrar eden parametrelerin her değeri denetlenir. Value count sınırı aşıldığında 24 puanlık yapısal ihlal yazılır ve istek Blocking modunda engellenir.
Çözüm: 2 Yöntem
Smuggling için varsayılan davranış korumayı sağlar; yapılacak iş URL Normalization action'ında RFC7230 seçeneğinin gerekmedikçe işaretlenmemesidir (URL Normalization · Normalization). Parameter pollution için API endpoint'lerinde tekrar sınırı daraltılır; yöntemler aynı ayarı yazar. Ön koşul: vService'te WAF açıktır (Bir vService'te WAF korumasını nasıl etkinleştiririm?) ve endpoint için bir sayfa tipi vardır (Yeni bir page type'ı elle nasıl eklerim?).
| Durumunuz | Uygun yöntem |
|---|---|
| Arayüzden tanımlamak istiyorum | Yöntem 1: Query sekmesi |
| Komut satırından tanımlamak istiyorum | Yöntem 2: WEB-CLI |
Yöntem 1: Query Sekmesi Önerilen
- Nasıl çalışır Endpoint'in Query ortak kuralı ya da tek bir parametrenin değişken kuralı, parametrenin bir istekte en fazla kaç kez geçebileceğini belirler.
- Nerede açılır Left Monitor Panel → WAF-Protected vServices → vService → WAF Management → N page types → kural → Query sekmesi
- Gereksinim WAF alanında değiştirme yetkisi; Checks'te Structure Checks açık; host grubu Monitor ya da Blocking modunda
- vService tipi HTTP
Adım adım yapılandırma
WAF Management sekmesinde Checks kartının kalem ikonu tıklanır; value count denetimleri Structure Checks anahtarına bağlıdır ve işaretli olmalıdır. Değişiklik yapıldıysa Edit tıklanır.
WAF Management sekmesinde host grubunun mod kartı altındaki N page types satırına tıklanır; endpoint'in kuralına tıklanır ve detay panelinde Query sekmesi seçilir (ekrana erişim).
Tek bir parametre için Add Argument Rule for Query tıklanır; endpoint'teki bütün parametreler için aynı sınır isteniyorsa Add Common Rule for Query (kuralın kendi Query denetimi varsa Edit Common Rule for Query) tıklanır.
Değişken kuralında Argument Name alanına parametre adı (ör. id) yazılır ve Query Value Count = 1 girilir. Boş bırakılırsa tekrar sınırı uygulanmaz; 0 girilirse parametrenin her kullanımı ihlal sayılır (Aynı parametrenin kaç kez tekrarlanabileceğini sınırlayabilir miyim (Value count)?). Değişken kuralı, o parametrenin değer denetimlerini ortak kuraldan devralmaz; değer uzunluğu ve deseni de bu formda girilir.
Formdaki Add tıklanır; ayrı bir dağıtım adımı yoktur. Form gövdeli endpoint'lerde aynı ayar Form sekmesinde Form Value Count ile yapılır. Cluster'da değişiklik varsayılan auto-sync ile eş cihaza gönderilir; Manual Sync Mode açıksa Synchronize ile gönderilir.
Doğrulama
Parametre iki kez gönderilir ve Event Logs kaydının Attacks sekmesine bakılır.
Komut: curl -s -o /dev/null -w "%{http_code}\n" "https://api.example.com/api/v1/orders?id=100&id=200"
Query value count (24)id ile gönderilen istek ihlal üretmez.Yöntem 2: WEB-CLI
- Nasıl çalışır Parametreye özel değişken kuralı
waf rule-parts add … loc query --arg <ad>ile yazılır;--argMultipletekrar sınırıdır. - Nerede açılır WEB-CLI →
waf rule-parts - Gereksinim WEB-CLI erişimi ve WAF alanında değiştirme yetkisi; vService, host grubu ve kural kimlikleri
- vService tipi HTTP
Adım adım yapılandırma
Host grubunun kimliği waf host-groups list poolId <vService>, kuralın kimliği şu komutun çıktısından okunur:
waf fw-rules list poolId <vService> hostGroupId <grup>waf rule-parts add poolId <vService> hostGroupId <grup> ruleId <kural> loc query --arg id --argMultiple 1Komut başarılı olduğunda çıktı vermez. Yazılmayan alanlar şema varsayılanlarıyla kaydedilir; parametrenin değer uzunluğu sınırı 0–1024 olur, daha uzun değer taşıyan parametrede --valueLength.val2 ile artırılır.
Doğrulama
Kuralın parçaları listelenir.
Komut: waf rule-parts list poolId <vService> hostGroupId <grup> ruleId <kural>
query: id parçasıSık Yapılan Hatalar
- RFC7230 seçeneğini gereksiz yere işaretlemek. Seçenek koşul alanından bağımsız olarak bütün vService trafiğine uygulanır ve çelişkili çerçeveli istekleri de kabul ettirir; yalnızca eski istemcilerle zorunlu uyumluluk için ve risk değerlendirilerek kullanılır.
- Query tekrarının varsayılan olarak engellendiğini sanmak. Any Paths'te Query Value Count 128'dir; API endpoint'lerinde parametre bazında düşürülür.
- JSON gövdede yinelenen anahtar denetimi beklemek. JSON için tekrar sınırı alanı yoktur; yinelenen anahtarlarda uygulamanın davranışı uygulamanın JSON ayrıştırıcısına bağlıdır.
- Learning modunda denetimin çalışmasını beklemek. Value count denetimleri yalnızca Monitor ve Blocking modlarında uygulanır.
- 2 puanlı smuggling imzalarının her düzeyde çalıştığını sanmak. 2 puanlı kurallar yalnızca Aggressive koruma düzeyinde yüklenir.
Dokümantasyonda nasıl yapılır
