Liste Neuigkeiten Hintergrundartikel Kommentare Programmieren/Java IT-Sicherheit Computer Ratgeber & Tipps

Sichere Programmierung von Web-Anwendungen - Remote File Inclusion / Local File Inclusion / Directory/Path Traversal

Hinzugefügt am 08.12.2020 von Frank Hissen

Zahlreiche erfolgreiche Angriffe auf bekannte Web-Anwendungen finden wöchentlich Einzug in einschlägige Medien. Grund genug bei der Entwicklung eigener Anwendung - egal ob zur rein internen Nutzung oder mit öffentlichem Zugang - sich mit den Hintergründen der "Web Application Security" zu beschäftigen.

Dies ist ein Auszug aus dem Buch und dem Onlinekurs "Sicherheit von Web-Anwendungen: Für Software-Entwickler und Software-Projektleiter".

Beschreibung

Wenn eine Web-Anwendung zur Laufzeit Dateien (per lokalem Dateizugriff oder auch per Web-Zugriff, z.B. HTTP) nachlädt, kann im Falle einer Sicherheitslücke, die Angabe des Dateipfades so manipuliert werden, dass interne Dateien ausgeben oder sogar interne oder externe Scripte ungewollt ausgeführt werden.

In Kombination mit einer lückenhaften Datei-Uploadfunktion kann ein Angreifer sogar eigene Script in die Web-Anwendung hochladen und zur Ausführung bringen.

Ziel eines solchen Angriffs ist meist direkt der Server bzw. die Web-Anwendung (z.B. Auslesen von Accounts, Passwörtern, Konfiguration etc.). Aber im Falle von manipulierten Scripten bzw. Links der Web-Anwendung mit eingebundenen externen Scripten können auch Nutzer direkt betroffen sein.

Beispiel mit Sicherheitslücke:

Ein typischer Versuch aus einem Dateipfad auszubrechen ist es seitens des Angreifers lokale Dateisystem-Kommandozeichen zu nutzen, etwa

https://example.com/action/show?value=/etc/passwd ODER https://example.com/action/show?value=../../../../passwd

Auch Steuerzeichen wie das Nullbyte (%00) können Pfadangaben manipulieren und beispielsweise abbrechen.

Gefährdete Scriptaufrufe andererseits sehen typischerweise so aus:

https://example.com/execute?script=add.php

Hierbei würde ein Angreifer ebenfalls mittels Manipulation der Pfadangaben prüfen, ob andere ausführbare Scripte (Beispiel: Web-Shop-Baukasten, LAMP-Stack) auffindbar sind oder gar ein eigenes remote Script ausführbar ist (HTTP).

Sichere Programmierung:

1)

Externe Dateien und Scripte sollten nur statisch verlinkt werden.

Soweit möglich sollten Dateiverweise programmatisch intern gelöst werden und nicht durch URL-basierte Parametrisierung. Ggf. kann eine Konfigurationsdatei oder Tabelle dafür notwendig sein. Die Auswahl von Scripten, welche zur Benutzung der Web-Anwendung ausgeführt werden, sollte statisch erfolgen. Werden Scripte extern geladen, muss dies auf Basis von explizit definierten Whitelists erfolgen (vgl. Abschnitt "Open-Redirection").

2)

Bei Dateizugriffen, z.B. auch bei nutzerbasierten Dateiuploads, müssen Filter den "Ausbruch" aus dem Zielverzeichnis verhindern.

Der Ablage im Dateisystem ist ein Datenbanksystem vorzuziehen, da hier keine Dateizugriffe über ein Dateisystem stattfinden!

Sind lokale Dateizugriffe - insbesondere aufgrund nutzerbasierten Contents - dennoch notwendig, so muss sichergestellt werden, dass Zielverzeichnisse nicht verlassen werden. Jede Programmierumgebung ermöglicht die "Kanonisierung" von Pfadangaben, die zum Überprüfen und Vergleichen von Pfadangaben genutzt werden kann. Als Beispiel sei auf folgende Methode verwiesen:

//Java class java.io.File getCanonicalFile(): Returns the canonical form of this abstract pathname.

Diese Variante ist als sicherer anzusehen, als eigene Filter zu bauen. Sollten Filter genutzt werden, so ist auf ein Blacklisting (etwa von Steuerzeichen wie das Nullbyte oder Absatzmarken) zu verzichten und ein Whitelisting vorzunehmen. D.h., die erlaubten Zeichen in Dateinamen werden explizit definiert, alle anderen werden verworfen. Auf Nullbyte-Verarbeitung bei eingehenden Strings ist dennoch zu achten.

Schlagworte

Remote File Inclusion, RFI, Local File Inclusion, LFI, Directory Traversal, Path Traversal, OWASP, IT-Security, Sichere Programmierung, Web-/Anwendungssicherheit, IT-Securitymanagement, Security Awareness

Kategorien: IT-Sicherheit Hintergrundartikel Programmieren/Java


Kommentare

Eigenen Kommentar hinzufügen

Teilen / Weiterempfehlen

Wenn Sie diese Seite gut finden, teilen Sie es doch ihren Kontakten mit:

Mail Facebook Twitter Pinterest LinkedIn
reddit Digg StumbleUpon XING
WhatsApp Telegram