Path-Traversal-Angriff – Schwachstelle beim Hochladen von Dateien

Pfadmanipulation beim Datei-Upload: Wie Entwickler ihre eigenen Exploits erstellen

Wenn Datei-Uploads zu Dateizugriffen werden

Ein einziger unsicherer Upload-Handler kann die Tür für einen vollständigen Pfadtraversal-Angriff und eine Dateiupload-Schwachstelle öffnen. Wenn Entwickler Dateinamen direkt mit Upload-Pfaden verknüpfen, Angreifer können bösartige Dateinamen einreichen Google Trends, Amazons Bestseller ../../etc/passwd um aus Verzeichnissen auszubrechen und auf sensible Dateien zuzugreifen. Diese Art von Pfadmanipulation verwandelt eine einfache Upload-API in eine mächtige Dateizugriffs-Exploit, insbesondere wenn die Anwendung mit erhöhten Berechtigungen ausgeführt wird.

⚠️Unsicheres Beispiel, nur zu Schulungszwecken. Nicht in der Produktion verwenden.

// 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!");
}

Ein Angreifer kann eine Datei mit dem Namen hochladen ../../web.config um geschützte Dateien zu überschreiben oder zu lesen, ein klassischer Pfadtraversalangriff.

Sichere Version:

// 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!");
}

Pädagogischer Hinweis: Pfade immer kanonisieren mit Path.GetFullPath() Überprüfen Sie, ob das Ergebnis in Ihrem Upload-Verzeichnis verbleibt. Vertrauen Sie niemals einem Datei.Dateiname direkt.

Entwicklerfehler, die Pfadtraversierung ermöglichen

Die meisten Sicherheitslücken beim Datei-Upload, die zu Pfadmanipulationen führen, entstehen durch übereilten Code und fehlende Validierung. Häufige Entwicklerfehler sind:

  • Verketten von Benutzereingaben direkt in Dateisystempfade
  • Vertrauensvoll Content-Type oder alleinige Erweiterungsvalidierung
  • Die Normalisierung der Pfade wird vor dem Speichern übersprungen.

Wiederverwendung temporärer Ordner über Anfragen oder Microservices hinweg

⚠️Unsicheres Beispiel, nur zu Schulungszwecken. Nicht in der Produktion verwenden.

# 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'

