Hızlı cevap: Path Traversal (dizin dolaşımı), bir uygulamanın dosya adını kullanıcıdan alıp yeterince denetlemeden dosya sistemine geçirmesi sonucu, saldırganın sunucuda erişmemesi gereken dosyalara ulaşabilmesidir. Saldırgan, dosya adına bir üst dizine çıkma dizisi ekleyerek uygulamanın klasörünün dışına, örneğin sistem yapılandırma dosyalarına ya da parola dosyalarına ulaşmaya çalışır. Bu açık, uzak dosya okuma ve bazen LFI (Local File Inclusion, yerel dosya dahil etme) yoluyla kod çalıştırmaya kadar gidebilir. Kök çözüm: kullanıcının verdiği dosya adını asla doğrudan yola eklememek, izin verilen dizini ve dosya listesini sunucu tarafında sabitlemektir.

Dosya indirme, önizleme, dil dosyası yükleme, tema seçme gibi özellikler çok yaygındır ve çoğu bir dosya adını kullanıcıdan alır. Bu adı güvenli işlemezseniz, saldırgan istediği dosyayı okumak için uygulamanızın dizin yapısında gezmeye başlar. Bu yazı, path traversal ve LFI açıklarının nasıl oluştuğunu, gerçek etkisini ve doğru savunmayı anlatır.

Path traversal nasıl çalışır

Uygulama bir dosyayı sunmak için genelde bir temel dizin ile kullanıcının verdiği dosya adını birleştirir. Örneğin "dosyalar" klasörü artı "rapor.pdf" eşittir "dosyalar/rapor.pdf". Sorun, kullanıcının dosya adı yerine bir üst dizine çıkma dizisi vermesidir. Bu diziyi arka arkaya kullanarak temel dizinden çıkar ve dosya sisteminin başka yerlerine ulaşır.

Hedefler genelde şunlardır:

  • Sistem yapılandırma ve parola dosyaları.
  • Uygulamanın kaynak kodu ve gizli anahtarları. Sızan API anahtarları bu yolla da ele geçebilir.
  • Oturum dosyaları ve günlükler.

Path traversal, LFI ve RFI

Bu üç terim sık karıştırılır:

Terim Ne yapar Sonuç
Path Traversal İzin dışı dosyayı okur Bilgi ifşası
LFI (yerel dosya dahil etme) Sunucudaki dosyayı çalıştırır Kod çalıştırma riski
RFI (uzak dosya dahil etme) Uzaktaki dosyayı çalıştırır Tam ele geçirme

Path traversal genelde dosya okumakla sınırlıdır ama uygulama okuduğu dosyayı çalıştırıyorsa (LFI), etki bilgi ifşasından kod çalıştırmaya yükselir. Bu yüzden basit görünen bir dosya okuma açığı hafife alınmamalıdır.

Neden filtreleme tek başına yetmez

Çoğu geliştirici, tehlikeli diziyi arayıp silerek sorunu çözdüğünü sanır. Ama bu kara liste yaklaşımı zayıftır:

  • Kodlama varyasyonları. Aynı dizi farklı karakter kodlamalarıyla yazılabilir ve basit filtreyi atlar.
  • Çift kodlama. Dizinin bir kez daha kodlanması filtreyi şaşırtır.
  • İç içe silme. Dizinin ortasından tek geçişle silme yapan filtreler, kalan parçaların yeniden birleşmesiyle atlatılır.

Bu yüzden güvenli çözüm, tehlikeliyi aramak değil, izin verileni tanımlamaktır.

Doğru savunma

1. Dosya adını kullanıcıya bırakmayın

En güvenli yöntem, kullanıcının serbest metin dosya adı vermesini hiç istememektir. Bunun yerine sunucuda bir dosya listesi tutulur ve kullanıcı yalnızca bir kimlik ya da seçenek seçer. Bu, aynı zamanda IDOR riskini de yönetmenizi gerektirir.

2. Yolu çözümleyip kök dizini doğrulayın

Kullanıcı girdisi kaçınılmazsa, birleştirilen yol tam olarak çözümlenmeli ve sonucun izin verilen temel dizinin içinde kaldığı sunucu tarafında doğrulanmalıdır. Dizinin dışına çıkan her istek reddedilir.

3. İzin listesi ve katı doğrulama

Dosya adı yalnızca beklenen dar karakter kümesine ve uzantıya uymalıdır. Yol ayıracı ve üst dizin dizileri hiçbir zaman kabul edilmemelidir.

4. En az yetki

Uygulama hesabının dosya sistemi erişimi, yalnızca ihtiyacı olan klasörle sınırlanmalıdır. Böylece bir açık olsa bile ulaşılabilecek dosya alanı daralır.

KAOS ile dizin dolaşımı taraması

Bu tür dosya erişim açıklarını, DSET'in yapay zekâ destekli otonom güvenlik tarama motoru KAOS ile ölçekli biçimde tarıyoruz. KAOS, dosya alan tüm uçları keşfeder, farklı kodlama ve atlatma varyasyonlarını dener ve bir dosyaya izinsiz erişebildiğinde bunu kontrollü biçimde doğrulayıp yalnızca kanıtlanmış bulguyu raporlar. Böylece basit bir filtreyle güvende sandığınız uçların gerçekte açık olup olmadığını, yanlış pozitif gürültüsü olmadan görürsünüz. KAOS insan uzmanın yanında çalışır ve her bulguyu çalışan bir kanıtla belgeler.

Sık sorulan sorular

Path traversal sadece dosya okur mu? Çoğunlukla evet, ama okunan dosya çalıştırılıyorsa (LFI) ya da yazılabiliyorsa etki kod çalıştırmaya kadar çıkabilir. Bu yüzden ciddiye alınmalıdır.

Tehlikeli karakterleri silmek yeterli mi? Hayır. Kodlama ve çift kodlama varyasyonları basit filtreleri atlatır. Güvenli olan, çözümlenen yolun izin verilen dizinde kaldığını doğrulamaktır.

Statik dosya sunan bir sitede bu açık olur mu? Kullanıcı girdisiyle dosya seçen her uçta risk vardır. Tamamen sabit, kullanıcı girdisi almayan içerikte risk düşüktür.

Path traversal ile IDOR farkı nedir? Path traversal dosya sistemi yolunu, IDOR uygulama nesnesi kimliğini hedefler. İkisi de yetkisiz erişime yol açar ama farklı katmanlardadır.

Kaynaklar

Uygulamanızdaki path traversal ve dosya dahil etme açıklarını KAOS ve uzman ekibimizle çalışan kanıtla tespit ettirmek için DSET ile iletişime geçin. Ankara Hacettepe Teknokent laboratuvarımızdan sızma testi ve güvenli kod denetimi hizmeti veriyoruz.