Pfaddurchquerung und Einbindung lokaler Dateien
Erklärung der Sicherheitslücke
Path Traversal (CWE-22 – CWE-40) ist eine Schwachstelle, die auftritt, wenn benutzergesteuerte Eingaben verwendet werden, um einen Pfadnamen zu erstellen, der eine Datei oder ein Verzeichnis identifizieren soll, die sich unter einem eingeschränkten übergeordneten Verzeichnis befindet. Wenn die Software spezielle Elemente im Pfadnamen nicht ordnungsgemäß neutralisiert, kann eine böswillige Eingabe dazu führen, dass der Pfadname in einen Speicherort außerhalb des eingeschränkten Verzeichnisses aufgelöst wird.Path Traversal-Schwachstellen werden von Angreifern auch für Local File Inclusion (auch LFI)-Angriffe genutzt.
Empfohlene Sicherheitskontrollen
Gemäß den OWASP- und MITRE-Empfehlungen müssen Anwendungen zum Schutz vor Path Traversal und Local File Inclusion Folgendes tun:- Gehen Sie davon aus, dass alle Eingaben böswillig sind. Verwenden Sie eine Eingabevalidierungsstrategie „Akzeptieren Sie bekanntermaßen gute Eingaben“, d. h. verwenden Sie eine Liste akzeptabler Eingaben, die strikt den Spezifikationen entsprechen.
Lehnen Sie alle Eingaben ab, die nicht genau den Spezifikationen entsprechen, oder wandeln Sie sie in etwas um, das dies tut. - Wenn Benutzereingaben nicht vermieden werden können, stellen Sie sicher, dass der bereitgestellte Wert gültig, für die Anwendung geeignet und für den Benutzer autorisiert ist.
So funktioniert der Schutz von Waratek
Waratek bietet Schutz vor Path Traversal- und Local File Inclusion-Angriffen über die Traversal-Deklaration in der ARMR-Dateisystemregel. Diese Regel verwendet die Tainting-Engine, um alle Benutzereingaben zu verfolgen, stellt eine Verbindung zur Datei-API von Java her und überwacht Dateisystemvorgänge. Wenn ein Dateisystemvorgang stattfindet, prüft der Waratek-Agent, ob der Dateisystempfad vom Benutzer kontrollierbare (modifizierte) Zeichen enthält, die das Dateisystem durchlaufen.Die Traversal(relative)-Regel erkennt, ob benutzergesteuerte Eingaben zum Durchlaufen des Dateisystems verwendet werden, indem relative Dateisystemsequenzen wie „..“ verwendet werden, die zu einem Speicherort außerhalb des aktuellen Verzeichnisses aufgelöst werden können.
Die Traversal(absolute)-Regel erkennt, ob benutzergesteuerte Eingaben zum Durchlaufen des Dateisystems verwendet werden, wobei absolute Dateisystemsequenzen wie „/path/to/file“ verwendet werden, die in einen Speicherort außerhalb des aktuellen Verzeichnisses aufgelöst werden können.
Durch die Angabe von traversal() ohne Parameter schützt die Regel sowohl vor relativen als auch vor absoluten Path-Traversal-Angriffen.
Wenn in der Regel keine Taint-Quelle angegeben ist, schützt die Path Traversal-Regel standardmäßig vor Angriffen, die von HTTP-Anfragen ausgehen. Benutzer haben die Möglichkeit, auch den Schutz vor Path-Traversal-Angriffen aus anderen Quellen wie relationalen Datenbanken und/oder auf Deserialisierung basierenden Protokollen wie RMI zu aktivieren.
Schutzmaßnahme
Wenn die Path Traversal-Regel im Verweigerungsmodus aktiviert ist und ein Path Traversal-Angriff identifiziert wird, wird der schädliche Dateisystemvorgang beendet und gemäß der Datei-API eine Java-Ausnahme an die Anwendung zurückgeworfen.Anwendbarkeit der Regel
Die Path Traversal-Regel ist anwendbar und kann in allen Anwendungen sicher aktiviert werden, außer wenn Anwendungen von benutzergesteuerten Dateisystempfaden abhängig sind, die entweder relative oder absolute Dateisystemsequenzen enthalten.Empfohlene Vorgehensweise
Waratek empfiehlt, die Path Traversal-Regel nicht im Blockierungsmodus zu aktivieren, wenn die Anwendung darauf angewiesen ist, das Dateisystem mit benutzergesteuerten Eingaben zu durchlaufen. Erwägen Sie stattdessen, die Regel im Erkennungsmodus zu aktivieren, um solche Vorgänge zu überwachen.
Weiterführende Verweise:
https://owasp.org/www-community/attacks/Path_Traversal
https://cwe.mitre.org/data/definitions/22.html