Blog

Comprender el error de recorrido en el módulo tarfile de Python

Laura Verheyde
Publicado el 03 de octubre de 2022

Recientemente, un equipo de investigadores de seguridad ha anunciado el hallazgo de un fallo de hace quince años en la funcionalidad de extracción de archivos tar de Python. La vulnerabilidad fue revelada por primera vez en 2007 y rastreada como CVE-2007-4559. Se añadió una nota a la documentación oficial de Python, pero el fallo en sí quedó sin parchear.

Esta vulnerabilidad podría afectar a miles de proyectos de software y, sin embargo, mucha gente no está familiarizada con la situación o con cómo manejarla. Por eso, aquí en Secure Code Warriorte damos la oportunidad de simular la explotación de esta vulnerabilidad para que veas el impacto de primera mano y adquieras experiencia práctica en la mecánica de este error persistente, ¡para que puedas proteger mejor tu aplicación!

Pruebe ahora la Misión simulada.

La vulnerabilidad: el cruce de rutas durante la extracción de archivos tar

El cruce de rutas o directorios se produce cuando se utiliza una entrada de usuario no saneada para construir una ruta de archivo, lo que permite a un atacante acceder y sobrescribir archivos, e incluso ejecutar código arbitrario. 

La vulnerabilidad existe en el módulo tarfile de Python. Un archivo tar (archivo de cinta) es un archivo único, llamado archivo. Agrupa múltiples archivos junto con sus metadatos, y normalmente se reconoce por tener la extensión .tar.gz o .tgz. Cada miembro del archivo puede ser representado por un objeto TarInfo, que contiene metadatos, como el nombre del archivo, la hora de modificación, la propiedad, etc.

El riesgo surge de la capacidad de los archivos para ser extraídos de nuevo.

Al ser extraído, cada miembro necesita una ruta para ser escrito. Esta ubicación se crea uniendo la ruta base con el nombre del archivo: 

Fragmento de Python Tarfile.py


Una vez creada esta ruta, se pasa a la función tarfile.extract o tarfile.extractall para realizar la extracción: 

Fragmento de Python Tarfile.py

El problema aquí es la falta de sanitización del nombre del archivo. Un atacante podría cambiar el nombre de los archivos para incluir caracteres de cruce de ruta, como la barra de puntos (../), lo que haría que el archivo saliera del directorio en el que debía estar y sobrescribiera archivos arbitrarios. Esto podría llevar eventualmente a la ejecución remota de código, lo cual es propicio para su explotación. 

La vulnerabilidad aparece en otros escenarios, si se sabe identificar. Además del manejo de archivos tar por parte de Python, la vulnerabilidad existe en la extracción de archivos zip. Puede que estés familiarizado con esto bajo otro nombre, como la vulnerabilidad zip slip, ¡que se ha manifestado en otros lenguajes además de Python!

ENLACE A LA MISIÓN 

¿Cómo se puede mitigar el riesgo?

A pesar de que la vulnerabilidad se conoce desde hace años, los mantenedores de Python consideran que la funcionalidad de extracción hace lo que se supone que debe hacer. En este caso, algunos pueden decir que "es una característica, no un error". Por desgracia, los desarrolladores no siempre pueden evitar extraer archivos tar o zip de una fuente desconocida. Depende de ellos sanear la entrada no confiable para prevenir las vulnerabilidades de cruce de rutas como parte de las prácticas de desarrollo seguro.

¿Quiere saber más sobre cómo escribir código seguro y mitigar los riesgos con Python?

Pruebe gratis nuestro reto de Python.

Si está interesado en obtener más directrices de codificación gratuitas, consulte Secure Code Coach, que le ayudará a mantenerse al tanto de las prácticas de codificación seguras.

Ver recurso
Ver recurso

Recientemente, un equipo de investigadores de seguridad ha anunciado el hallazgo de un fallo de hace quince años en la funcionalidad de extracción de archivos tar de Python. La vulnerabilidad fue revelada por primera vez en 2007 y rastreada como CVE-2007-4559. Se añadió una nota a la documentación oficial de Python, pero el fallo en sí quedó sin parchear.

¿Quiere saber más?

Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.

