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

Publicado el 03 de octubre de 2022
por Laura Verheyde
ESTUDIO DE CASO

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

Publicado el 03 de octubre de 2022
por Laura Verheyde
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.

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

Autor

Laura Verheyde

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.

¿Quieres más?

Sumérjase en nuestras últimas ideas sobre codificación segura en el blog.

Nuestra amplia biblioteca de recursos tiene como objetivo potenciar el enfoque humano de la mejora de la codificación segura.

Ver blog
¿Quieres más?

Obtenga las últimas investigaciones sobre la seguridad impulsada por los desarrolladores

Nuestra amplia biblioteca de recursos está repleta de recursos útiles, desde libros blancos hasta seminarios web, que le ayudarán a iniciarse en la codificación segura orientada a los desarrolladores. Explórela ahora.

Centro de recursos

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

Publicado el 03 de octubre de 2022
Por Laura Verheyde

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.

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.

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