Ich möchte in der Lage sein, eine TAR-Datei zu extrahieren, so dass alle extrahierten Dateien unter einem bestimmten Präfixverzeichnis abgelegt werden. Jeder Versuch der tar-Dateien, in externe Verzeichnisse zu schreiben, sollte dazu führen, dass die Extraktion fehlschlägt.
Wie Sie sich vielleicht vorstellen können, kann ich auf diese Weise eine nicht vertrauenswürdige TAR-Datei sicher extrahieren.
Wie kann ich das mit GNU machen tar
?
Ich hatte die Idee dass:
tar --exclude='/*' --exclude='*/../*' --exclude='../*' -xvf untrusted_file.tar
aber ich bin nicht sicher, ob das paranoid genug ist.
-t
Option überprüfen, was in der TAR-Datei enthalten ist .Antworten:
Sie brauchen die Paranoia überhaupt nicht. GNU
tar
- und in der Tat jede gut geschriebentar
Programm, das in den letzten 30 Jahren oder so erstellt wurde - wird sich..
standardmäßig weigern, Dateien im Tarball zu extrahieren, die mit einem Schrägstrich beginnen oder Elemente enthalten .Sie müssen sich sehr viel
tar
Mühe geben , um moderne Programme dazu zu zwingen , solche potenziell bösartigen Tarballs zu extrahieren: Sowohl GNU als auch BSDtar
benötigen die-P
Option, um diesen Schutz zu deaktivieren. Siehe den Abschnitt Absolute Dateinamen im GNU tar-Handbuch.Das
-P
Flag wird von POSIX jedoch nicht angegeben ¹, sodass anderetar
Programme möglicherweise andere Möglichkeiten haben , damit umzugehen. Zum Beispiel werden die Worte Schily Werkzeugestar
Programm Anwendungen-/
und-..
, um diese Schutzfunktionen zu deaktivieren.Das einzige, was Sie in Betracht ziehen könnten, um einen naiven
tar
Befehl zu ergänzen, ist ein-C
Flag, das ihn zwingt, Dinge in ein sicheres temporäres Verzeichnis zu extrahieren, sodass Sie es nichtcd
zuerst tun müssen .Nebenbei :
Technisch
tar
wird von POSIX gar nicht mehr angegeben. Sie versuchten der Unix-Computerwelt mitzuteilen, dass wirpax
jetzt stattdessen verwenden solltentar
und verwenden solltencpio
, aber die Computerwelt ignorierte sie weitgehend.Hierbei ist zu beachten, dass in der POSIX-Spezifikation für
pax
nicht festgelegt ist, wie führende Schrägstriche oder eingebettete..
Elemente behandelt werden sollen. Es gibt ein Nicht-Standard---insecure
Flag für BSDpax
, um Schutzmaßnahmen gegen eingebettete Pfadelemente zu unterdrücken..
, aber anscheinend gibt es keinen Standardschutz gegen führende Schrägstriche. Die BSD-pax
Manpage empfiehlt indirekt,-s
Substitutionsregeln zu schreiben , um das absolute Pfadrisiko zu behandeln.So etwas passiert, wenn ein De-facto-Standard weiterhin aktiv verwendet wird, während der De-jure-Standard weitgehend ignoriert wird.
quelle
pax - portable archive interchange
Oh, wie süß, POSIX denkt, es wird möglicherweise das am häufigsten verwendete Archivformat ersetzen: PMit GNU Tar ist es einfach
in einem leeren Verzeichnis. GNU tar entfernt
/
beim Extrahieren automatisch die Namen der führenden Mitglieder, es sei denn, mit der--absolute-names
Option wird ausdrücklich nichts anderes angegeben . GNU Tar erkennt auch, wenn die Verwendung von../
einer Datei extrahiert außerhalb des Toplevel - Verzeichnis und legt die Dateien im Hauptverzeichnis verursachen würde , anstatt sein, zum Beispiel eine Komponentefoo/../../bar/qux
als extrahiert werdenbar/qux
in der Top - Level - Verzeichnis anstattbar/qux
im Stamm des Toplevel - Verzeichnis . GNU tar kümmert sich auch um symbolische Links, die außerhalb des Toplevel-Verzeichnisses verweisen,foo -> ../..
undfoo/bar
wird nicht dazu veranlasstbar
, außerhalb des Toplevel-Verzeichnisses extrahiert zu werden.Beachten Sie, dass dies nur für (ausreichend aktuelle Versionen von) GNU tar gilt (sowie für einige andere Implementierungen, z. B. * BSD tar und BusyBox tar). Einige andere Implementierungen haben keinen solchen Schutz.
Aufgrund von symbolischen Links würden die von Ihnen verwendeten Schutzfunktionen nicht ausreichen: Das Archiv könnte einen symbolischen Link enthalten, der auf ein Verzeichnis außerhalb des Baums verweist, und Dateien in diesem Verzeichnis extrahieren. Es gibt keine Möglichkeit, dieses Problem allein anhand der Mitgliedsnamen zu lösen. Sie müssen das Ziel symbolischer Links untersuchen.
Beachten Sie, dass die Garantie möglicherweise nicht mehr gültig ist, wenn Sie in ein Verzeichnis extrahieren, das bereits symbolische Links enthält.
quelle
Um ein paar Punkte abzudecken, haben die anderen Antworten nicht:
Schauen Sie zuerst nach, was in der Datei enthalten ist, bevor Sie sie extrahieren:
Wenn es irgendetwas gibt, dem Sie nicht vertrauen oder das Sie extrahieren möchten, extrahieren Sie nicht das Archiv.
quelle