Reservar una demostración
Compartir en:
Autor
Laura Verheyde
Publicado el 03 de octubre de 2022

Laura Verheyde es una desarrolladora de software en Secure Code Warrior centrada en la investigación de vulnerabilidades y la creación de contenidos para Missions y Coding labs.

Compartir en:

Recientemente, un equipo de investigadores de seguridad ha anunciado el hallazgo de un fallo de hace quince años en la funcionalidad de extracción de archivos tar de Python. La vulnerabilidad fue revelada por primera vez en 2007 y rastreada como CVE-2007-4559. Se añadió una nota a la documentación oficial de Python, pero el fallo en sí quedó sin parchear.

Esta vulnerabilidad podría afectar a miles de proyectos de software y, sin embargo, mucha gente no está familiarizada con la situación o con cómo manejarla. Por eso, aquí en Secure Code Warriorte damos la oportunidad de simular la explotación de esta vulnerabilidad para que veas el impacto de primera mano y adquieras experiencia práctica en la mecánica de este error persistente, ¡para que puedas proteger mejor tu aplicación!

Pruebe ahora la Misión simulada.

La vulnerabilidad: el cruce de rutas durante la extracción de archivos tar

El cruce de rutas o directorios se produce cuando se utiliza una entrada de usuario no saneada para construir una ruta de archivo, lo que permite a un atacante acceder y sobrescribir archivos, e incluso ejecutar código arbitrario. 

La vulnerabilidad existe en el módulo tarfile de Python. Un archivo tar (archivo de cinta) es un archivo único, llamado archivo. Agrupa múltiples archivos junto con sus metadatos, y normalmente se reconoce por tener la extensión .tar.gz o .tgz. Cada miembro del archivo puede ser representado por un objeto TarInfo, que contiene metadatos, como el nombre del archivo, la hora de modificación, la propiedad, etc.

El riesgo surge de la capacidad de los archivos para ser extraídos de nuevo.

Al ser extraído, cada miembro necesita una ruta para ser escrito. Esta ubicación se crea uniendo la ruta base con el nombre del archivo: 

Fragmento de Python Tarfile.py


Una vez creada esta ruta, se pasa a la función tarfile.extract o tarfile.extractall para realizar la extracción: 

Fragmento de Python Tarfile.py

El problema aquí es la falta de sanitización del nombre del archivo. Un atacante podría cambiar el nombre de los archivos para incluir caracteres de cruce de ruta, como la barra de puntos (../), lo que haría que el archivo saliera del directorio en el que debía estar y sobrescribiera archivos arbitrarios. Esto podría llevar eventualmente a la ejecución remota de código, lo cual es propicio para su explotación. 

La vulnerabilidad aparece en otros escenarios, si se sabe identificar. Además del manejo de archivos tar por parte de Python, la vulnerabilidad existe en la extracción de archivos zip. Puede que estés familiarizado con esto bajo otro nombre, como la vulnerabilidad zip slip, ¡que se ha manifestado en otros lenguajes además de Python!

ENLACE A LA MISIÓN 

¿Cómo se puede mitigar el riesgo?

A pesar de que la vulnerabilidad se conoce desde hace años, los mantenedores de Python consideran que la funcionalidad de extracción hace lo que se supone que debe hacer. En este caso, algunos pueden decir que "es una característica, no un error". Por desgracia, los desarrolladores no siempre pueden evitar extraer archivos tar o zip de una fuente desconocida. Depende de ellos sanear la entrada no confiable para prevenir las vulnerabilidades de cruce de rutas como parte de las prácticas de desarrollo seguro.

¿Quiere saber más sobre cómo escribir código seguro y mitigar los riesgos con Python?

Pruebe gratis nuestro reto de Python.

Si está interesado en obtener más directrices de codificación gratuitas, consulte Secure Code Coach, que le ayudará a mantenerse al tanto de las prácticas de codificación seguras.

Ver recurso
Ver recurso

Rellene el siguiente formulario para descargar el informe

Nos gustaría contar con su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación segura. Siempre trataremos sus datos personales con el máximo cuidado y nunca los venderemos a otras empresas con fines de marketing.

Enviar
Para enviar el formulario, habilite las cookies "Analytics". Siéntase libre de desactivarlas de nuevo una vez que haya terminado.

