SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama
SSL Sertifika Analizi Açık Port Tespiti Web Uygulama Tarama DNS Güvenlik Denetimi HTTP Başlık Analizi Yanlış Yapılandırma Tespiti Yazılım Parmak İzi Alt Alan Adı Tarama

Tüm Kayıtlar

Kategori Hatalı Girdi Doğrulama / Erişim Kontrolü
Tipik Önem Derecesi Yüksek
OWASP A01:2021 – Kırık Erişim Kontrolü
CWE CWE-22 – Kısıtlı Bir Dizine Dosya Yolunun Hatalı Sınırlandırılması
Diğer adlar Dizin Geçişi, Nokta-Nokta-Eğik Çizgi Saldırısı, ../ Saldırısı, Backtracking
Etkilenen sistemler Web sunucuları, dosya sunan API'ler, belge yönetim sistemleri, CMS platformları, kullanıcı girdisinden dosya yolu oluşturan her uygulama
İlgili CWE'ler CWE-23 (Göreli Yol Geçişi), CWE-24 (Mutlak Yol Geçişi), CWE-36, CWE-73

Genel Bakış

Path traversal (dizin geçişi olarak da bilinir), bir saldırganın dosya yolu parametresine özel hazırlanmış girdi sağlayarak uygulamanın hedeflenen dizinin — web kökü veya belirlenmiş yükleme/indirme klasörü — dışındaki bir konumu çözümlemesine neden olduğu bir web güvenlik açığı sınıfıdır. Saldırgan, ../ gibi diziler veya %2e%2e%2f gibi URL kodlanmış eşdeğerlerini kullanarak beklenen dizin ağacından çıkabilir ve sunucu sürecinin okuma ya da yazma erişimine sahip olduğu herhangi bir hassas dosyaya ulaşabilir.

Bu güvenlik açığı CWE-22 olarak kataloglanmış olup OWASP A01:2021 – Kırık Erişim Kontrolü kapsamına girmektedir. Ticari yazılımlar, açık kaynaklı çerçeveler ve özel olarak geliştirilmiş uygulamalarda ortaya çıkan, web güvenliğinin en eski ve en sürekli istismar edilen güvenlik açığı sınıflarından biridir.

Nasıl çalışır?

Uygulamalar, yeterli doğrulama veya kanonikalleştirme olmaksızın temel bir dizini kullanıcı tarafından sağlanan girdiyle birleştirerek bir dosya sistemi yolu oluştururken bu açığa karşı savunmasız hale gelir. Saldırı şu şekilde gerçekleşir:

  1. Saldırgan bir dosya yolu parametresi tanımlar — genellikle bir sorgu dizesi parametresi (?file=rapor.pdf), bir form alanı, bir HTTP başlığı veya bir REST yolu segmenti (/api/indir/{dosyaadi}).
  2. Saldırgan geçiş dizileri enjekte eder — örneğin rapor.pdf yerine ../../../../etc/passwd yazar. Her ../ ifadesi dosya sistemi köküne doğru bir dizin düzeyi yukarı çıkar.
  3. Sunucu manipüle edilmiş yolu çözümler — uygulama son yolu kanonikalleştirip doğrulamazsa, işletim sistemi bu yolu çözümler ve uygulama istenmeyen dosyayı okur (veya yazar).
  4. Yanıt dosya içeriğini sızdırır — uygulama dosyayı saldırgana geri döndürür, bir hata mesajına gömer veya sessizce işler.

Kaba engel listelerini atlayan yaygın bypass teknikleri şunlardır:

  • URL kodlaması: %2e%2e%2f veya %2e%2e/
  • Çift URL kodlaması: %252e%252e%252f
  • Unicode / UTF-8 uzun kodlama: %c0%ae%c0%ae%c0%af
  • Windows'ta karışık eğik çizgi stilleri: ..\ veya ..%5c
  • Null byte enjeksiyonu (eski ortamlarda): ../../../../etc/passwd%00.jpg
  • Tek geçişli temizlemeyi atlayan iç içe geçiş dizileri: ....//....//

Yazma yetkisi olan path traversal özellikle tehlikelidir: saldırgan yapılandırma dosyalarının üzerine yazabilir, web shell yerleştirebilir veya uygulama verilerini bozabilir.

İş etkisi

Başarılı bir path traversal saldırısının ciddi sonuçları olabilir:

  • Gizli veri ifşası: Kimlik bilgileri, özel anahtarlar, ortam dosyaları (.env), veritabanı yapılandırması ve uygulama kaynak kodu sızdırılabilir.
  • Sistem ele geçirme: /etc/passwd, /etc/shadow, SSH özel anahtarları veya bulut örneği meta veri uç noktalarının okunması; ayrıcalık yükseltme veya yanal hareketi kolaylaştırabilir.
  • Uzaktan kod çalıştırma: Yazma tabanlı geçiş, yürütülebilir dosyaların (web shell, sunucu tarafı betikleri) herkese açık dizinlere yerleştirilmesine ve sunucunun tamamen ele geçirilmesine yol açabilir.
  • Yasal ve uyumluluk yaptırımları: Kişisel verilerin ifşası; KVKK, GDPR, HIPAA, PCI DSS gibi düzenlemeler kapsamında yükümlülükler ve ilgili para cezaları doğurabilir.
  • İtibar kaybı: Path traversal kaynaklı bir veri ihlalinin kamuoyuna açıklanması, müşteri güvenini kalıcı olarak zedeleyebilir.

