Je voudrais pouvoir extraire un fichier tar, de sorte que tous les fichiers extraits soient placés dans un certain répertoire de préfixes. Toute tentative des fichiers tar d'écrire dans des répertoires externes devrait entraîner l'échec de l'extraction.
Comme vous pouvez l'imaginer, c'est pour que je puisse extraire en toute sécurité un fichier tar non approuvé.
Comment puis-je faire cela avec GNU tar
?
Je suis venu avec:
tar --exclude='/*' --exclude='*/../*' --exclude='../*' -xvf untrusted_file.tar
mais je ne suis pas sûr que ce soit assez paranoïaque.
-t
option.Réponses:
Vous n'avez pas du tout besoin de la paranoïa. GNU
tar
- et en fait tout programme bien écrittar
produit au cours des 30 dernières années environ - refusera d'extraire des fichiers dans l'archive tar qui commencent par une barre oblique ou qui contiennent des..
éléments, par défaut.Vous devez vous
tar
efforcer de forcer les programmes modernes à extraire de telles tarballs potentiellement malveillants: GNU et BSD onttar
besoin de l'-P
option pour leur faire désactiver cette protection. Voir la section Noms de fichiers absolus dans le manuel GNU tar.Le
-P
drapeau n'est pas spécifié par POSIX, ¹ cependant, d'autrestar
programmes peuvent avoir différentes manières de faire face à cela. Par exemple, les outils de Schilystar
programme des utilisations-/
et-..
de désactiver ces protections.La seule chose que vous pourriez envisager d'ajouter à une
tar
commande naïve est un-C
indicateur pour la forcer à extraire des choses dans un répertoire temporaire sûr, vous n'avez donc pas àcd
y accéder en premier.A part :
Techniquement, ce
tar
n'est plus du tout spécifié par POSIX. Ils ont essayé de dire au monde informatique Unix que nous devrions utiliserpax
maintenant au lieu detar
etcpio
, mais le monde informatique les a largement ignorés.Il est pertinent de noter ici que la spécification POSIX pour
pax
ne dit pas comment elle doit gérer les barres obliques ou les..
éléments intégrés . Il y a un--insecure
indicateur non standard pour BSDpax
pour supprimer les protections contre les..
éléments de chemin incorporés , mais il n'y a apparemment pas de protection par défaut contre les barres obliques; lapax
page de manuel BSD recommande indirectement d'écrire-s
des règles de substitution pour faire face au risque de chemin absolu.C'est le genre de chose qui se produit lorsqu'une norme de facto reste active alors que la norme de jure est largement ignorée.
la source
pax - portable archive interchange
Awww, comme c'est mignon, POSIX pensant que ça va peut-être remplacer le format d'archive le plus utilisé: PAvec GNU tar, c'est tout simplement
dans un répertoire vide. GNU tar supprime automatiquement les
/
noms des membres principaux lors de l'extraction, sauf indication contraire explicite avec l'--absolute-names
option . GNU tar détecte également quand l'utilisation de../
provoquerait l'extraction d'un fichier en dehors du répertoire toplevel et place ces fichiers dans le répertoire toplevel à la place, par exemple un composantfoo/../../bar/qux
sera extrait commebar/qux
dans le répertoire toplevel plutôt quebar/qux
dans le parent du répertoire toplevel . GNU tar prend également en charge les liens symboliques pointant en dehors du répertoire de haut niveau, par exemplefoo -> ../..
etfoo/bar
ne provoquerabar
pas leur extraction en dehors du répertoire de haut niveau.Notez que cela ne s'applique qu'aux versions (suffisamment récentes de) GNU tar (ainsi qu'à certaines autres implémentations, par exemple * BSD tar et BusyBox tar). Certaines autres implémentations n'ont pas une telle protection.
En raison des liens symboliques, les protections que vous utilisez ne seraient pas suffisantes: l'archive pourrait contenir un lien symbolique pointant vers un répertoire en dehors de l'arborescence et extraire des fichiers dans ce répertoire. Il n'y a aucun moyen de résoudre ce problème uniquement sur la base des noms de membres, vous devez examiner la cible des liens symboliques.
Notez que si vous extrayez dans un répertoire qui contient déjà des liens symboliques, la garantie peut ne plus être valable.
la source
Pour couvrir quelques points, les autres réponses n'ont pas:
Tout d'abord, regardez ce qu'il y a dans le fichier avant de l'extraire:
S'il y a quelque chose dans lequel vous ne faites pas confiance ou que vous souhaitez extraire, n'extrayez pas l'archive tar.
la source