Informationsoffenlegung durch Verzeichnisauflistung
Beschreibung
Informationsoffenlegung durch Verzeichnisauflistung ist eine Schwachstelle, bei der eine Verzeichnisauflistung offengelegt wird, die Informationen über die Webanwendung preisgibt oder Zugriff auf Dateien ermöglicht, die nicht öffentlich zugänglich sein sollten. Wenn Webserver so konfiguriert sind, dass sie Verzeichnisinhalte anzeigen, wenn keine Standard-Indexdatei existiert, können Angreifer die Verzeichnisstruktur durchsuchen, versteckte Dateien entdecken, auf Backup-Dateien zugreifen, Konfigurationsdateien einsehen und die Anwendungsarchitektur verstehen. Diese Informationen erleichtern weitere Angriffe, indem Dateinamen, Strukturen und potenziell sensible Daten offengelegt werden.
Risiko
Verzeichnisauflistungs-Offenlegung birgt erhebliche Sicherheitsrisiken. Angreifer können sensible Dateien wie Konfigurationsdateien, Backup-Dateien, Datenbank-Dumps, Log-Dateien und Quellcode entdecken. Dateinamenmuster offenbaren Anwendungsstruktur und potenziell Versionsinformationen. Versteckte administrative Schnittstellen oder Entwicklungswerkzeuge können exponiert werden. Backup-Dateien (file.php.bak, file.php~) enthalten oft Quellcode oder sensible Daten. Temporäre Dateien und Upload-Verzeichnisse können Benutzerdaten oder ausnutzbare Inhalte enthalten. In Kombination mit anderen Schwachstellen ermöglichen Verzeichnisinformationen gezielte Angriffe auf spezifische Dateien oder Anwendungskomponenten.
Lösung
Deaktivieren Sie die Verzeichnisauflistung in der Webserver-Konfiguration global und pro Verzeichnis. Verwenden Sie explizite Index-Dateien (index.html, index.php) in allen Verzeichnissen. Konfigurieren Sie Webserver so, dass sie 403 Forbidden oder 404 Not Found für Verzeichnisse ohne Index-Dateien zurückgeben. Entfernen oder beschränken Sie den Zugriff auf Backup-Dateien, temporäre Dateien und Entwicklungsartefakte. Platzieren Sie sensible Dateien außerhalb des Web-Root. Implementieren Sie ordnungsgemäße Zugriffskontrollen für Dateiverzeichnisse. Verwenden Sie Web Application Firewalls, um Verzeichnisdurchlauf-Versuche zu blockieren. Scannen Sie Webserver regelmäßig mit Sicherheitstools auf exponierte Verzeichnisse.
Häufige Auswirkungen
| Auswirkung | Details |
|---|---|
| Vertraulichkeit | Bereich: Vertraulichkeit Anwendungsdaten lesen - Verzeichnisauflistungen legen Dateinamen, Strukturen und potenziell Dateiinhalte offen und enthüllen sensible Anwendungsinformationen und Daten für Angreifer. |
| Vertraulichkeit | Bereich: Vertraulichkeit Dateien oder Verzeichnisse lesen - Angreifer können Dateien entdecken und darauf zugreifen, die nicht öffentlich sein sollten, einschließlich Backup-Dateien, Konfigurationsdateien und Quellcode. |
Beispielcode
Verwundbarer Code
# Verwundbar: Apache-Konfiguration mit aktivierter Verzeichnisauflistung
# /etc/apache2/sites-available/example.conf
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
# Verwundbar: Indexes-Option aktiviert Verzeichnisauflistung
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Verwundbar: Keine Einschränkungen für sensible Verzeichnisse
<Directory /var/www/html/uploads>
Options Indexes
# Jeder kann hochgeladene Dateien durchsuchen
</Directory>
# Verwundbar: Backup-Verzeichnis exponiert
<Directory /var/www/html/backup>
Options Indexes
# Datenbank-Dumps, Konfigurations-Backups sichtbar
</Directory>
</VirtualHost>
# Verwundbar: Nginx-Konfiguration mit aktiviertem autoindex
server {
listen 80;
server_name example.com;
root /var/www/html;
# Verwundbar: Globales autoindex aktiviert
autoindex on;
location /uploads/ {
autoindex on;
# Listet alle hochgeladenen Dateien
}
location /logs/ {
autoindex on;
# Anwendungslogs exponiert
}
}
# Verwundbar: Python-Webserver mit Verzeichnisauflistung
from http.server import HTTPServer, SimpleHTTPRequestHandler
import os
class VerwundbarerHandler(SimpleHTTPRequestHandler):
def do_GET(self):
path = self.translate_path(self.path)
if os.path.isdir(path):
# Verwundbar: Listet Verzeichnisinhalte
return self.list_directory(path)
return super().do_GET()
if __name__ == '__main__':
server = HTTPServer(('0.0.0.0', 8000), VerwundbarerHandler)
server.serve_forever()
Lösungscode
# Behoben: Apache-Konfiguration ohne Verzeichnisauflistung
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
# Behoben: Verzeichnisauflistung global deaktivieren
<Directory /var/www/html>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# Behoben: Zugriff auf sensible Dateimuster blockieren
<FilesMatch "\.(bak|old|orig|save|swp|tmp|~)$">
Require all denied
</FilesMatch>
# Behoben: Versteckte Dateien blockieren
<FilesMatch "^\.">
Require all denied
</FilesMatch>
# Behoben: Backup-Verzeichnis schützen
<Directory /var/www/html/backup>
Require all denied
</Directory>
</VirtualHost>
# Behoben: Nginx-Konfiguration ohne Verzeichnisauflistung
server {
listen 80;
server_name example.com;
root /var/www/html;
# Behoben: autoindex global deaktivieren
autoindex off;
# Behoben: Sensible Dateien blockieren
location ~ /\. {
deny all;
return 404;
}
location ~ \.(bak|old|sql|log)$ {
deny all;
return 404;
}
location /backup/ {
deny all;
return 404;
}
}
# Behoben: Python-Webserver ohne Verzeichnisauflistung
from http.server import HTTPServer, BaseHTTPRequestHandler
import os
class SichererHandler(BaseHTTPRequestHandler):
WEB_ROOT = '/var/www/html/public'
ALLOWED_EXTENSIONS = {'.html', '.css', '.js', '.png', '.jpg', '.pdf'}
def do_GET(self):
path = os.path.realpath(os.path.join(self.WEB_ROOT, self.path.lstrip('/')))
# Behoben: Pfad innerhalb Web-Root prüfen
if not path.startswith(os.path.realpath(self.WEB_ROOT)):
self.send_error(403, 'Forbidden')
return
# Behoben: Keine Verzeichnisauflistung
if os.path.isdir(path):
self.send_error(403, 'Verzeichnisauflistung nicht erlaubt')
return
# Behoben: Dateierweiterung prüfen
ext = os.path.splitext(path)[1].lower()
if ext not in self.ALLOWED_EXTENSIONS:
self.send_error(403, 'Dateityp nicht erlaubt')
return
# Datei bereitstellen...
CVE-Beispiele
- CVE-2021-41773: Apache HTTP Server Pfaddurchlauf- und Verzeichnisauflistungs-Schwachstelle.
- CVE-2020-5410: Spring Cloud Config Server ermöglichte Verzeichnisdurchlauf.
- CVE-2019-3799: Spring Cloud Config Server Datei-Offenlegungs-Schwachstelle.
Referenzen
- MITRE Corporation. "CWE-548: Exposure of Information Through Directory Listing." https://cwe.mitre.org/data/definitions/548.html
- OWASP. "Testing for Directory Traversal/File Include."
- Apache. "Apache Module mod_autoindex - Security Considerations."