Log injection: kendi loglarında sahte kayıt üretmek

Loglar kanıttır. İstek verisi onlara escape edilmeden yazıldığında, o verideki bir satır sonu çağıranın kendi kayıtlarını eklemesine izin verir.

Örnek

Zafiyetli
console.log("Login failed for user:", req.body.userName);
// userName = "alice\nINFO Login succeeded for user: admin"
Güvenli
const clean = String(req.body.userName).replace(/[\r\n]/g, "");
logger.warn({ event: "login_failed", user: clean });
// or a structured logger that writes values as JSON fields

Nasıl oluşur

alice'ten sonra bir satır sonu ve INFO Login succeeded for user: admin içeren bir kullanıcı adı iki log satırı üretir; ikincisini saldırgan yazmıştır. Sahte kayıtlar izleri örtebilir, başka bir kullanıcıyı suçlayabilir veya uyarı kurallarını şaşırtabilir. Bir web panelinde gösterilen loglar ikinci bir risk ekler: kayıttaki HTML, görüntüleyende XSS'e dönüşebilir.

Nasıl düzeltilir

Her değeri kendi kaydının içinde tut.

  • Log'a yazmadan önce kullanıcı verisinden \r ve \n'yi temizle veya kodla
  • Değerleri alan olarak yazan yapılandırılmış bir logger'ı (pino, JSON ile winston) tercih et
  • Log içeriğini HTML'de gösterirken escape et
  • Secret'ları ve tüm istek gövdelerini hiç log'lama

RepoVerse bunu nasıl bulur

  • Düşükİstek girdisi log'a escape edilmeden yazılıyor

    Satır sonu içeren bir değer sahte log kayıtları üretir — uydurma bir "giriş başarılı" satırı ya da logları sonra okuyan kişiden asıl saldırıyı gizleyen gürültü.

    veri akışı · CWE-117

Sorular

Log injection ciddi bir açık mı?
Tek başına genelde düşük değerlendirilir ama diğer her olayı incelemek için güvendiğin logları zayıflatır ve log görüntüleyicilerde XSS'e zincirlenebilir.
RepoVerse log injection'ı nasıl buluyor?
İstek girdisini console ve logger çağrılarına kadar izler. İmzası doğrulanmış webhook içerikleri saldırgan girdisi sayılmaz.

İlgili

Güncellendi 2026-10-11