Me gustaría poder extraer un archivo tar, de modo que todos los archivos extraídos se coloquen en un determinado directorio de prefijos. Cualquier intento de los archivos tar para escribir en directorios externos debería hacer que la extracción falle.
Como puede imaginar, esto es para que pueda extraer de forma segura un archivo tar no confiable.
¿Cómo puedo hacer esto con GNU tar
?
Se me ocurrio:
tar --exclude='/*' --exclude='*/../*' --exclude='../*' -xvf untrusted_file.tar
pero no estoy seguro de que esto sea lo suficientemente paranoico.
-t
opción.Respuestas:
No necesitas la paranoia en absoluto. GNU
tar
, y de hecho cualquier programa bien escritotar
producido en los últimos 30 años más o menos, se negará a extraer archivos en el tarball que comiencen con una barra o que contengan..
elementos, por defecto.tar
Debe esforzarse para obligar a los programas modernos a extraer tales tarballs potencialmente maliciosos: tanto GNU como BSDtar
necesitan la-P
opción para que deshabiliten esta protección. Consulte la sección Nombres de archivos absolutos en el manual de GNU tar.Sin
-P
embargo, POSIX no especifica el indicador, por lo que otrostar
programas pueden tener diferentes formas de lidiar con esto. Por ejemplo, las herramientas Schilystar
del programa de usos-/
y-..
para desactivar estas protecciones.Lo único que podría considerar agregar a un
tar
comando ingenuo es una-C
bandera para forzarlo a extraer cosas en un directorio temporal seguro, para que no tenga que hacerlocd
primero.A un lado :
Técnicamente,
tar
POSIX ya no lo especifica. Intentaron decirle al mundo informático de Unix que deberíamos estar usandopax
ahora en lugar detar
ycpio
, pero el mundo informático los ignoró en gran medida.Es relevante tener en cuenta que la especificación POSIX para
pax
no dice cómo debe manejar las barras inclinadas o los..
elementos incrustados . Hay un--insecure
indicador no estándar para que BSDpax
suprima las protecciones contra..
elementos de ruta incrustados , pero aparentemente no hay una protección predeterminada contra las barras diagonales principales; lapax
página de manual de BSD recomienda indirectamente escribir-s
reglas de sustitución para tratar el riesgo de ruta absoluto.Ese es el tipo de cosas que suceden cuando un estándar de facto permanece en uso activo mientras que el estándar de jure se ignora en gran medida.
fuente
pax - portable archive interchange
Awww, qué lindo, POSIX pensando que va a reemplazar posiblemente el formato de archivo más utilizado: PCon GNU tar, es simplemente
en un directorio vacio GNU tar elimina automáticamente
/
los nombres de los miembros principales cuando se extrae, a menos que explícitamente no se indique lo contrario con la--absolute-names
opción . GNU tar también detecta cuándo el uso de../
haría que un archivo se extrajera fuera del directorio de nivel superior y coloca esos archivos en el directorio de nivel superior, por ejemplo, un componentefoo/../../bar/qux
se extraerá comobar/qux
en el directorio de nivel superiorbar/qux
en lugar del padre del directorio de nivel superior . GNU tar también se encarga de los enlaces simbólicos que apuntan fuera del directorio de nivel superior, por ejemplo,foo -> ../..
yfoo/bar
no harábar
que se extraiga fuera del directorio de nivel superior.Tenga en cuenta que esto solo se aplica a (versiones suficientemente recientes de) GNU tar (así como a algunas otras implementaciones, por ejemplo, * BSD tar y BusyBox tar). Algunas otras implementaciones no tienen dicha protección.
Debido a los enlaces simbólicos, las protecciones que usa no serían suficientes: el archivo podría contener un enlace simbólico que apunta a un directorio fuera del árbol y extraer archivos en ese directorio. No hay forma de resolver ese problema basándose únicamente en los nombres de los miembros, debe examinar el objetivo de los enlaces simbólicos.
Tenga en cuenta que si está extrayendo en un directorio que ya contiene enlaces simbólicos, es posible que la garantía ya no se mantenga.
fuente
Para cubrir algunos puntos, las otras respuestas no lo han hecho:
Primero, mira lo que hay en el archivo antes de extraerlo:
Si hay algo allí en lo que no confías o no quieres extraer, no extraigas el tarball.
fuente