Kiedy przesyłanie plików staje się dostępem do plików
Pojedynczy niezabezpieczony moduł obsługi przesyłania może otworzyć furtkę do ataku typu full path traversal i podatności na przesyłanie plików. Gdy programiści łączą nazwy plików bezpośrednio ze ścieżkami przesyłania, atakujący mogą przesyłać złośliwe nazwy plików lubić ../../etc/passwd aby wyjść z katalogów i uzyskać dostęp do poufnych plików. Ten typ przemierzania ścieżki zmienia proste API przesyłania w potężną lukę w dostępie do plików, szczególnie gdy aplikacja działa z podwyższonymi uprawnieniami.
⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.
// Vulnerable upload handler, file upload vulnerability [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var path = Path.Combine("uploads/", file.FileName); // No validation using var stream = new FileStream(path, FileMode.Create); await file.CopyToAsync(stream); return Ok("File uploaded!"); } Atakujący może przesłać plik o nazwie ../../web.config nadpisywać lub odczytywać zastrzeżone pliki, klasyczny atak polegający na przemierzaniu ścieżki.
Wersja bezpieczna:
// Safe upload with validation and canonicalization [HttpPost("/upload")] public async Task<IActionResult> Upload(IFormFile file) { var fileName = Path.GetFileName(file.FileName); // strip directories var targetDir = Path.GetFullPath("uploads/"); var safePath = Path.Combine(targetDir, fileName); if (!safePath.StartsWith(targetDir)) return BadRequest("Invalid file path"); using var stream = new FileStream(safePath, FileMode.Create); await file.CopyToAsync(stream); return Ok("File securely uploaded!"); } Uwaga edukacyjna: Zawsze kanonizuj ścieżki za pomocą Ścieżka.GetFullPath() i sprawdź, czy wynik pozostaje w katalogu do przesłania. Nigdy nie ufaj plik.NazwaPliku bezpośrednio.
Błędy programistów umożliwiające przemierzanie ścieżek
Większość luk w zabezpieczeniach przesyłania plików, które prowadzą do przechodzenia przez ścieżkę, wynika z pośpiesznego pisania kodu i braku walidacji. Typowe błędy programistów obejmują:
- Łączenie danych wprowadzanych przez użytkownika bezpośrednio ze ścieżkami systemu plików
- Ufny Typ zawartości lub tylko walidacja rozszerzenia
- Pomijanie normalizacji ścieżek przed zapisaniem
Ponowne wykorzystywanie folderów tymczasowych w różnych żądaniach lub mikrousługach
⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.
# Flask example vulnerable to path traversal attack @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] file.save('uploads/' + file.filename) return 'Uploaded' Atakujący mogą ominąć to proste połączenie, aby przejść przez katalogi (../../app.py) i zapisywać lub nadpisywać dowolne pliki. Wersja bezpieczna:
# Safe file upload validation from werkzeug.utils import secure_filename @app.route('/upload', methods=['POST']) def upload(): file = request.files['file'] name = secure_filename(file.filename) path = os.path.join('uploads', name) file.save(path) return 'Securely uploaded' Uwaga edukacyjna: Użyj pomocników dostarczanych przez framework, takich jak bezpieczna_nazwa_pliku i wymuszaj stosowanie rozszerzeń z listy dozwolonych. Nigdy nie łącz ręcznie danych wejściowych ze ścieżkami plików.
Eksploatacja w rzeczywistości Pipelinei mikrousługi
Ataki typu path traversal nie zdarzają się tylko w publicznych punktach końcowych. Często pojawiają się w ich obrębie. CI/CD systemy, repozytoria artefaktów lub mikrousługi zarządzające przesyłanymi plikami. Na przykład luka w zabezpieczeniach umożliwiająca przesyłanie plików w menedżerze artefaktów kompilacji może umożliwić atakującemu nadpisanie skryptów kompilacji lub wstrzykiwać złośliwe pliki do współdzielonych serwerów.
⚠️Niebezpieczny przykład, wyłącznie do celów edukacyjnych. Nie używać w środowisku produkcyjnym.
# Never expose real tokens, credentials, or internal URLs in pipelines - name: Store build artifact run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME If $NAZWAPLIKU nie jest zweryfikowany, jest sfabrykowany ../../../etc/passwd wartość może nadpisać krytyczne pliki systemowe podczas wdrażania, co jest atakiem polegającym na omijaniu ścieżki w świecie rzeczywistym. Wersja bezpieczna:
# Safer artifact storage guardrail - name: Store build artifact securely run: | SAFE_NAME=$(basename "$FILENAME") cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME" Uwaga edukacyjna: In pipelines, zdezynfekuj wszystkie dynamiczne zmienne ścieżki. Ogranicz operacje zapisu do kontrolowanych katalogów, aby zapobiec ucieczce systemu plików podczas kompilacji lub wdrożeń.
Zapobieganie przechodzeniu ścieżki w logice przesyłania
Ograniczanie ryzyka przemierzania ścieżek zaczyna się od ścisłej walidacji i izolacji danych wejściowych. Traktuj nazwy plików i ścieżki jako dane wejściowe, którym nie można ufać, od samego początku, zwłaszcza podczas obsługi przesyłanych plików.
Najlepsze praktyki
- Normalizuj i kanonizuj wszystkie ścieżki przed ich użyciem.
- Ogranicz przesyłanie do dedykowanego katalogu poza katalogiem głównym witryny.
- Wymuś listy dozwolonych dla rozszerzeń plików i typów MIME.
- Nigdy nie używaj ponownie folderów tymczasowych między sesjami lub użytkownikami.
- Użyj kontenerowego magazynu jeśli to możliwe, w przypadku przesłanych plików.
Mini lista kontrolna działań zapobiegawczych
- Sprawdź każdą nazwę pliku za pomocą Ścieżka.PobierzNazwęPliku() lub odpowiednik.
- Rozwiąż pełne ścieżki i zweryfikuj granice katalogów.
- Zastosuj rozszerzenia i listy dozwolonych MIME.
- Użyj oddzielnych folderów do przesyłania danych dla każdego użytkownika lub sesji.
- Uwzględnij skanowanie i walidację przesyłania CI/CD testów.
Uwaga edukacyjna: Każdy moduł obsługi przesyłania plików to potencjalny wektor ataku polegającego na przekroczeniu ścieżki. Zbuduj kompleksową obronę, weryfikując, izolując i skanując cały kod obsługi plików.
Jak Xygeni wykrywa i blokuje niebezpieczne przepływy przesyłania danych
Xygeni Code Security skany bazy kodów i pipelines w celu wykrycia wzorców poruszania się po ścieżkach zanim dotrą one do produkcji. Oznacza niebezpieczne łączenie ścieżek, brak kanonizacji i niebezpieczne operacje na plikach zarówno w kodzie, jak i CI/CD skrypty.
Fragment funkcjonalny z zabezpieczeniem kontrolnym:
# Secure enforcement with Xygeni - name: Enforce secure upload and path handling run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk Uwaga edukacyjna: Integracja Xygeni w wiadomościach pipeline zapewnia, że luki w zabezpieczeniach związane z przesyłaniem plików i ataki polegające na przemierzaniu ścieżki są automatycznie wykrywane podczas walidacji kompilacji.
Zamykanie luki: zapobieganie kolejnym atakom polegającym na przechodzeniu przez ścieżkę
Błąd polegający na przechodzeniu pojedynczej ścieżki w punkcie końcowym przesyłania pliku może umożliwić atakującym dostęp do systemu plików Twojego serwera. Sprawdź procedury przesyłania pod kątem niebezpiecznych połączeń, znormalizuj wszystkie ścieżki i nigdy nie ufaj nazwom plików kontrolowanym przez użytkownika. Dodaj narzędzia do skanowania podatności lubić Xygeni Code Security dla Twojej DevSecOps pipeline w celu wykrywania ataków polegających na przemierzaniu ścieżki i luk w zabezpieczeniach przesyłania plików przed ich wysłaniem. Ze względów bezpieczeństwa każdy zapisany plik musi być traktowany jako wykonany kod!






