Sven Rautenberg: Potentielle Gefahren beim Datei Upload

Beitrag lesen

Moin!

Eigentlich sind die Dateien, die upgeloadet werden sollen vom Typ 'lua' (es handelt sich also um Lua Script Dateien). Da der MIME-Type unbekannt ist, werden diese als "application/octet-stream" übertragen.

Ich habe mich daher aktuell erstmal für die Variante entschieden, nur Dateien vom Typ "text/plain" zuzulassen. Allerdings muss der User dann vorher seine .lua Datei in eine .txt Datei umbenennen/umkopieren.

Diese Prüfung des Mimetyps ist unsinnig. Die Angabe stammt vom hochladenden HTTP-Client - das kann ein handelsüblicher Browser sein, aber genausogut ein manipulierender Angreifer, der deine Prüfung auf korrekten Mimetyp einfach umgeht, indem er den gewünschten Typ sendet, aber trotzdem "böse Dateiinhalte".

Könnte ich auch gefahrlos den direkten Upload der Lua Dateien zulassen?

Vermutlich ja.

Was müsste ich dann alles prüfen, bzw. beachten?

Dateien hochladen zu lassen ist noch nicht wirklich gefährlich. Spannend wird es, wenn die Dateien danach dann genutzt werden sollen.

Folgende Gefahrenmomente fallen mir da spontan ein:

1. Die Datei wird wieder zum Download angeboten. Dann sind alle Besucher der Website gefährdet, die diese Datei wieder herunterladen. Das einfachste vorstellbare Szenario: Die Datei ist ausführbar und enthält ein Schadprogramm. Fiesere Dinge wären Sachen wie "eine manipulierte Bilddatei nutzt eine Lücke im Browser aus". Aber da ja alle Internetsurfer regelmäßig ihre Browser aktualisieren, kann sowas natürlich nie passieren... ;)

2. Bei Punkt 1 kann man natürlich noch sagen: Soll jeder selbst aufpassen! Interessant wird's allerdings, wenn hochgeladene Dateien auf dem eigenen Server genutzt werden sollen. Im Prinzip fällt das unter das glorreiche und umfassende Thema "Eingabevalidierung", denn natürlich sind auch Daten, die aus hochgeladenen Dateien bezogen werden, Benutzereingabe im Sinne des Eingabevalidierungsgesetzes (EinValG). Jede weiterverarbeitende Instanz muß also damit rechnen, dass sie vollkommene Schwachsinnsdaten vorgesetzt bekommt, und muß diese selbstverständlich tolerieren und zurückweisen, ohne abzustürzen oder gar schädlichen Code auszuführen.

3. Ein letzter Punkt trifft eher auf "dumme Zufälle kann man nie ausschließen" zu: Hochgeladene Dateien stehen nach der Eingangsverarbeitung genauso auf der Festplatte, wie alle anderen Dateien. Gefährlich werden kann das auch dann, wenn eine Datei zwar harmlos heißt, aber tatsächlich die Bytes eines ausführbaren Programms enthält. Welche Sicherungsmechanismen existieren, um zu verhindern, dass die Datei tatsächlich unabsichtlich als Programm gestartet wird? Unter Windows hängt die Startbarkeit vom Dateinamen ab (wobei es leider viel mehr Extensions gibt, die als startbar angesehen werden, als nur EXE, COM und BAT). Unter Linux ist der Name irrelevant, hier hängt alles am X-Bit der Dateirechte - und zwar getrennt für User, Gruppe und Welt.

Welche potentiellen Gefahren stecken in der Sache?

Es kommt sehr darauf an, was du mit den hochgeladenen Dateien machst, und wie exakt du die Dateien prüfst, bevor du das machst.

Quellcodedateien einer Programmiersprache hochzuladen ist erstmal eher harmlos - sofern du nicht beabsichtigst, den Code zu kompilieren und auszuführen. Wobei Lua da eventuell abschottbar in einer eigenen VM laufen könnte und von daher Schadoperationen keine oder nur sehr begrenzte Auswirkungen haben könnten - das wäre dann aber ein Spezialfall, der nicht zu verallgemeinern ist.

- Sven Rautenberg

--
"Love your nation - respect the others."