Mögliche Sicherheitsprobleme mit PHP's ZipArchive

9

Ich möchte Mitgliedern die Möglichkeit geben, Inhalte mit einer Zip-Datei hochzuladen. Nach dem Hochladen möchte ich die ZipArchive-Klasse von PHP verwenden, um den Inhalt der Zip-Datei in ein Verzeichnis zu dekomprimieren und dann die Dateien in unser System zu verschieben.

Ich bin jedoch besorgt über die möglichen Sicherheitsrisiken, und ich kann auf php.net keine Dokumentation finden. Das erste (na ja, das einzige) Risiko, das einem einfällt, ist jemand, der eine Zip-Datei mit relativen Pfaden wie "../../etc/passwd" erstellt (wenn sie annehmen, dass ich die Datei in / tmp / somedir dekomprimiere).

Ich habe es wirklich schwer, einen relativen Pfad in einer Zip-Datei zu erstellen, so dass ich nicht testen kann, ob so etwas möglich ist. Ich finde auch keine Möglichkeit, den Inhalt der Zip-Datei mit ZipArchive zu extrahieren und Verzeichnisse ignorieren zu lassen (Dekomprimiere alle Dateien, aber erstelle keine Verzeichnisstruktur innerhalb der ZIP).

Kann mir jemand sagen, ob ein solcher Exploit möglich ist und / oder wie kann ich die Verzeichnisstruktur in einer Zip-Datei mit ZipArchive ignorieren?

    
mellowsoon 12.07.2011, 15:47
quelle

4 Antworten

0

Am Ende gehe ich mit Pekkas Lösung, das Kommandozeilen-Unzip-Dienstprogramm zu verwenden. Es bietet Schalter zum Ignorieren von Verzeichnissen in der Zip-Datei. Die Bedenken, auf die andere hingewiesen haben, sind hier kein Thema. Sobald die Dateien entpackt sind, fügen wir sie dem System mit dem gleichen Prozess wie unsere regulären Uploads hinzu, was bedeutet, dass jede Datei mit den Sicherheitsmaßnahmen überprüft wird, die wir bereits eingerichtet haben.

    
mellowsoon 12.07.2011, 18:42
quelle
2

Interessante Frage, aber ich fordere Sie auf, dies anders zu machen. Ich würde empfehlen, dass Sie Ihren Web-Prozess mit den wenigsten Privilegien in einem Chroot-Gefängnis ausführen. Angenommen, Sie tun das, das Schlimmste, was passieren kann, ist, dass Ihre Website unkenntlich gemacht wird, und Sie dann eine Sicherungskopie wiederherstellen und einige forensische Untersuchungen durchführen, um diese spezifische Lücke zu schließen. Neue Löcher werden ständig entdeckt, es wird Ihnen sehr schwer fallen, Ihre Website nach Ahnungen wie diesen vollständig abzusichern. Die Minimierung der Sandbox des Angreifers ist sehr weitreichend.

    
Josh 12.07.2011 17:59
quelle
2

Ich hatte die gleichen Bedenken und habe mir den Quelltext von PHP 5.3 angeschaut, wo ich folgendes gefunden habe:

%Vor%

Sieht gut aus für mich. Checkout PHP und siehe ./ext/zip/php_zip.c für Details.

    
adonig 03.01.2014 00:54
quelle
1

Sie müssen sicherstellen, dass die extrahierten Inhalte nicht direkt von Ihrem Anwendungsserver bereitgestellt werden. Wenn also jemand eine PHP-Datei in seinem Archiv hat, kann er sie nicht über Ihren Webserver ausführen.

Eine andere Sache ist, dass Sie Dinge davon abhalten sollten, in benutzergenerierten Inhalten enthalten zu sein. Aber dies sollte auch ohne Zip-Archive in Betracht gezogen werden.

    
fyr 12.07.2011 15:53
quelle

Tags und Links