- Katılım
- 2 Ocak 2026
- Mesajlar
- 19
- Tepkime puanı
- 22
- Puan
- 3

Web uygulamalarında, kullanıcıdan alınan verilerin düzgün şekilde flltrelenmemesi sonucu oluşan güvenlik açıkları saldırganlar için bir açık kapıdır. Bu açıklardan biri de CRLF İnjection'dır. CRLF kelimesi, Carrige Return (CR -"\r" ) ve Line Feed (LF - "\n") karakterlerinin birleşiminden gelir. http protokolü, bu karakter çiftini header'ların sonunu ve body'nin başlangıcını ayırmak için kullanır. Normalde kullanıcıların header'e müdahale etmesi imkansızdır. Ancak uygulama, kullanıcı verilerini doğrudan HTTP yanıtına yazarsa ve bu veriler içerisinde ""%0d%0a" gibi özel karakterler varsa, saldırgan sunucu cevabını kendi isteğine göre bölebilir veya değiştirebilir. İşte bu yöntemle saldırgan; sahte cookie ekleyebilir, response başlıklarını manipüle edebilir ya da kullanıcıyı zararlı sitelere yönlendirebilir. Bu tekniğe CRLF İnjection denir.
CRLF İnjection Açıkları Hangi Durumlarda Ortaya Çıkar?
Geliştiriciler, kullacıdan gelen girdiyi HTTP response header'larına yazarken filtreleme yapmazsa bu açık oluşur.
URL tabanlı yönlendirmelerde.
Dil veya tema gibi seçeneklerin URL parametresine yazıldığı sistemlerde.
Cookie işlemlerinde - Log dosyalarına veri yazılırken
Crlf güvenlik açığı saldırgana şu kapıları açar
Yeni HTTP header'ları enjekte etmek
Sahte Cookie yazmak
Sahte yönlendirmelerle kullanıcıyı düşürmek (phishing)
XSS öncesi ortam hazırlamak
Log Poisoning ile sistem kayıtlarını manipüle etmek
Tespit / pentest metodolojisi
Surrounding context’ı anla: Parametrenin header mı yoksa body/URL’de mi kullanıldığını belirle.
Burp Repeater / Intruder ile parametrelere payload’ları sok ve yanıt header’larını dikkatle incele.
Proxy/Cache etkisini test et: Aynı istek farklı client’lardan veya farklı Host başlıklarıyla gönderilirse cache’lenmiş zararlı içerik geri dönüyor mu kontrol et.
Log erişimin varsa log dosyalarında payload’ların geçtiğini gör (log poisoning).
Double-decode, encoding varyasyonları: Birden fazla decode aşaması düşünerek çift encode edilmiş payload’lar dene.
CRLF Injection — Tam teknik derinleme
CRLF iki karakterin birleşimi: Carriage Return (\r, ASCII 13) + Line Feed (\n, ASCII 10). HTTP/1.1 spesifikasyonunda her bir header satırının sonunu belirtmek ve header bölümünü gövdeden ayırmak için kullanılır.
Bir HTTP yanıtındaki header’lar şu formattadır:
HTTP/1.1 200 OK\r\n
Content-Type: text/html\r\n
Set-Cookie: sess=abc\r\n
\r\n
<body>...</body>
Header bölümünün bitişi CRLFCRLF (\r\n\r\n) ile ifade edilir.
Eğer saldırgan sunucuya gönderilen/uygulama tarafından işlenen girdi içine \r\n enjekte edebiliyorsa, uygulama istemeden yeni header satırları veya hatta yeni bir cevap (response) oluşturabilir.
CRLF Injection ile ne yapılır? (etki mekanizmaları)
HTTP Response Splitting: Tek bir fiziksel HTTP cevabını iki mantıksal cevaba bölme. Bu, istemciye veya ara katmana (cache, proxy) farklı davranışlar üretebilir.
Sahte HTTP header ekleme: Set-Cookie, Location, X-Anything gibi başlıklar ekleyerek oturum çalma, yönlendirme veya güvenlik başlıklarının devre dışı bırakılması.
Cache poisoning: Ortak cache (CDN, proxy) üzerinde zararlı içerik/yanıt depolatmak — böylece diğer kullanıcılar da bu kötü içeriği alır.
Log poisoning: Log dosyalarına kontrol edilebilen satırlar yazdırarak adli izleme engelleme veya sonradan bu log’ların yorumlanması halinde saldırı amaçlı kullanma.
XSS/Phishing hazırlığı: Response gövdesini manipüle edip XSS tetiklemek veya kullanıcıları phishing sayfalarına yönlendirmek.
Session fixation / contamination: Sahte cookie set ederek session sabitleme/çakışma.
CRLF güvenlik açığı nasıl istismar edilir
Uygulama X parametresini alıp header içinde doğrudan kullanıyor
GET /page?lang=en HTTP/1.1
Host: example.com
.
Sunucu yanıtı (örnek, güvenli olmayan şekilde):
.
HTTP/1.1 302 Found
Location: /home?lang=en
.
Saldırgan lang parametresine CRLF ekler:
.
/page?lang=en%0d%0aSet-Cookie:%20evil=1
.
Sunucu bu değeri olduğu gibi header içine koyarsa:
.
Location: /home?lang=en
Set-Cookie: evil=1
yani saldırgan yeni Set-Cookie başlığı eklemiş olur.
Eğer CRLFCRLF ile header/gövde sınırı oluşturulursa, saldırgan sunucunun sonraki kısmını kontrol edebilir (response splitting).
Farklı varyantlar / atlatma teknikleri
%0d%0a vs ham \r\n — bazen uygulama URL-decode eder/etmez; farklı encodingler (%0d, %0a, %0D, %0A) denenmeli.
Double-decode: Bazı uygulamalar iki kez decode eder; payload çift encode edilip test edilir.
Unicode/alternate encodings: Yönlendirme/decode mekanizmasına bağlı olarak farklı encode türleri denenebilir.
Proxy/Load balancer davranışı: Ara katmanlar bazı tehlikeli karakterleri filtreleyebilir veya farklı şekilde işler; bu yüzden son hedefe (origin) kadar test etmek gerekir.
Zayıf kod örnekleri (gerçekçi)
PHP (tehlikeli)
$lang = $_GET['lang'];header("Location: /home?lang=$lang");
Eğer lang içinde \r\nSet-Cookie: evil=1 varsa header manipüle olur.
Node.js (tehlikeli)
res.setHeader('X-Lang', req.query.lang);res.end();
Java (Servlet, tehlikeli)
String lang = request.getParameter("lang");response.setHeader("X-Lang", lang);