Sicherheitsproblem beim Verzeichnisdurchlauf

8

Ich habe eine Java-Webapp, die anfällig für das Verzeichnis Transversal (aka Path Transversal) Angriff über URL-Codierung ist. Nach der Authentifizierung:

  • Wenn ich http: // localhost: 8080 / Web / WEB-INF / web.xml drücke, bekomme ich einen 404 (was gut ist)
  • Wenn ich http: // localhost: 8080 / Web /% c0% ae / WEB-INF / web.xml drücke, kann ich die Datei lesen (was offensichtlich nicht in Ordnung ist)

Laut der Servlet-Spezifikation soll der WEB-INF-Ordner nicht öffentlich zugänglich sein, aber irgendwie funktioniert es in diesem Fall. Ich verwende Websphere 5.1 mit Java 1.4, Spring Security 2.0.5 und Struts 1.3. Von dem, was ich gelesen habe, scheint es mit der Codierung verwandt zu sein,% c0% ae ist '.' (Punkt) in UTF-8.

Ich habe dasselbe auf einer anderen Webanwendung versucht, die in einer anderen Umgebung läuft (Tomcat 6 mit Java 7, Spring Security 3 und Spring MVC) und ich konnte das Problem nicht reproduzieren. Diese zweite Webanwendung hat einen Filter, um die Seiten in UTF-8 ( org.springframework.web.filter.CharacterEncodingFilter ) zu kodieren, also habe ich die gleiche Konfiguration in der ersten Webapp versucht, aber das hat nicht funktioniert. Irgendwelche Ideen?

Danke.

    
Emmanuel Ballerini 01.06.2011, 18:05
quelle

5 Antworten

2

Ich werde meine eigene Frage beantworten.
Mit den begrenzten Optionen, die ich hatte, fügte ich in der Spring Security-Konfigurationsdatei eine Sicherheitsregel wie zB

hinzu %Vor%

Es beschränkt den Zugriff auf WEB-INF auf die Rolle des "Nicht-Zugriffs", die tatsächlich keine Rolle spielt. Das verhindert den Zugriff auf alle Benutzer. Es ist nicht ideal, aber wird den Trick tun, bis es ein Upgrade gibt.

    
Emmanuel Ballerini 21.02.2012, 22:13
quelle
1

Sie können beheben oder diese Anfragen verweigern, bevor sie Websphere getroffen, indem sie durch einen anderen Webserver / appserver Proxying oder Web Application Firewalls . Entweder ein anderer Java-Applikationsserver oder möglicherweise so etwas wie Nginx oder Varnish den Trick tun könnte.

Natürlich ist die real Lösung ist zu aktualisieren. Dies ist nur ein Pflaster, das untergraben werden könnte. Es ist wirklich die falsche Art, Sicherheitsprobleme zu "reparieren".

    
Øyvind Skaar 20.02.2012 09:44
quelle
0

Der Filter ändert die Zeichencodierung für den Hauptteil der Anfrage, nicht die URL.

Um die URL-Codierung in Tomcat festzulegen, müssen Sie ein Attribut im & lt; Connector & gt; Element von server.xml:

%Vor%     
Maurice Perry 02.06.2011 00:09
quelle
0

Wenn Sie nicht upgraden können (älteres WebSphere + Java 1.4, autsch!), ist eine mögliche Lösung (eher eine Hacker-Aktion), einen einfachen Filter zu schreiben, der jeder Anfrage zugeordnet ist und die korrekte Zeichensatzkonvertierung durchführt verwirft ungültige Anfragen.

Ich bin sicher, dass Sie mit etwas Graben eine Implementierung finden können, die nach Dingen sucht, an die Sie vielleicht nicht gedacht haben.

Natürlich bleiben noch weitere acht Jahre Sicherheit (ganz zu schweigen von der Produktivität) Probleme.

Hoppla

bemerkte nicht bemerkt nicht, wie alt die Frage ist.

    
Dmitri 20.02.2012 10:09
quelle
0

Dies ist meine Implementierung

%Vor%

Und füge Filter zu meiner web.xml

hinzu %Vor%     
quelle

Tags und Links