Werden Sie gerade angegriffen? Hilfe bei der Vorfallsbehandlung

info@angelforce.eu
Websicherheit

Sichere Datei-Uploads: Konzeption und Tests

Checkliste für Upload-Funktionen auf Basis des OWASP Cheat Sheets, mit einer Tabelle von Tests, die Sie gegen jeden Upload-Endpunkt ausführen können.

Auch verfügbar auf:EnglishTürkçeFrançaisEspañolItalianoPolskiNederlandsEesti

Illustration: Sichere Datei-Uploads: Konzeption und Tests

Eine sichere Upload-Funktion beruht auf mehreren Maßnahmen, die gemeinsam umgesetzt werden. Das OWASP File Upload Cheat Sheet listet sie auf. Dieser Artikel geht die Liste durch, weist auf die Punkte hin, die sich leicht übersehen lassen, und überführt sie in Tests, die Sie gegen jeden Upload-Endpunkt ausführen können.

Wogegen Sie sich schützen

Das Cheat Sheet fasst die Bedrohungen unter dem Begriff "malicious files" zusammen. Die erste ist ein Angriff auf die Software, die die Datei verarbeitet. Ein Angreifer liefert eine Datei, die eine Schwachstelle im Parser oder im Verarbeitungsmodul ausnutzt. Als Beispiele nennt das Cheat Sheet den ImageTrick-Exploit und XXE.

Die zweite ist Phishing. Das Cheat Sheet nennt als Beispiel ein Bewerbungsformular. Der Upload wird damit zu einem Weg, den Personen, die die Datei öffnen, eine schädliche Datei zu präsentieren.

Die dritte betrifft die Verfügbarkeit. ZIP-Bomben, XML-Bomben (der Billion-Laughs-Angriff) und schlicht riesige Dateien können den Speicherplatz des Servers füllen und seine Verfügbarkeit beeinträchtigen.

Validieren, bevor Sie akzeptieren

Das Cheat Sheet legt eine Reihenfolge fest: Wenden Sie die Eingabevalidierung an, bevor Sie die Dateiendung prüfen. Anschließend wird mit einer Allowlist gearbeitet.

  • Erlaubte Dateiendungen auflisten. Lassen Sie nur die unbedenklichen Endungen zu, die die Geschäftsfunktion benötigt. Ein Formular für Profilfotos hat keinen Grund, etwas anderes als einige wenige Bildformate zu akzeptieren.
  • Dateityp validieren. Verlassen Sie sich nicht auf den angegebenen Content-Type, da er gefälscht werden kann. Validieren Sie Dateityp und Signatur, bevor Sie den Upload akzeptieren.
  • Eine Obergrenze für die Länge des Dateinamens festlegen und nach Möglichkeit die zulässigen Zeichen einschränken.
  • Eine Obergrenze für die Dateigröße festlegen.

Besteht eine Datei eine dieser Prüfungen nicht, weisen Sie sie ab.

Name und Speicherort sorgfältig behandeln

Das Cheat Sheet empfiehlt, den vom Benutzer vergebenen Dateinamen durch einen von der Anwendung generierten Namen zu ersetzen. Tun Sie das bei jedem Upload, unabhängig vom Dateityp.

Der Speicherort ist ebenso wichtig wie die Datei selbst. Speichern Sie Uploads nach Möglichkeit auf einem anderen Server. Ist das nicht möglich, legen Sie sie außerhalb des Webroots ab.

Müssen Dateien öffentlich erreichbar sein, verwenden Sie einen Handler innerhalb der Anwendung, der eine Kennung einer Datei zuordnet (someid zu file.ext), statt den Speicherpfad offenzulegen.

Zwei weitere Punkte der Liste werden leicht vergessen:

  • Nur autorisierte Benutzer sollten Dateien hochladen können.
  • Schützen Sie den Upload vor CSRF-Angriffen.

Gespeicherte Dateien prüfen und verarbeiten

Die Validierung prüft, ob eine Datei plausibel aussieht. Das Cheat Sheet ergänzt einen weiteren Schritt: Lassen Sie die Datei, sofern verfügbar, durch eine Antivirus-Engine oder eine Sandbox laufen, um sicherzustellen, dass sie keine schädlichen Daten enthält.

Für geeignete Dokumenttypen wie PDF und DOCX sollten Sie CDR (Content Disarm & Reconstruct) als zusätzlichen Verarbeitungsschritt in Betracht ziehen.

Das Cheat Sheet verlangt außerdem, dass alle eingesetzten Bibliotheken sicher konfiguriert und aktuell gehalten werden. Da Schwachstellen in Parsern zu den genannten Bedrohungen zählen, sollten Sie diesen Punkt einer namentlich benannten Person mit einem Termin für die Überprüfung zuweisen.

Jeden Endpunkt testen