Recientemente, un equipo de investigadores de seguridad ha anunciado el hallazgo de un fallo de hace quince años en la funcionalidad de extracción de archivos tar de Python. La vulnerabilidad fue revelada por primera vez en 2007 y rastreada como CVE-2007-4559. Se añadió una nota a la documentación oficial de Python, pero el fallo en sí quedó sin parchear.

Esta vulnerabilidad podría afectar a miles de proyectos de software y, sin embargo, mucha gente no está familiarizada con la situación o con cómo manejarla. Por eso, aquí en Secure Code Warriorte damos la oportunidad de simular la explotación de esta vulnerabilidad para que veas el impacto de primera mano y adquieras experiencia práctica en la mecánica de este error persistente, ¡para que puedas proteger mejor tu aplicación!

Pruebe ahora la Misión simulada.

La vulnerabilidad: el cruce de rutas durante la extracción de archivos tar

El cruce de rutas o directorios se produce cuando se utiliza una entrada de usuario no saneada para construir una ruta de archivo, lo que permite a un atacante acceder y sobrescribir archivos, e incluso ejecutar código arbitrario. 

La vulnerabilidad existe en el módulo tarfile de Python. Un archivo tar (archivo de cinta) es un archivo único, llamado archivo. Agrupa múltiples archivos junto con sus metadatos, y normalmente se reconoce por tener la extensión .tar.gz o .tgz. Cada miembro del archivo puede ser representado por un objeto TarInfo, que contiene metadatos, como el nombre del archivo, la hora de modificación, la propiedad, etc.

El riesgo surge de la capacidad de los archivos para ser extraídos de nuevo.

Al ser extraído, cada miembro necesita una ruta para ser escrito. Esta ubicación se crea uniendo la ruta base con el nombre del archivo: 

Fragmento de Python Tarfile.py


Una vez creada esta ruta, se pasa a la función tarfile.extract o tarfile.extractall para realizar la extracción: 

Fragmento de Python Tarfile.py

El problema aquí es la falta de sanitización del nombre del archivo. Un atacante podría cambiar el nombre de los archivos para incluir caracteres de cruce de ruta, como la barra de puntos (../), lo que haría que el archivo saliera del directorio en el que debía estar y sobrescribiera archivos arbitrarios. Esto podría llevar eventualmente a la ejecución remota de código, lo cual es propicio para su explotación. 

La vulnerabilidad aparece en otros escenarios, si se sabe identificar. Además del manejo de archivos tar por parte de Python, la vulnerabilidad existe en la extracción de archivos zip. Puede que estés familiarizado con esto bajo otro nombre, como la vulnerabilidad zip slip, ¡que se ha manifestado en otros lenguajes además de Python!

ENLACE A LA MISIÓN 

¿Cómo se puede mitigar el riesgo?

A pesar de que la vulnerabilidad se conoce desde hace años, los mantenedores de Python consideran que la funcionalidad de extracción hace lo que se supone que debe hacer. En este caso, algunos pueden decir que "es una característica, no un error". Por desgracia, los desarrolladores no siempre pueden evitar extraer archivos tar o zip de una fuente desconocida. Depende de ellos sanear la entrada no confiable para prevenir las vulnerabilidades de cruce de rutas como parte de las prácticas de desarrollo seguro.

¿Quiere saber más sobre cómo escribir código seguro y mitigar los riesgos con Python?

Pruebe gratis nuestro reto de Python.

Si está interesado en obtener más directrices de codificación gratuitas, consulte Secure Code Coach, que le ayudará a mantenerse al tanto de las prácticas de codificación seguras.

Acceso a recursos

Haga clic en el siguiente enlace y descargue el PDF de este recurso.

Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.

Ver el informeReservar una demostración
Descargar PDF
Ver recurso
Compartir en:
¿Quiere saber más?

Compartir en:
Autor
Laura Verheyde
Publicado el 03 de octubre de 2022

Laura Verheyde es una desarrolladora de software en Secure Code Warrior centrada en la investigación de vulnerabilidades y la creación de contenidos para Missions y Coding labs.

Compartir en:

