Hızlı cevap: HTTP request smuggling (istek kaçakçılığı), bir isteğin nerede bittiğini önündeki sunucu (ön uç, proxy ya da CDN) ile arkadaki sunucunun farklı yorumlaması sonucu, saldırganın gizli bir istek kaçırabilmesidir. Saldırgan, Content Length ve Transfer Encoding başlıklarını çelişkili kullanarak bir isteğin sonunu belirsiz bırakır. Ön uç isteği bir yerde biter sayarken arka uç başka yerde biter sayar, böylece kaçırılan parça bir sonraki kullanıcının isteğine eklenir. Sonuç, önbellek zehirleme, oturum çalma, güvenlik denetimlerini atlatma ve başka kullanıcıların yanıtlarını ele geçirme olabilir. Kök çözüm, ön uç ile arka ucun aynı ve katı ayrıştırma kurallarını kullanmasını sağlamak ve belirsiz istekleri reddetmektir.

Modern web mimarilerinde bir isteğin önünde çoğu zaman bir CDN, yük dengeleyici ya da ters proxy vardır. Bu katmanlar aynı HTTP isteğini aynı biçimde yorumlamak zorundadır. Aralarında en ufak bir yorum farkı, request smuggling'e kapı açar. Bu yazı, istek kaçakçılığının nasıl oluştuğunu, türlerini ve doğru savunmayı anlatır.

Request smuggling nasıl çalışır

HTTP, bir isteğin gövdesinin nerede bittiğini iki yöntemle belirtir: Content Length başlığı gövdenin uzunluğunu bildirir, Transfer Encoding chunked ise gövde parçalar halinde gelir ve özel bir bitiş işaretiyle sonlanır. Sorun, bir istek her iki başlığı da içerdiğinde ya da başlıkları biçimsel olarak bozuk gönderdiğinde ortaya çıkar.

Ön uç sunucu bir başlığı esas alır, arka uç sunucu diğerini esas alır. Bu uyuşmazlık yüzünden bir isteğin bir kısmı, arka uç tarafından ayrı ve yeni bir istek olarak görülür. Bu kaçırılan parça, sıradaki meşru kullanıcının isteğinin başına eklenir.

Request smuggling türleri

Tür Ön uç ve arka uç Kısa açıklama
CL.TE Ön uç Content Length, arka uç Transfer Encoding Ön uç uzunluğu, arka uç chunked okur
TE.CL Ön uç Transfer Encoding, arka uç Content Length Tersi yorum farkı
TE.TE Her ikisi Transfer Encoding Biri bozuk başlığı yok sayar
H2.CL / H2.TE HTTP/2 ile HTTP/1 çevirisi Protokol düşürmede oluşan uyuşmazlık

HTTP/2 kullanan sistemlerde bile, arka uca HTTP/1 olarak çevrildiğinde bu sınıf açıklar geri gelebilir. Bu yüzden protokol çevirisi kritik bir noktadır.

Gerçek etki

Request smuggling tek başına bir bilgi ifşası değildir, bir saldırı katmanıdır. Kaçırılan istekle şunlar yapılabilir:

  • Önbellek zehirleme. Zararlı yanıt önbelleğe alınıp diğer kullanıcılara servis edilir. Ayrıntı için web önbellek zehirleme mantığı ile birlikte değerlendirilmelidir.
  • Oturum ve kimlik çalma. Kaçırılan istek başka kullanıcının isteğine karışıp oturum bilgisini ele geçirebilir, bu da hesap ele geçirmeye gidebilir.
  • Güvenlik denetimini atlatma. Ön uçtaki WAF ya da erişim kontrolü, kaçırılan isteği görmediği için atlatılır.
  • İç uçlara erişim. Ön ucun engellediği yönetim uçlarına arka uçtan ulaşılabilir, SSRF ile birleşince etki büyür.

Neden tespiti zor

Request smuggling, zamanlama ve sunucu davranışına dayandığı için basit tarayıcılarla kolayca kaçırılır. Aynı istek bir ortamda çalışırken başka bir yapılandırmada çalışmaz. Bir açığın gerçek olduğunu kanıtlamak için, isteğin arka uçta gerçekten ikiye bölündüğünü kontrollü biçimde göstermek gerekir. Yanlış pozitif riski yüksek olduğu için doğrulanmamış bir smuggling iddiası ciddiye alınmamalıdır.

Doğru savunma

1. Ön uç ve arka uçta aynı ayrıştırma

Zincirdeki tüm sunucular HTTP başlıklarını aynı ve katı kurallarla yorumlamalıdır. Content Length ve Transfer Encoding aynı anda gelen istekler reddedilmelidir.

2. Belirsiz istekleri reddetme

Bozuk ya da çelişkili uzunluk başlıkları taşıyan istekler, işlenmeden reddedilmelidir. Belirsizlik güvensizliktir.

3. Uçtan uca HTTP/2 ve bağlantı yalıtımı

Mümkünse arka uca da HTTP/2 taşınmalı, protokol düşürme en aza indirilmelidir. Bağlantıların tekrar kullanımı istemci bazında yalıtılmalıdır.

4. Güncel proxy ve CDN

İstek kaçakçılığı çoğu zaman belirli proxy ve sunucu sürümlerindeki ayrıştırma hatalarından kaynaklanır. Ön uç bileşenleri güncel tutulmalıdır.

KAOS ile request smuggling taraması

DSET'in yerel yapay zekâ güvenlik motoru KAOS, request smuggling'i zamanlama ve yanıt farklarına dayanarak, kanıt temelli test eder. Farklı CL ve TE kombinasyonlarını dener, isteğin arka uçta gerçekten bölünüp bölünmediğini gözlemler ve yalnızca gerçekten desenkron olan uçları raporlar. Zamanlama tabanlı bir sinyalin ağ gecikmesinden mi yoksa gerçek bir desync'ten mi kaynaklandığını ayırt eder, böylece yanlış pozitif olmadan doğrulanmış bulgu sunar. Bu sınıf açıklar üretim ortamını riske atabildiği için, test her zaman kontrollü ve yetkili biçimde yapılır.

Sık sorulan sorular

HTTP/2 kullanıyorum, request smuggling beni etkiler mi? Evet, etkileyebilir. Uçtan uca HTTP/2 kullanmıyorsanız ve arka uca HTTP/1 olarak çevriliyorsa, bu çeviri sırasında H2.CL ve H2.TE gibi uyuşmazlıklar oluşabilir. Protokol çevirisi olan her nokta risklidir.

WAF request smuggling'i durdurur mu? Tek başına güvenilmez. Aksine, smuggling'in sık kullanılan amaçlarından biri ön uçtaki WAF'ı atlatmaktır, çünkü kaçırılan istek WAF tarafından görülmez. Savunma, tutarlı ayrıştırma ve belirsiz isteklerin reddedilmesidir.

Bir tarayıcı bana smuggling buldu dedi, panik yapmalı mıyım? Önce doğrulanması gerekir. Zamanlama tabanlı sinyaller ağ gecikmesiyle karışabilir. Bulgunun gerçek olduğu, isteğin arka uçta bölündüğü kontrollü biçimde gösterilmeden kesin sonuç çıkarılmamalıdır.

Kaynaklar

Web uygulamanızı request smuggling ve OWASP Top 10 açıklarına karşı, çalışan bir kanıtla test ettirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan sızma testi ve güvenli kod denetimi sağlıyoruz.