Nedir?
Dizin geçişi saldırganın bir uygulamayı çalıştıran sunucudaki rastgele dosyaları okumasına olanak tanıyan bir web güvenliği güvenlik açığıdır. Bu güvenlik açığıyla, kaynak kodu, server kimlik bilgileri ve hassas işletim sistemi dosyaları elde edilebilir.
Nasıl Çalışır?
Satılık ürünlerin görüntülerini görüntüleyen bir alışveriş uygulaması düşünün. Görüntüler aşağıdaki gibi bazı HTML'ler aracılığıyla yüklenir:
<img src="/loadImage?filename=218.png">
loadImage URL'i bir filename parametresi alır ve belirtilen dosyanın içeriğini döndürür. Görüntü dosyalarının kendileri /var/www/images/ konumundaki dizinde saklanır. Bir dosyayı döndürmek için, uygulama istenen dosya adını bu temel dizine ekler ve dosyanın içeriğini okumak için bir dosya sistemi API'si kullanılır. Yukarıdaki durumda, uygulama aşağıdaki dosya yolundan okur:
/var/www/images/218.png
Aşağıdaki url ile linux’ta kritik bilgiler içeren passwd dosyası ele geçirilebilir.
https://evil.com/loadImage?filename=../../../etc/passwd
Bazı durumlarda bu zafiyetin çalışmaması halinde farklı eklentiler yapılabilir. Örneğin sistem bir pdf dosyasının izinler dahilinde görüntülenmesine engel oluyorsa %00 (null byte) kullanılarak dosyaya erişim sağlanabilir.
https://evil.com/loadImage?filename=../../../files/pdf_file.pdf%00
Aynı şekilde iki farklı uzantı da kullanılabilir. Örneğin sistemde txt dosyalarının görüntülenmesine izin veren bir yapı olması durumunda;
https://evil.com/loadImage?filename=../../../files/pdf_file.pdf%00.txt
payloadı kullanılabilir.
Nasıl Önlenir?
Sisteme dosya görüntülenmesi için gönderilen istek özel bir encode işlemi ile encode edilmiş bir şekilde gönderilebilir. Daha sonrasında sistem bu isteği decode ederek dosyayı gönderir.