ESPAsyncWebServer Kütüphanesinde Yüksek Önem Düzeyinde CRLF Enjeksiyon Güvenlik Açığı
CVE-2025-53094, ESP32, ESP8266, RP2040 ve RP2350 gibi gömülü platformlarda asenkron HTTP ve WebSocket sunucuları için yaygın olarak kullanılan ESPAsyncWebServer kitaplığını etkileyen yüksek önem derecesine sahip bir güvenlik açığıdır (CVSS 8.7). Sorun 3.7.8'e kadar olan sürümlerde mevcuttur ve kaynak dosya içindeki HTTP başlıklarının oluşturulması ve çıktısında bir CRLF (Carriage Return Line Feed) enjeksiyon güvenlik açığını içerir AsyncWebHeader.cpp
.
Güvenlik Açığının Niteliği
Güvenlik açığı, kütüphanenin HTTP başlıkları oluştururken girdiyi düzgün bir şekilde temizlememesi nedeniyle ortaya çıkar. Bu, bir saldırganın CR ( \r
) veya LF ( \n
) karakterlerini doğrudan başlık adlarına veya değerlerine enjekte etmesine olanak tanır. Bu tür bir enjeksiyon, saldırganın HTTP başlıklarını veya tüm HTTP yanıtlarını keyfi olarak manipüle etmesini sağlar. Bu, aşağıdakiler de dahil olmak üzere çeşitli saldırılara yol açabilir:
- HTTP Yanıt Bölme: CRLF dizilerini enjekte ederek, bir saldırgan ek HTTP başlıkları veya yanıtları oluşturabilir ve potansiyel olarak tek bir HTTP yanıtını birden fazla yanıta bölebilir. Bu, önbellek zehirlenmesi, siteler arası betik çalıştırma (XSS) veya diğer saldırıları gerçekleştirmek için kullanılabilir.
- Çerez Manipülasyonu: Enjekte edilen başlıklar çerezleri ayarlayabilir veya değiştirebilir, oturum ele geçirme veya sabitlemeyi etkinleştirebilir.
- Önbellek Zehirlenmesi: Kötü amaçlı yanıtlar aracılar veya tarayıcılar tarafından önbelleğe alınabilir ve bu da zararlı içeriğin sürekli olarak iletilmesine yol açabilir.
- Diğer Başlık Manipülasyonları: Güvenlik politikalarını, yönlendirmeleri veya içerik türlerini etkileyen keyfi başlıklar eklenebilir veya değiştirilebilir.
Örnek Senaryo
ESPAsyncWebServer kullanan bir web sunucusunun, doğrulama olmaksızın bir HTTP başlığında yansıtılan kullanıcı girdisini kabul ettiğini varsayalım. Bir saldırgan, aşağıdaki gibi CRLF karakterleri içeren bir başlık değeri gönderebilir:
metin
InjectedHeaderValue = "validvalue\r\nSet-Cookie: sessionid=malicious"
Sunucu HTTP yanıt başlıklarını oluşturduğunda, bu girdi sunucunun Set-Cookie
saldırgan tarafından kontrol edilen bir oturum kimliğine sahip ek bir başlık göndermesine neden olur ve bu da potansiyel olarak kullanıcı oturumlarını ele geçirebilir.
Alternatif olarak saldırgan, CRLF dizisinden sonra tamamen sahte bir HTTP yanıtı enjekte edebilir ve istemcinin yanıtı farklı şekilde yorumlamasına neden olabilir; bu da XSS veya diğer saldırılar için kullanılabilir.
Azaltma ve Düzeltme
Güvenlik açığı bir çekme isteğinde (#211) ele alındı ve ESPAsyncWebServer'ın 3.7.9 sürümüne dahil edilmesi bekleniyor. Düzeltme, HTTP başlıklarına dahil etmeden önce CR ve LF karakterlerini ayıklamak veya kodlamak için girdiyi temizlemeyi ve enjeksiyonu önlemeyi içeriyor.
CRLF Enjeksiyonunu Önlemek İçin En İyi Uygulamalar
- Giriş Doğrulaması: HTTP başlıklarına dahil edilebilecek tüm kullanıcı tarafından sağlanan verileri sıkı bir şekilde doğrulayın ve temizleyin; CR veya LF karakterlerine izin verilmediğinden emin olun.
- Çıktı Kodlaması: Başlık değerlerindeki özel karakterleri kodlayın veya kaçın, böylece bunların kontrol karakterleri olarak yorumlanması önlenir.
- Güncellenmiş Kitaplıkları Kullanın: Güvenlik düzeltmelerini dahil etmek için her zaman kitaplıkların en son yamalı sürümlerine güncelleyin.
- Güvenli Kodlama: HTTP başlıklarına kullanıcı girdisini uygun kontroller yapılmadan doğrudan yansıtmaktan kaçının.
CRLF Enjeksiyonu Hakkında Ek Bağlam
CRLF enjeksiyonu, saldırganların yanıtları manipüle etmek için HTTP başlıklarına beklenmedik CRLF dizileri ekledikleri iyi bilinen bir web güvenlik açığıdır. Bu, HTTP yanıt bölme, önbellek zehirlenmesi ve oturum sabitleme saldırılarına yol açabilir. CRLF enjeksiyonunu tespit etmek ve istismar etmek için crlfmap
ve gibi çeşitli araçlar mevcuttur crlfuzz
.
Özet
- Güvenlik Açığı: ESPAsyncWebServer ≤ 3.7.8'de HTTP başlıklarındaki temizlenmemiş girdiler yoluyla CRLF enjeksiyonu.
- Etkisi: Oturum ele geçirme, önbellek zehirlenmesi, XSS ve diğer saldırılara olanak tanıyan keyfi HTTP başlığı/yanıt manipülasyonu.
- Şiddet: Yüksek (CVSS 8.7).
- Düzeltme: PR #211'de mevcut; 3.7.9 sürümüne dahil edildi.
- Azaltma: Giriş doğrulaması, çıktı kodlaması ve sabit sürümlere yükseltme.
Bu güvenlik açığı, web sunucusu davranışını ve kullanıcı güvenliğini tehlikeye atabilecek enjeksiyon saldırılarını önlemek için HTTP başlıklarında kullanılan tüm kullanıcı girdilerinin temizlenmesinin kritik önemini vurgulamaktadır.
CyberHat.Online tarafından