| Information Exposure Through An Error Message Açıklığı (CWE-209) | |||||
| Bu makalede Information Exposure Through An Error Message (CWE-209), yani Hata Mesajı Yoluyla Bilgi İfşası açıklığı anlatılacaktır.
Açıklık Önem Derecesi: Düşük Açıklığın Etkisi: Bilgi ifşası, Saldırı metotlarını belirlemede kolaylık sağlama Açıklığın Açıklaması: Uygulamalar bulundukları ortamlar hakkında, kullanıcıları hakkında veya uygulamanın ilişkili verileri hakkında hassas bilgiler içeren hata mesajları oluşturabilirler. Bu hassas bilgiler başka saldırılar yapmak için basamak olarak kullanılabilecek bilgiler olabilir veya daha ciddi değerli bilgiler olabilir (örn; parolalar gibi). Saldırganlar daha odaklı saldırılar yapmak için hata mesajlarındaki içerikleri kullanabilirler. Örneğin hata mesajları path traversal (dizin gezinme) açıklığını sömürme teşebbüslerinde yüklü uygulamanın tam (full) dizin yolunu verebilir. Bundan hareketle bu bilgi hedeflenen dosyaya gitmek için uygun sayıda “..” üst dizin karakterinin seçilmesinde kullanılabilir. Örneğin hata mesajları SQL Enjeksiyonunun kullanıldığı bir saldırıda saldırı en başta başarılı olamasa da tüm bozuk çalışan sorguyu gözler önüne serebilir. Bundan hareketle sorgu mantığını, hatta sorguda kullanılan muhtemel parolaları ve diğer hassas verileri (örn; veritabanı field’larını (kolon adlarını)) ortaya çıkarabilir. Uygulamalardaki istemci arayüzüne dönülen veya kontrol edilemez log sink’leri (log kaydedicileri) ile log dosyalarına basılan hata mesajları bilgi ifşası riski barındırır. Örneğin bu duruma örnek verilmiştir: JAVA - Güvensiz Hal:
// Güvensiz Kod
// ENG: Handle Exception by Printing To Output
// TR : İstisnayı Çıktıya Basarak İdare Etme
private void wrapCallToDB_Unsafe(HttpServletRequest request)
throws ServletException, IOException {
String paramValue = request.getParameter("Param");
try {
callDbProc(paramValue);
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
Bu örnekte try bloğundan fırlaması muhtemel bir hatanın catch ile yakalandığı ve catch bloğunda hata mesajının kontrol edilemez bir log kaydedicisi (log sink’i) ile log dosyasına yazdırıldığı gösterilmiştir.
printStackTrace() Hakkında:
Java’da hata mesajı basma metodu printStackTrace() varsayılan olarak stderr’e hata detaylarını basar. std.err ise varsayılan olarak sistemdeki log dosyasına kayıtların basılmasını sağlayan bir stream’dir. std.err eğer farklı bir şekilde yapılandırılmışsa istemci arayüzüne de hatayı basabilir. Burada hata mesajının kontrol edilemez bir log kaydedicisi ile log dosyasına yazdırılması bu kod bloğunu güvensiz kılmaktadır. Çünkü kontrolsüz log kaydedicileri;
güvenliği arttırıcı özellikler bulundurmaz. Fakat framework temelli log kaydedicileri bu özelliklere sahiptirler. Bu güvensiz kod bloğundaki problem detay bilgilerin istemciye ifşa edilmesi veya edilmemesi değildir. Kontrol edilemez bir log kaydedicisi ile log alma işlemi yapılmasıdır. Basılan log kayıtlarının gelecekte olası bir sızdırılma senaryosu ile karşı karşıya kalındığında kontrolsüzce tam detay kayıtlar yer aldığndan bilgi ifşasına yol açacaktır. Paylaşılan güvensiz kod bloğunun örnek bir güvenli hali sunulmuştur: Java - Güvenli Hal:
// Güvenli Kod
// ENG: Write Exception Details to Log, Send
// Generic Error Message
// TR : İstisna Detaylarını Log’a Yazdırma ve
// Genel Bir Hata Mesajı Dönme
private void wrapCallToDB_SafePrintToLog(HttpServletRequest request)
throws ServletException, IOException {
String paramValue = request.getParameter("Param");
try {
callDbProc(paramValue);
} catch (SQLException ex) {
writeExceptionToLog(ex);
System.err.println("Veritabanı Hatası, detaylar için log dosyasına bakınız.");
}
}
Bu örnekte try bloğundan fırlaması muhtemel bir hatanın catch ile yakalandığı ve catch bloğunda ise hata mesajının kontrolsüz bir log kaydedicisi ile log dosyasına basılması yerine framework kontrollü bir log kaydedicisi ile log dosyasına yazdırılması, sonra kontrolsüz bir log kaydedicisi ile std.err’e genel (detay unsur içermeyen) hata mesajı yazdırıldığı görülmektedir. Bu güvenli kodlama pratiği olarak kabul edilmektedir. Uygulamalar istemciye kontrol edilemez log kaydedicisi (log sink ile) ile detay hata mesajları bastığında veya sunucu taraftaki log dosyalarına kontrol edilemez log kaydedicisi ile detay hata mesajları bastıklarında “Hata Mesajı Yoluyla Bilgi İfşası” açıklığı vardır denir. Açıklığın Önlemi: Bu açıklığın önlenmesinde takip edilmesi gereken hususlar şu şekildedir:
|
|||||
Bu yazı 23.10.2025 tarihinde, saat 07:10:41'de yazılmıştır.
07.01.2026 tarihi ve 12:11:43 saatinde ise güncellenmiştir. |
|||||
|
|||||
| Yorumlar |
|||||
| Henüz yorum girilmemiştir. | |||||
| Yorum Ekle | |||||
Bu yazı 23.10.2025 tarihinde, saat 07:10:41'de yazılmıştır.
07.01.2026 tarihi ve 12:11:43 saatinde ise güncellenmiştir.