Podatność Path Traversal (Directory Traversal)
Krytyczna luka bezpieczeństwa polegająca na braku walidacji ścieżki pliku (np. sekwencji '../'), pozwalająca atakującemu odczytać lub nadpisać poufne pliki systemowe poza katalogiem głównym aplikacji.
Mechanizm ataku Path Traversal
Path Traversal (znany również jako Directory Traversal lub atak Dot-Dot-Slash ../) to luka bezpieczeństwa występująca w aplikacjach, które przyjmują nazwę lub ścieżkę pliku od użytkownika i używają jej bezpośrednio w operacjach na systemie plików bez należytej sanityzacji.
Przebieg ataku:
Aplikacja pobiera plik raportu za pomocą parametru URL:
https://serwer.pl/pobierz?plik=raport.pdfJeśli kod serwera wykonuje naiwne: File.ReadAllText("/var/www/uploads/" + plik), atakujący może podać:
https://serwer.pl/pobierz?plik=../../../../etc/passwdSekwencja ../ powoduje wyjście w górę drzewa katalogów i nieautoryzowany odczyt pliku /etc/passwd (w systemie Linux) lub C:\\Windows\\win.ini (w Windows).
Metody zabezpieczenia przed Path Traversal:
- Unikanie przekazywania ścieżek od użytkownika: Stosowanie identyfikatorów liczbowych (np.
?id=42) mapowanych na plik w bazie danych. - Użycie bezpiecznych metod canonicalizacji: Sprawdzenie, czy kanoniczna ścieżka bezwzględna rozpoczyna się od dozwolonego katalogu bazowego:
string safeBaseDir = Path.GetFullPath(@"C:\app\uploads\");
string fullPath = Path.GetFullPath(Path.Combine(safeBaseDir, userInputFileName));
if (!fullPath.StartsWith(safeBaseDir, StringComparison.OrdinalIgnoreCase)) {
throw new SecurityException("Wykryto próbę ataku Path Traversal!");
}- Pobieranie wyłącznie nazwy pliku: Użycie
Path.GetFileName(userInput).
Pułapki na egzaminie INF.04:
- Path Traversal wykorzystuje sekwencję
../(lub w systemie Windows..\) do przechodzenia do katalogów nadrzędnych.
Chcesz sprawdzić to pojęcie w praktyce?
Przeszukaj pytania z oficjalnych arkuszy CKE powiązane z hasłem Podatność Path Traversal (Directory Traversal) lub rozpocznij trening.