- Katılım
- 2 Ocak 2026
- Mesajlar
- 14
- Tepkime puanı
- 34
- Puan
- 13
Derinlemesine Race Condition Zafiyeti ve HTTP Protokol Versiyon Etkileri
(Tüm Bölümleri Okumanız Halinde Konuyu Detaylarıyla Birlikte Anlayacak, Geriye Uygulama Yapması Kalacak (Uygulaması Anlamasından Daha Zor
Birden fazla işlem (Thread/Process ya da istek) aynı kaynağa (veri, dosya veya veritabanı kaydı) aynı anda erişmeye çalıştığında ve bu işlemlerin sırası veya zamanlaması kontrol edilmediğinde ortaya çıkar. Çok kullanıcılı sistemlerde kritik verilerin manipülasyonlarına veya mantıksal hatalara yol açar. Kısaca uygulamanın aynı anda gelen istekleri doğru şekilde yönetememesi sonucu oluşur.Eş Zamanlı Erişim: Birden fazla kullanıcı veya işlem, aynı veriye aynı anda erişmeye çalışır.
Durum Kontrol Eksikliği: Uygulama, bir işlemi tamamlamadan önce verinin durumunu kontrol etmez veya kilitlemez.
Zamanlama Hatası: İşlemler arasında oluşan küçük zaman farklılıklarından faydalanılır.
Kötü Tasarım: Veri tabanı işlemleri veya API çağrıları atomik olarak ayarlanmadığında oluşur.
Race Condition zafiyetinde HTTP protokol versiyonu çok önemlidir. HTTP/1.1’ in sınırlamaları ile HTTP/2 ‘nin gelişmiş özellikleri, zafiyetin oluşumunu, tespitini ve istismarını doğrudan etkiler.
HTTP/1.1 ve HTTP/2 Arasındaki Farklar
Bağlantı Yönetimi: HTTP/1.1’ de tek bağlantıda tek istek/cevap olur. Yeni istek için önceki cevap beklenir. HTTP/2 ‘de ise multiplexing ile aynı TCP bağlantısı üzerinden birden fazla istek paralel olarak gönderilir. Streamler bağımsız çalışır.
Başlık Sıkıştırma: HTTP/1.1 ‘de başlıklar metin tabanlıdır, sıkıştırma yapılmadan her istekte tam başlıklar tekrarlanır. HTTP/2’ de ise HPACK sıkıştırma ile başlıklar küçültülür ve tekrarlar önlenir.
İstek Sıralaması ve Bloklama: HTTP/1.1 ‘de bir istek yavaşsa diğer tüm istekler onun bitmesini bekler(HOL-Head Of Line Blocking). Mesela bir resim yüklemek uzun sürerse sayfanın geri kalanı da takılır. Bu da isteklerin sırayla gittiğini ve zafiyet yaratmak için daha fazla bağlantı açılmalı demektir. Ancak HTTP/2 ‘de yavaş bir istek diğerlerini engellemez. Her istek kendi kanalında (stream) bağımsız çalışır ve sunucu bunları aynı anda işler. Yani tek bağlantıyla onlarca istek gönderilebildiği için zafiyet daha kolay tetiklenebilir.
Metin/Binary Tabanlı: HTTP/1.1 ‘de istekler düz metin olarak yazılır. Bu okumayı kolaylaştırsa da veri fazla yer kapladığından yavaştır. HTTP/2 ‘de iste istekler ikili/binary formatta gönderilir. Bu zafiyet tespitinde hızlı olduğu için kolaylaştırıcıdır ancak hata okuması yaparken zorluk yaratır.
Sunucu İnsiyatifi(Server Push): HTTP/1.1 ‘de sunucu sadece senin istediğin şeyleri gönderir. Bir sayfa istiyorsan sadece o sayfa döner. HTTP/2 ‘de ise sunucu sen istemesen bile ek şeyler gönderebilir. (Javascript, CSS dosyaları) Bu server pushtur.
Güvenlik: HTTP/1.1 ‘de TLS kullanmak zorunlu değildir, HTTP/2 ‘de ise zorunludur.
Diğer Faktörler
HTTP/3 (QUIC): HTTP/2 ‘nin yeni versiyonudur. HTTP/2 TCP kullanıyorken HTTP/3 UDP(QUIC protokolü) kullanıyor. Bu bağlantı kurma ve veri aktarım hızını arttırırç Ayrıca 0-RTT(sıfır tur süresi) özelliği, bağlantı kurmadan bile istek göndermeyi sağlar.
Tarayıcı Davranışları: Farklı tarayıcılar HTTP/2’ yi farklı şekilde kullanır. Chrome HTTP/2’ de aynı anda en fazla 100 paralel istek(stream) gönderir ama Firefox daha esnektir ve daha fazla istek gönderebilir.
Sunucu Yazılımları: Kullanılan web sunucuları HTTP/2’ nin paralel isteklerini farklı yönetebilir. Nginx paralel istekleri iyi işler, hızlı ve stabildir ancak Apache zorlanabilir. Hızlı olduğu için Nginx’de zafiyetin ortaya çıkması daha muhtemelken Apache’ de bu ihtimal azdır ama sunucunun çökme riski yüksektir.
Ağ Koşulları: İnternet bağlantısının hızı ve gecikmesi race condition’ı etkiler.Yüksek gecikmeli yavaş ağlarda HTTP/1.1 istekleri sırala gider, gecikme yüzünden işlemler arası boşluk olur, bu da race condition riskini arttırır. Düşük gecikmeli hızlı ağlarda HTTP/2’ de istekler aynı anda gider, bu da çakışmaları çoğaltır. Yavaş ağlarda HTTP/1.1’ de, hızlı ağlarda HTTP/2’ de zafiyet riski artar.
-Bir ödeme sitesinde, yavaş bir ağda HTTP/1.1’ de zafiyet bulup(çift ödeme yapılıyor), aynı testi 5G ile HTTP/2’ de yapınca daha kötü bir şekilde 10 ödeme yapılıyor.
-HTTP/2’ de istek sınırlama özelliği var. Bu sunucunun aynı anda kaç istek alacağını kontrol etmesini sağlar. Sunucunun bu ayarlamaları düzgün yapılmalıdır.
Konunun devamında: Race Condition ve HTTP Request Smuggling ilişkisi, HTTP/3 ve OUIC detayları, James Kettle’ ın makalesinin detayları, zafiyetin tespiti ve sömürüsünün metodolojisi ile detaylarına değinilecektir…
Tarayıcı Davranışları: Farklı tarayıcılar HTTP/2’ yi farklı şekilde kullanır. Chrome HTTP/2’ de aynı anda en fazla 100 paralel istek(stream) gönderir ama Firefox daha esnektir ve daha fazla istek gönderebilir.
Sunucu Yazılımları: Kullanılan web sunucuları HTTP/2’ nin paralel isteklerini farklı yönetebilir. Nginx paralel istekleri iyi işler, hızlı ve stabildir ancak Apache zorlanabilir. Hızlı olduğu için Nginx’de zafiyetin ortaya çıkması daha muhtemelken Apache’ de bu ihtimal azdır ama sunucunun çökme riski yüksektir.
Ağ Koşulları: İnternet bağlantısının hızı ve gecikmesi race condition’ı etkiler.Yüksek gecikmeli yavaş ağlarda HTTP/1.1 istekleri sırala gider, gecikme yüzünden işlemler arası boşluk olur, bu da race condition riskini arttırır. Düşük gecikmeli hızlı ağlarda HTTP/2’ de istekler aynı anda gider, bu da çakışmaları çoğaltır. Yavaş ağlarda HTTP/1.1’ de, hızlı ağlarda HTTP/2’ de zafiyet riski artar.
-Bir ödeme sitesinde, yavaş bir ağda HTTP/1.1’ de zafiyet bulup(çift ödeme yapılıyor), aynı testi 5G ile HTTP/2’ de yapınca daha kötü bir şekilde 10 ödeme yapılıyor.
-HTTP/2’ de istek sınırlama özelliği var. Bu sunucunun aynı anda kaç istek alacağını kontrol etmesini sağlar. Sunucunun bu ayarlamaları düzgün yapılmalıdır.
Konunun devamında: Race Condition ve HTTP Request Smuggling ilişkisi, HTTP/3 ve OUIC detayları, James Kettle’ ın makalesinin detayları, zafiyetin tespiti ve sömürüsünün metodolojisi ile detaylarına değinilecektir…