Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

Path traversal nedir?​


Path traversal, bir saldırganın uygulamanın kullanıcıdan aldığı dosya veya klasör yolunu kötüye kullanarak izin verilen dizinin dışındaki dosyalara erişmeye çalışmasıdır. En yaygın gösterim ../ ifadesidir; bu ifade bulunduğunuz dizinin bir üstüne çıkmayı temsil eder. Başarılı olduğunda uygulama, web sunucusunun veya işlem hesabının okuyabildiği yapılandırma dosyalarını, günlükleri ya da başka kullanıcı verilerini istemeden döndürebilir.

Nasıl çalışır?​


Güvensiz bir uygulama, istemciden gelen değeri doğrudan dosya yolu olarak kullanabilir:

Kod:
GET /download?file=reports/mart.pdf

Uygulama yalnızca reports klasöründeki dosyaları sunmayı amaçlıyor olabilir. Ancak file=../config/settings.ini gibi bir değer kabul edilirse, uygulama reports klasöründen üst dizine çıkıp başka bir dosyayı okumayı deneyebilir. Birden fazla ../ kullanılması daha üst dizinlere ulaşma girişimidir.

Saldırı yalnızca düz metinle sınırlı değildir. Uygulama veya kullandığı sunucu bileşeni, URL kodlamasını, farklı eğik çizgi biçimlerini, Windows yol ayraçlarını veya gereksiz nokta bileşenlerini farklı şekilde yorumlayabilir. Bu nedenle yalnızca ../ metnini engelleyen bir filtre güvenilir koruma değildir.

Somut varsayımsal örnek​


Bir rapor indirme uygulaması her istekte gelen file değerini disk yoluna ekliyor olsun. Beklenen değer reports/mart.pdf iken kullanıcı ../private/customer-list.csv gönderiyor. Uygulama yolu normalleştirmeden dosyayı açarsa, sonuç HTTP yanıtında dosyanın içeriğinin görünmesi olabilir. Dosya yoksa veya işlem hesabının okuma izni bulunmuyorsa hata alınır; bu, güvenlik açığı olmadığını tek başına kanıtlamaz.

Koruma yöntemi ve uygulanabilir kararlar​


En güvenli yaklaşım, istemcinin dosya yolunu seçmesine izin vermek yerine bir kimlik kullanmaktır. Örneğin kullanıcı report_id=1842 gönderir; uygulama bu kimliği veritabanındaki kayıtla eşleştirir ve dosyanın sunucu tarafındaki güvenli konumunu kendisi belirler. Bu kimlik için kullanıcı/kaynak yetkisini de kontrol edin; yol yerine kimlik kullanmak IDOR gibi yetkilendirme hatalarını tek başına çözmez. Dosya adı veya yolunun doğrudan kabul edilmesi gerekiyorsa şu sırayı uygulayın:

  1. Kullanıcı girdisini doğrudan dosya açma işlevine vermeyin; önce beklenen biçimi doğrulayın. Mümkünse yalnızca izin verilen dosya kimliklerini veya sabit bir dosya adı listesini kabul edin.
  2. İzin verilen girdiyi bir taban dizinle birleştirin. Salt metinsel normalleştirme ile dosya sistemindeki gerçek hedef çözümlemesini ayırın; mutlak yol, sembolik bağlantı ve platform ayraçlarını hesaba katın.
  3. Çözülen hedefin taban dizin sınırında kaldığını yol bileşenleriyle karşılaştırın. Kontrol ile açma arasında dosya/bağlantı değiştirilebiliyorsa yarış koşulu kalır; platformun dizine bağlı güvenli açma araçlarını veya güvenilir erişim katmanını kullanın. Sadece metin içinde ../ aramakla yetinmeyin.
  4. Dosya açma işlemini, yalnızca gerekli dizinleri okuyabilen ayrı bir işlem hesabıyla yapın. Böylece bir hata oluşsa bile erişilebilecek dosya alanı sınırlanır.
  5. Başarısız denemeleri istek zamanı, hesap, hedeflenen kaynak ve sonuç bilgisiyle kaydedin; dosya içeriği veya gizli değerleri günlüğe yazmayın.
  6. Kod değişikliğinden sonra normal dosya indirmeyi, yetkisiz üst dizin erişimini, kodlanmış varyantları ve sembolik bağlantı gibi dosya sistemi durumlarını test edin.

Normalleştirme sonrası karşılaştırmada yalnızca karakter dizisi başlangıcına güvenmek de hatalıdır. Örneğin güvenli taban dizinin /srv/app/reports olması durumunda /srv/app/reports-archive aynı metin ön ekini taşısa da aynı alt dizin değildir. Karşılaştırma işletim sisteminin yol sınırlarını dikkate almalıdır.

Uygulama davranışıÖncelikli yaklaşımDoğrulama
Kullanıcı yalnız bir dosya seçiyorKimlik veya izin verilenler listesi kullanınKimlik dışı değerler reddediliyor mu?
Kullanıcı alt klasör belirleyebiliyorNormalleştirip taban dizin sınırı uygulayınKodlanmış ve üst dizin yolları engelleniyor mu?
Dosya yolu dış sistemden geliyorKaynağı doğrulayın ve erişimi daraltınYetkisiz dosya ve sembolik bağlantı testleri başarısız mı?

Kontrol yöntemi ve sonuçların yorumu​


Yalnızca sahibi olduğunuz veya açıkça yetkili olduğunuz izole test ortamında önce izin verilen bir dosyayı indirmeyi doğrulayın. Ardından üst dizine çıkan, kodlanmış ve işletim sistemine özgü ayraç içeren örnekleri deneyin. Beklenen güvenli sonuç, uygulamanın isteği reddetmesi veya sabit bir yetkilendirme hatası döndürmesidir; hassas dosya içeriğinin dönmesi path traversal şüphesini güçlendirir. Hata mesajında gerçek sunucu yolunun görünmesi de ayrıca düzeltilmesi gereken bilgi sızıntısıdır.

Aşağıdaki karar, düzeltmenin yönünü belirlemeye yardımcı olur:

İstemci tarafında yapılan kontroller, örneğin JavaScript ile karakter engelleme, güvenlik sınırı değildir; saldırgan isteği doğrudan gönderebilir. Asıl kontrol sunucuda, dosya açılmadan önce yapılmalıdır. Ayrıca yalnızca web sunucusunun erişim kurallarına güvenmek yerine uygulama yetkilendirmesi ve dosya sistemi izinleri birlikte uygulanmalıdır.

Sık sorulan sorular​


Path traversal ile yerel dosya dahil etme aynı şey midir?​


Hayır. Path traversal temel olarak dosya yolunun izin verilen konumun dışına taşırılmasıdır. Dosyanın okunması, çalıştırılması veya başka bir sunucu tarafı işlemde kullanılması ayrıca uygulamanın davranışına bağlıdır.

realpath benzeri bir kontrol tek başına her dosya işlemini korur mu?​

Hayır. Mevcut dosyayı çözümleme ile yeni dosya oluşturma aynı değildir; oluşturulacak hedef henüz var olmayabilir. Ayrıca kontrol sonrası symlink değişebilen bir alanda sonradan açılan hedef farklılaşabilir. Dosya açma/oluşturma işleminin kendisini güvenilir taban dizinine bağlayan platform mekanizmalarını değerlendirin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.