Nasıl düzeltilir?

  1. Kullanıcı girdisini dosya sistemi API'lerine doğrudan aktarmaktan kaçının. En sağlam savunma, özelliği yeniden tasarlamak ve kullanıcı girdisinin doğrudan bir dosya yoluna değil, uygulama tarafından kontrol edilen bir tanımlayıcıya (örn. veritabanı kayıt kimliği) eşlenmesini sağlamaktır.
  2. Doğrulamadan önce kanonikalleştirin. Herhangi bir güvenlik kontrolünden önce dilin/platformun kanonik yol işlevini kullanarak tam ve mutlak yolu çözümleyin (PHP/C'de realpath(), .NET'te Path.GetFullPath(), Python'da os.path.realpath(), Node.js'de fs.realpathSync()).
  3. Katı bir önek kontrolü uygulayın. Kanonikalleştirmenin ardından çözümlenen yolun beklenen temel dizin dizesiyle başladığını doğrulayın. Amaçlanan öneği paylaşmayan her yolu reddedin.
  4. İzin verilen dosya adları veya uzantılarının izin listesini kullanın. Yalnızca güvenli olduğu bilinen dosya adlarını, uzantıları veya desenleri kabul edin; geri kalanını reddedin. Yalnızca geçiş dizilerinin engel listesine güvenmeyin.
  5. En az ayrıcalık dosya sistemi izinlerini uygulayın. Web uygulaması sürecini minimum dosya sistemi erişimine sahip bir hesap altında çalıştırın. Olası bir atlatmanın zararını sınırlamak için chroot jailleri, konteynerler veya işletim sistemi düzeyinde zorunlu erişim denetimleri kullanın.
  6. Statik dosyaları uygulama kodu yerine web sunucusu aracılığıyla sunun. Statik dosya teslimini uygulama mantığı üzerinden proxyleme yerine web sunucusunun (nginx, Apache) kendi yol normalleştirme ve erişim kontrolleriyle yönetmesine izin verin.
  7. Arşiv çıkarma işlemini güvenli hale getirin. ZIP, TAR veya diğer arşiv formatlarını açarken her girişin yolunu kanonikalleştirmeden sonra kontrol edin ("Zip Slip" adıyla bilinen path traversal varyantı).
  8. Güvenlik başlıkları uygulayın. Birincil bir savunma olmamakla birlikte, dosya indirmeleri için Content-Disposition: attachment gibi başlıklar, sunulan içeriğin tarayıcı tarafından yorumlanma riskini azaltır.
  9. Geçiş kalıplarını günlüğe kaydedin ve uyarı oluşturun. Erişim günlüklerini ve uygulama günlüklerini ../, %2e%2e ve tekrarlanan dizin ayırıcıları gibi diziler için izleyin; anormallikler için uyarı oluşturun.

Referanslar

Sıkça sorulan sorular

Path traversal, bir dosya yolu parametresi manipüle edilerek sunucudaki rastgele dosyaların okunması (veya yazılması) anlamına gelir. Yerel Dosya Ekleme (LFI), kullanıcı girdisinin bir include/require ifadesine aktarıldığı ve dahil edilen dosyanın PHP kodu olarak çalıştırılmasına yol açabileceği PHP'ye özgü bir güvenlik açığıdır. LFI, path traversal'ın bir biçimidir; ancak path traversal mutlaka kod çalıştırmayı gerektirmez — yalnızca dosya içeriğinin sızdırılmasıyla da sonuçlanabilir.

Evet. Yalnızca `../` dizisini engelleyen filtreler, URL kodlaması (`%2e%2e%2f`), çift kodlama (`%252e%252e%252f`) veya Unicode varyantları kullanılarak çoğunlukla atlatılabilir. Sağlam bir savunma, ham girdiyle dize eşleştirmek yerine önce yolu işletim sistemi düzeyinde kanonikalleştirmeyi, ardından çözümlenen mutlak yolu doğrulamayı gerektirir.

Hayır. Windows sunucuları da bu açığa karşı eşit derecede savunmasızdır. Windows'ta hem ters eğik çizgi (`\`) hem de eğik çizgi (`/`) geçerli yol ayırıcılar olduğundan `..\ ` veya `..%5c` gibi dizileri kullanan saldırılar yaygındır. Ayrıca Windows'un 8.3 dosya adları ve sürücü harfi önekleri gibi eski yol özellikleri doğrulamayı karmaşık hale getirebilir.

Yaygın hedefler arasında `/etc/passwd` ve `/etc/shadow` (Unix kullanıcı kimlik bilgileri), veritabanı kimlik bilgileri veya API anahtarları içeren uygulama yapılandırma dosyaları, `.env` dosyaları, SSH özel anahtarları (`~/.ssh/id_rsa`), web sunucusu yapılandırma dosyaları, uygulama kaynak kodu ve bulut örneği meta veri uç noktaları (örn. `http://169.254.169.254/latest/meta-data/`) yer almaktadır.

Evet — Sensagraph, sürekli tarama altyapısının bir parçası olarak web uygulama uç noktalarını path traversal güvenlik açıklarına karşı otomatik olarak test etmektedir.