Recientemente, un equipo de investigadores de seguridad ha anunciado el hallazgo de un fallo de hace quince años en la funcionalidad de extracción de archivos tar de Python. La vulnerabilidad fue revelada por primera vez en 2007 y rastreada como CVE-2007-4559. Se añadió una nota a la documentación oficial de Python, pero el fallo en sí quedó sin parchear.

Esta vulnerabilidad podría afectar a miles de proyectos de software y, sin embargo, mucha gente no está familiarizada con la situación o con cómo manejarla. Por eso, aquí en Secure Code Warriorte damos la oportunidad de simular la explotación de esta vulnerabilidad para que veas el impacto de primera mano y adquieras experiencia práctica en la mecánica de este error persistente, ¡para que puedas proteger mejor tu aplicación!

Pruebe ahora la Misión simulada.

La vulnerabilidad: el cruce de rutas durante la extracción de archivos tar

El cruce de rutas o directorios se produce cuando se utiliza una entrada de usuario no saneada para construir una ruta de archivo, lo que permite a un atacante acceder y sobrescribir archivos, e incluso ejecutar código arbitrario. 

La vulnerabilidad existe en el módulo tarfile de Python. Un archivo tar (archivo de cinta) es un archivo único, llamado archivo. Agrupa múltiples archivos junto con sus metadatos, y normalmente se reconoce por tener la extensión .tar.gz o .tgz. Cada miembro del archivo puede ser representado por un objeto TarInfo, que contiene metadatos, como el nombre del archivo, la hora de modificación, la propiedad, etc.

El riesgo surge de la capacidad de los archivos para ser extraídos de nuevo.

Al ser extraído, cada miembro necesita una ruta para ser escrito. Esta ubicación se crea uniendo la ruta base con el nombre del archivo: 

Fragmento de Python Tarfile.py


Una vez creada esta ruta, se pasa a la función tarfile.extract o tarfile.extractall para realizar la extracción: 

Fragmento de Python Tarfile.py

El problema aquí es la falta de sanitización del nombre del archivo. Un atacante podría cambiar el nombre de los archivos para incluir caracteres de cruce de ruta, como la barra de puntos (../), lo que haría que el archivo saliera del directorio en el que debía estar y sobrescribiera archivos arbitrarios. Esto podría llevar eventualmente a la ejecución remota de código, lo cual es propicio para su explotación. 

La vulnerabilidad aparece en otros escenarios, si se sabe identificar. Además del manejo de archivos tar por parte de Python, la vulnerabilidad existe en la extracción de archivos zip. Puede que estés familiarizado con esto bajo otro nombre, como la vulnerabilidad zip slip, ¡que se ha manifestado en otros lenguajes además de Python!

ENLACE A LA MISIÓN 

¿Cómo se puede mitigar el riesgo?

A pesar de que la vulnerabilidad se conoce desde hace años, los mantenedores de Python consideran que la funcionalidad de extracción hace lo que se supone que debe hacer. En este caso, algunos pueden decir que "es una característica, no un error". Por desgracia, los desarrolladores no siempre pueden evitar extraer archivos tar o zip de una fuente desconocida. Depende de ellos sanear la entrada no confiable para prevenir las vulnerabilidades de cruce de rutas como parte de las prácticas de desarrollo seguro.

¿Quiere saber más sobre cómo escribir código seguro y mitigar los riesgos con Python?

Pruebe gratis nuestro reto de Python.

Si está interesado en obtener más directrices de codificación gratuitas, consulte Secure Code Coach, que le ayudará a mantenerse al tanto de las prácticas de codificación seguras.

Índice

Descargar PDF
Ver recurso
¿Quiere saber más?

Secure Code Warrior está a disposición de su organización para ayudarle a proteger el código a lo largo de todo el ciclo de vida de desarrollo de software y crear una cultura en la que la ciberseguridad sea una prioridad. Tanto si es director de AppSec, desarrollador, CISO o cualquier persona implicada en la seguridad, podemos ayudar a su organización a reducir los riesgos asociados a un código inseguro.

Reservar una demostraciónDescargar
Compartir en:
Centro de recursos

Recursos para empezar

Más entradas
Centro de recursos

Recursos para empezar

Más entradas