Angreifer können diese einfache Verkettung umgehen, um Verzeichnisse zu durchsuchen (../../app.pyund beliebige Dateien schreiben oder überschreiben. Sichere Version:

# 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'

Pädagogischer Hinweis: Verwenden Sie vom Framework bereitgestellte Hilfsfunktionen wie sicherer_Dateiname und die zulässigen Dateierweiterungen durchsetzen. Eingaben niemals manuell zu Dateipfaden verketten.

Ausbeutung in der Realität Pipelines und Microservices

Path-Traversal-Angriffe finden nicht nur an öffentlichen Endpunkten statt. Sie treten häufig auch innerhalb von Netzwerken auf. CI/CD Systeme, Artefakt-Repositories oder Microservices, die hochgeladene Dateien verwalten. Beispielsweise könnte eine Schwachstelle beim Datei-Upload in einem Build-Artefakt-Manager es einem Angreifer ermöglichen, Build-Skripte zu überschreiben oder Schadsoftware in gemeinsam genutzte Runner einschleusen.

⚠️Unsicheres Beispiel, nur zu Schulungszwecken. Nicht in der Produktion verwenden.

# Never expose real tokens, credentials, or internal URLs in pipelines
- name: Store build artifact
  run: cp $UPLOAD_PATH/$FILENAME /var/artifacts/$FILENAME

If $DATEINAME ist nicht validiert, ein handgefertigtes ../../../etc/passwd Der Wert kann während der Bereitstellung kritische Systemdateien überschreiben, was einem realen Path-Traversal-Angriff entspricht. Sichere Version: 

# Safer artifact storage guardrail
- name: Store build artifact securely
  run: |
    SAFE_NAME=$(basename "$FILENAME")
    cp "$UPLOAD_PATH/$SAFE_NAME" /var/artifacts/"$SAFE_NAME"

Pädagogischer Hinweis: In pipelineBereinigen Sie alle dynamischen Pfadvariablen. Beschränken Sie Schreibvorgänge auf kontrollierte Verzeichnisse, um Dateisystemausbrüche während Builds oder Deployments zu verhindern.

Verhinderung von Pfaddurchläufen in der Upload-Logik

Die Verhinderung von Pfadmanipulationen beginnt mit einer strengen Eingabevalidierung und -isolation. Dateinamen und Pfade sollten von vornherein als nicht vertrauenswürdige Eingaben behandelt werden, insbesondere beim Umgang mit hochgeladenen Dateien.

Praxisbeispiele

  1. Normalisieren und kanonisieren alle Pfade, bevor sie verwendet werden.
  2. Uploads beschränken in ein dediziertes Verzeichnis außerhalb des Web-Root-Verzeichnisses.
  3. Zulassungslisten durchsetzen für Dateierweiterungen und MIME-Typen.
  4. Temporäre Ordner niemals wiederverwenden zwischen Sitzungen oder Benutzern.
  5. Nutzen Sie Containerspeicher für hochgeladene Dateien, sofern möglich.

Mini-Checkliste zur Prävention

  • Überprüfen Sie jeden Dateinamen mit Path.GetFileName() oder gleichwertig.
  • Vollständige Pfade auflösen und Verzeichnisgrenzen überprüfen.
  • Erweiterungen und MIME-Zulassungslisten anwenden.
  • Verwenden Sie separate Upload-Ordner pro Benutzer bzw. Sitzung.
  • Fügen Sie Upload-Scanning und -Validierung hinzu CI/CD Tests.

Pädagogischer Hinweis: Jeder Datei-Upload-Handler stellt ein potenzielles Einfallstor für Path-Traversal-Angriffe dar. Bauen Sie eine mehrschichtige Verteidigung auf, indem Sie den gesamten Dateiverarbeitungscode validieren, isolieren und scannen.

Wie Xygeni unsichere Upload-Abläufe erkennt und blockiert

Xygeni Code Security scannt Codebasen und pipelines, um Pfadtraversierungsmuster zu erkennen, bevor sie die Produktion erreichen. Es kennzeichnet unsichere Pfadverkettungen, fehlende Kanonisierung und gefährliche Dateivorgänge sowohl im Code als auch in der Anwendung. CI/CD Skripte.

Funktionsausschnitt mit Kontrollrahmen:

# Secure enforcement with Xygeni
- name: Enforce secure upload and path handling
  run: dotnet xygeni enforce --rules uploads,path,security --fail-on-risk

Pädagogischer Hinweis: Integration Xygeni für Ihre pipeline stellt sicher, dass Sicherheitslücken beim Hochladen von Dateien und Path-Traversal-Angriffe während der Build-Validierung automatisch erkannt werden.

Die Lücke schließen: So verhindern Sie Ihren nächsten Path-Traversal-Angriff

Ein einziger Fehler in der Pfadmanipulation eines Datei-Upload-Endpunkts kann Angreifern Zugriff auf das Dateisystem Ihres Servers ermöglichen. Überprüfen Sie Upload-Handler auf unsichere Verkettungen, normalisieren Sie alle Pfade und vertrauen Sie niemals benutzergesteuerten Dateinamen. Speichern Tools zum Scannen von Sicherheitslücken Google Trends, Amazons Bestseller Xygeni Code Security auf Ihre DevSecOps pipeline um Path-Traversal-Angriffe und Schwachstellen beim Datei-Upload vor der Auslieferung zu erkennen. Aus Sicherheitsgründen muss jede gespeicherte Datei als auszuführender Code behandelt werden!

SCA-Tools-Software-Zusammensetzungs-Analyse-Tools
Priorisieren, beheben und sichern Sie Ihre Softwarerisiken
7-Tage kostenlose Testversion
Keine Kreditkarte erforderlich

Sichern Sie Ihre Softwareentwicklung und -bereitstellung

mit der Xygeni-Produktsuite