Gefahr Versionsverwaltungen - Apache Subversion

Im der Reihe "Gefahr Versionsverwaltungen" schaue ich mir verschiedene Softwarelösungen zur Versionsverwaltung im Hinblick auf die Verwendung in Verbindung mit Webseiten genauer an. Dabei beschreibe ich, welche Probleme bei dieser Verwendung auftreten können, wie diese ausgenutzt werden und wie man sich gegen diese Schwachstellen schützen kann.
Im ersten Teil geht es nun um Apache Subversion (SVN).

Apache Subversion - Dateien im Web Stammverzeichnis


Subversion eignet sich gut um allein oder zusammen mit anderen Entwicklern eine Webanwendung zu erstellen. Die Versionsverwaltung macht es dabei einfach, Änderungen hinzuzufügen, nachzuvollziehen und auch wieder rückgängig zu machen. Ist die Webseite dann fertig, so muss sie nur noch auf das Livesystem kopiert werden und schon steht dem neuen Webauftritt nichts mehr im Wege.
Doch genau hier können Sicherheitslücken entstehen. Schon durch kleine Unachtsamkeiten kann es passieren, dass nicht nur die eigentlichen Dateien sondern auch alle Dateien aus dem ".svn" Ordner in das Stammverzeichnis des Webservers kopiert werden.
Einige der Dateien, die damit öffentlich aufrufbar werden, haben es im wahrsten Sinne des Wortes in sich.

.svn/entries


Eine Datei, die immer wieder auf verschiedensten Webseiten einsehbar ist, ist die Datei ".svn/entries".
Die Entries-Datei beinhaltet eine Vielzahl an Informationen zu den Dateien des jeweiligen Verzeichnisses. Das sind unter anderem Datei,- und Benutzernamen, Dateiprüfsummen, Zeitstempel und interne Dateipfade.

Hier ein beispielhafter Auszug aus einer solchen Datei, in dem ein Verzeichnis und eine "geheime" Datei zu sehen sind:

9
[...]
uploads
dir

secrets.txt
file

Ein Angreifer kann in einer solchen Datei gefundene Benutzernamen z.B. an anderer Stelle ausprobieren um Zugang zur Webanwendung zu bekommen. Auch Kenntnis über interne Dateipfade können im Rahmen von anderen Sicherheitslücken wie SQL-Injections und Local File Inclusions ausgenutzt werden.
Sollten im Verzeichnis nicht indexierte "geheime" Dateien liegen, so tauchen auch diese hier auf und können dann über den normalen Browser aufgerufen und angesehen werden.

Wenn Sie Subversion verwenden und wissen wollen, ob Ihre Entries-Datei über den Browser aufrufbar ist, geben Sie einfach den Pfad "/.svn/entries" hinter dem Namen Ihrer Internetseite in die Adresszeile ein. Im Fall meiner Webseite also: http://www.nobbd.de/.svn/entries.

Die wc.db Datenbankdatei


Eine weitere und im Regelfall deutlich interessantere Datei, die sich seit Jahren immer wieder auf Webseiten auffinden lässt, ist die ".svn/wc.db". Dabei handelt es sich um eine SQLite Datenbankdatei, die Meta-Informationen zu allen Dateien enthält. Seit der 2011 erschienenen Version 1.7 werden hier die Metadaten aller Unterverzeichnisse in einer einzigen Datei gebündelt.
Neben einer Vielzahl von Informationen über die verschiedenen Benutzer und Änderungen gibt es eine weitere Schwachstelle.

.svn/pristine/*


In dem "pristine" Ordner befinden sich Kopien der verwalteten Datei im Klartext. Die Dateipfade basieren Dabei auf Hashes (idR. SHA1) der Dateiinhalte.
Für den Hash "eb1ef21669d07a786e1f3a840923ddf838da5110" sieht der Pfad zur Datei z.B. so aus:

.svn/pristine/eb/eb1ef21669d07a786e1f3a840923ddf838da5110.svn-base

Wobei das Unterverzeichnis jeweils die ersten zwei Zeichen des Hashes sind.

Die Pfade können auch mit der folgenden Abfrage aus der Datenbankdatei erstellt werden können:

SELECT local_relpath, ".svn/pristine/" || substr(checksum,7,2) || "/" || substr(checksum,7) || ".svn-base" as link from NODES;


Wir sehen, dass die Dateiendung für alle Dateien ".svn-base" ist. Handelt es sich also ursprünglich um eine PHP Datei, so wird diese beim Aufruf über den SVN-Link nicht wie gehabt vorher vom Server interpretiert sondern einfach als Klartext ausgegeben.
Sind hier Passwörter oder API-Zugangstoken enthalten, so sind auch diese einfach sichtbar.
Auch Dateien wie ".htpasswd" oder Konfigurationsdateien können so einfach über den Browser eingesehen werden.

Dateien entfernen und Zugriff blockieren


Im Idealfall sollten der SVN Ordner und alle Dateien gar nicht im Stammverzeichnis des Webservers liegen und somit nicht über den Browser aufrufbar sein.
Damit im Fehlerfall nicht oben genannte Probleme auftreten, kann aber die folgende Regel zur .htaccess Datei hinzugefügt werden:


RewriteEngine On
...
RewriteRule ^(.*/)?\.svn/ / [F,L]


Dadurch wird der Zugriff auf alle Dateien im Ordner ".svn" und allen Unterordnern verhindert.

Alternativ kann man den Zugriff über die Apache-Konfigurationsdatei verhindern:


<DirectoryMatch .*\.svn/.*>
Deny From All
</DirectoryMatch>

Denis Werner
20.07.2015

zurück