Das Cheat Sheet listet Maßnahmen auf, keine Testfälle. Jede Zeile der folgenden Tabelle ist unsere eigene Ableitung aus seiner Checkliste, und die dritte Spalte zeigt, aus welchem Punkt sie stammt. Führen Sie die Tests gegen jeden Upload-Endpunkt aus, auch gegen Admin-Werkzeuge und Endpunkte, die nur für einen einzelnen Kunden ergänzt wurden.

TestSo sieht ein bestandener Test ausGrundlage
Eine Skriptdatei hochladen, die auf eine erlaubte Endung umbenannt wurdeWird nach der Dateitypvalidierung abgewiesenAbgeleitet: Dateityp validieren
Eine nicht erlaubte Datei mit einem erlaubten Content-Type sendenWird weiterhin abgewiesenAbgeleitet: dem Content-Type-Header nicht vertrauen
Einen sehr langen Dateinamen übermittelnWird abgewiesen oder durch einen generierten Namen ersetztAbgeleitet: Obergrenze für die Länge des Dateinamens, generierte Dateinamen
Eine Datei oberhalb der Größenbeschränkung hochladenWird abgelehntAbgeleitet: Obergrenze für die Dateigröße
Die gespeicherte Datei durch Erraten ihres Pfads abrufenNur über den Handler erreichbarAbgeleitet: Speicherort, zuordnender Handler
Upload ohne Session oder ohne CSRF-TokenWird abgelehntAbgeleitet: autorisierte Benutzer, CSRF-Schutz
In einer Testumgebung eine ZIP- oder XML-Bombe hochladenDer Dienst bleibt verfügbarAbgeleitet: Bedrohung der Verfügbarkeit

Als weiterführende Referenz beschreibt sich der OWASP Web Security Testing Guide selbst als die führende Ressource für Cybersecurity-Tests für Entwickler von Webanwendungen und Sicherheitsexperten. Der OWASP Application Security Verification Standard liefert nummerierte Anforderungen, gegen die Sie prüfen können. Wenn Sie eine davon in einem Ticket oder Bericht zitieren, geben Sie die Version an, zum Beispiel v5.0.0-1.2.5, da sich Kennungen zwischen Versionen des Standards ändern können.

Wo Sie anfangen

  1. Listen Sie jeden Endpunkt auf, der eine Datei annimmt, einschließlich Admin-Werkzeugen, Importfunktionen und alter Plugins.
  2. Legen Sie für jeden Endpunkt die erlaubten Dateiendungen, die maximale Dateigröße und die maximale Länge des Dateinamens fest und wenden Sie die Eingabevalidierung vor der Prüfung der Dateiendung an.
  3. Ersetzen Sie vom Benutzer vergebene Dateinamen durch generierte. Verlagern Sie den Speicher auf einen separaten Server oder außerhalb des Webroots und liefern Sie öffentliche Dateien über einen Handler aus, der IDs Dateinamen zuordnet.
  4. Ergänzen Sie Dateityp- und Signaturvalidierung, einen Schritt mit Antivirus oder Sandbox sowie CDR für die Dokumenttypen, die Sie akzeptieren. Prüfen Sie, ob die Parsing-Bibliotheken aktuell und sicher konfiguriert sind.
  5. Überführen Sie die Testtabelle in automatisierte Prüfungen und führen Sie diese vor jedem Release aus. Wenn Sie das Ergebnis extern prüfen lassen möchten, kann unser Penetrationstest-Service die Endpunkte testen, und unsere Unterstützung bei der sicheren Softwareentwicklung hilft Ihnen, wenn sich die Funktion noch in der Designphase befindet. Die OWASP-Hinweise zu Datei-Uploads dienen in beiden Fällen als Prüfcheckliste.

So können wir helfen

Penetrationstests

Wir greifen Ihre Netzwerke, Anwendungen und Mitarbeitenden an wie ein echter Angreifer und zeigen Ihnen, wie Sie jede Lücke schließen.

Schreiben Sie uns
AngelForce-Team

Geschrieben vom AngelForce-Team: Sicherheitsberater mit CEH-, LPT-Master- und CISA-Zertifizierung, die Systeme von Organisationen in ganz Europa und in der Türkei testen, überwachen und schützen.

Mit KI-Unterstützung auf Grundlage der unten aufgeführten öffentlichen Quellen verfasst und vor der Veröffentlichung vom AngelForce-Team geprüft.

Quellen

  1. cheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html
  2. owasp.org/projects/asvs
  3. owasp.org/projects/web-security-testing-guide

Artikel zum Thema Websicherheit

Sagen Sie uns, was Sie schützen müssen

Beschreiben Sie Ihre Umgebung und was Sie erreichen möchten. Wir antworten per E-Mail.

Schreiben Sie uns
info@angelforce.eu

AngelForce OÜ · Tallinn, Estland