« Tüm yayınlar

CVE-2026-69243: aiohttp'de Reddedilen WebSocket Upgrade ile Request Smuggling PoC

aiohttp ≤3.14.1'de CVE-2026-69243 request smuggling açığının Nginx arkasında blind handler çağrısına yol açan ilk kamuya açık PoC'si ve teknik analiz.

aiohttp 3.14.1 ve altında, reddedilen bir WebSocket upgrade isteğinin gövdesi ayrıştırıcının (parser) kuyruğunda kalıyor ve aiohttp bu veriyi pipeline edilmiş yeni bir istek olarak işliyor. Nginx'in resmi WebSocket yapılandırmasının ardında bu durum bir desync'e yol açıyor: Nginx tek istek loglarken aiohttp iki istek işliyor. Sorunun kökü, C tabanlı llhttp ayrıştırıcısının Connection: Upgrade ve Content-Length içeren isteklerde gövdeyi atlaması, ancak upgrade işlemi reddedildiğinde bu gövdenin hiçbir zaman tüketilmemesi ve _message_tail içinde bekleyip sonraki isteğe eklenmesi. request.read() bu durumda sıfır bayt döndürdüğü için sorun uygulama katmanından tespit edilemiyor ya da temizlenemiyor.

Bu açığın CVE-2026-69243 kimliğiyle takip edilen ve 3.14.2'de düzeltilen bir GHSA danışma belgesi olduğu, ancak herkese açık istismar kodu bulunmadığı belirtiliyor. Araştırmacı, yedi container'lı bir test ortamı kurup Python ve Rust ile birebir aynı payload'ları CI üzerinden doğrulayarak ilk kamuya açık PoC'yi yayınlamış. Testler, smuggled isteğin location /admin { deny all; } gibi proxy seviyesi erişim kısıtlamalarını da atlayabildiğini gösteriyor.

Proxy arkasındaki bu topolojide ikinci yanıt proxy tarafından yutulduğu için etki, yanıt sızıntısından ziyade kör (blind) handler çağrısı şeklinde ortaya çıkıyor. Ters proxy veya API gateway arkasında aiohttp çalıştıran mühendisler için, upgrade header'larının proxy seviyesinde temizlenmesi veya sürümün 3.14.2'ye yükseltilmesi önerilen geçici çözümler arasında.