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 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 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!







