Iconos SCW
héroe bg sin separador
Blog

安全编码技术:Zip 库的默认行为可能会导致远程代码执行

Pieter De Cremer
Publicado el 13 de noviembre de 2017
Última actualización el 9 de marzo de 2026

Esta semana vamos a hablar del comportamiento por defecto de las librerías Zip. Si eres un desarrollador de aplicaciones, es muy probable que hayas utilizado esto antes. La mayoría de los recursos que se descargan por internet están en formato zip, esto tiene sentido; los datos comprimidos son más pequeños, por lo que se descargan más rápido y consumen menos ancho de banda.

Si quieres algunos ejemplos más concretos: texturas para juegos, paquetes de idiomas para autocompletar en los teclados, ... Muchos recursos no se incluyen automáticamente en la aplicación, sino que se descargan posteriormente.

Pero tenga cuidado al usar esta funcionalidad, los nombres de los archivos en zip pueden contener información de recorrido. Cuando se extrae, esto hará que se creen archivos fuera del directorio previsto. Esto se hace a menudo con la intención de sobrescribir los archivos existentes.

Archivos Zip

Digamos que tenemos un archivo zip que contiene los siguientes dos archivos:

archivo1
../archivo2

Cuando se extrae este archivo, el archivo1 se extrae donde esperamos que esté, en el directorio de descompresión. Sin embargo, el archivo2 fue escrito un directorio más arriba de donde le pedimos a la biblioteca zip que extrajera el archivo.

Así que tenga cuidado, si su librería zip no tiene cuidado de manejar adecuadamente este caso, permitirá a un atacante escribir un archivo arbitrario en el sistema. Compruebe siempre si su librería es segura, esta regla general es válida para cualquier librería, pero en particular sabe comprobar el comportamiento por defecto de su librería zip para este tipo de archivos.

Vamos a demostrar las consecuencias cuando este caso no se maneja correctamente en Android. En Android se utiliza la librería Java Zip (java.util.zip), que permite recorrer la ruta como se ha explicado anteriormente por defecto.

El formato Dalvik Executable (.dex) de Android tiene limitaciones en cuanto a la cantidad de clases que puede tener un solo archivo. Las aplicaciones que necesitan más clases pueden hacer uso de la librería MultiDex Support que se ha añadido desde el nivel 21 de la API (Android 5.0 Lollipop). Esta librería guarda archivos .dex secundarios en el directorio de datos de la aplicación, este directorio es escribible por el usuario de la app y este código será cargado y ejecutado cuando el archivo .dex sea necesario.

Esto significa que un atacante puede modificar el archivo .dex sobrescribiéndolo mediante un archivo zip malicioso y, lo que es peor, este archivo se cargará y se ejecutará, dando lugar a una vulnerabilidad de ejecución remota de código. Esto no es sólo un ejemplo teórico, sino que se ha demostrado en la aplicación My Talking Tom, que tiene más de 100 millones de descargas en la tienda de aplicaciones. Aquí hay un vídeo del exploit que se presentó en Black Hat.

Tom el parlanchín

Compruebe siempre el comportamiento de su biblioteca zip para conocer sus inseguridades. Si no puedes desactivar el path traversal en tu librería zip, asegúrate de validar el nombre de cada entrada antes de extraerla. El nombre debería estar canonizado y la ruta resultante debería estar en el directorio en el que quieres extraer el archivo. Ya que estamos, también deberías comprobar el tamaño total del archivo extraído para evitar las bombas zip, pero esto será un post para otra semana.

Si quieres jugar a algunos retos sobre el cruce de caminos o quieres poner a prueba tus habilidades de codificación segura, echa un vistazo a nuestra plataforma.

Nos vemos la próxima vez, y recuerda, ¡con código seguro o sin código!

- Podemos inyectar un archivo en un zip cuyo nombre esté prefijado con un número arbitrario de " ../ "
- Si la librería zip no tiene cuidado de manejar adecuadamente este caso, nos permitiría escribir fuera del directorio de extracción previsto
- Si el archivo zip no es de confianza, esto da al atacante una vulnerabilidad de escritura arbitraria

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

Ver recursos
Ver recursos

我们可以将一个文件注入到一个名称前缀为 zip 的 zip

¿Te interesa saber más?

Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor

Más información

Secure Code Warrior puede ayudar a su organización a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es usted responsable de seguridad de aplicaciones, desarrollador, director de seguridad de la información o cualquier otra persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados al código inseguro.

Reservar una demostración
Compartir en:
marcas de LinkedInSocialx logotipo
Autor
Pieter De Cremer
Publicado el 13 de noviembre de 2017

Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor

Compartir en:
marcas de LinkedInSocialx logotipo

Esta semana vamos a hablar del comportamiento por defecto de las librerías Zip. Si eres un desarrollador de aplicaciones, es muy probable que hayas utilizado esto antes. La mayoría de los recursos que se descargan por internet están en formato zip, esto tiene sentido; los datos comprimidos son más pequeños, por lo que se descargan más rápido y consumen menos ancho de banda.

Si quieres algunos ejemplos más concretos: texturas para juegos, paquetes de idiomas para autocompletar en los teclados, ... Muchos recursos no se incluyen automáticamente en la aplicación, sino que se descargan posteriormente.

Pero tenga cuidado al usar esta funcionalidad, los nombres de los archivos en zip pueden contener información de recorrido. Cuando se extrae, esto hará que se creen archivos fuera del directorio previsto. Esto se hace a menudo con la intención de sobrescribir los archivos existentes.

Archivos Zip

Digamos que tenemos un archivo zip que contiene los siguientes dos archivos:

archivo1
../archivo2

Cuando se extrae este archivo, el archivo1 se extrae donde esperamos que esté, en el directorio de descompresión. Sin embargo, el archivo2 fue escrito un directorio más arriba de donde le pedimos a la biblioteca zip que extrajera el archivo.

Así que tenga cuidado, si su librería zip no tiene cuidado de manejar adecuadamente este caso, permitirá a un atacante escribir un archivo arbitrario en el sistema. Compruebe siempre si su librería es segura, esta regla general es válida para cualquier librería, pero en particular sabe comprobar el comportamiento por defecto de su librería zip para este tipo de archivos.

Vamos a demostrar las consecuencias cuando este caso no se maneja correctamente en Android. En Android se utiliza la librería Java Zip (java.util.zip), que permite recorrer la ruta como se ha explicado anteriormente por defecto.

El formato Dalvik Executable (.dex) de Android tiene limitaciones en cuanto a la cantidad de clases que puede tener un solo archivo. Las aplicaciones que necesitan más clases pueden hacer uso de la librería MultiDex Support que se ha añadido desde el nivel 21 de la API (Android 5.0 Lollipop). Esta librería guarda archivos .dex secundarios en el directorio de datos de la aplicación, este directorio es escribible por el usuario de la app y este código será cargado y ejecutado cuando el archivo .dex sea necesario.

Esto significa que un atacante puede modificar el archivo .dex sobrescribiéndolo mediante un archivo zip malicioso y, lo que es peor, este archivo se cargará y se ejecutará, dando lugar a una vulnerabilidad de ejecución remota de código. Esto no es sólo un ejemplo teórico, sino que se ha demostrado en la aplicación My Talking Tom, que tiene más de 100 millones de descargas en la tienda de aplicaciones. Aquí hay un vídeo del exploit que se presentó en Black Hat.

Tom el parlanchín

Compruebe siempre el comportamiento de su biblioteca zip para conocer sus inseguridades. Si no puedes desactivar el path traversal en tu librería zip, asegúrate de validar el nombre de cada entrada antes de extraerla. El nombre debería estar canonizado y la ruta resultante debería estar en el directorio en el que quieres extraer el archivo. Ya que estamos, también deberías comprobar el tamaño total del archivo extraído para evitar las bombas zip, pero esto será un post para otra semana.

Si quieres jugar a algunos retos sobre el cruce de caminos o quieres poner a prueba tus habilidades de codificación segura, echa un vistazo a nuestra plataforma.

Nos vemos la próxima vez, y recuerda, ¡con código seguro o sin código!

- Podemos inyectar un archivo en un zip cuyo nombre esté prefijado con un número arbitrario de " ../ "
- Si la librería zip no tiene cuidado de manejar adecuadamente este caso, nos permitiría escribir fuera del directorio de extracción previsto
- Si el archivo zip no es de confianza, esto da al atacante una vulnerabilidad de escritura arbitraria

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

Ver recursos
Ver recursos

Rellene el siguiente formulario para descargar el informe.

Nos gustaría obtener su permiso para enviarle información sobre nuestros productos y/o temas relacionados con la codificación de seguridad. Trataremos su información personal con el máximo cuidado y nunca la venderemos a otras empresas con fines comerciales.

Enviar
Icono de éxito de SCW
Icono de error scw
Para enviar el formulario, habilite las cookies de análisis. Una vez completado, puede desactivarlas nuevamente si lo desea.

Esta semana vamos a hablar del comportamiento por defecto de las librerías Zip. Si eres un desarrollador de aplicaciones, es muy probable que hayas utilizado esto antes. La mayoría de los recursos que se descargan por internet están en formato zip, esto tiene sentido; los datos comprimidos son más pequeños, por lo que se descargan más rápido y consumen menos ancho de banda.

Si quieres algunos ejemplos más concretos: texturas para juegos, paquetes de idiomas para autocompletar en los teclados, ... Muchos recursos no se incluyen automáticamente en la aplicación, sino que se descargan posteriormente.

Pero tenga cuidado al usar esta funcionalidad, los nombres de los archivos en zip pueden contener información de recorrido. Cuando se extrae, esto hará que se creen archivos fuera del directorio previsto. Esto se hace a menudo con la intención de sobrescribir los archivos existentes.

Archivos Zip

Digamos que tenemos un archivo zip que contiene los siguientes dos archivos:

archivo1
../archivo2

Cuando se extrae este archivo, el archivo1 se extrae donde esperamos que esté, en el directorio de descompresión. Sin embargo, el archivo2 fue escrito un directorio más arriba de donde le pedimos a la biblioteca zip que extrajera el archivo.

Así que tenga cuidado, si su librería zip no tiene cuidado de manejar adecuadamente este caso, permitirá a un atacante escribir un archivo arbitrario en el sistema. Compruebe siempre si su librería es segura, esta regla general es válida para cualquier librería, pero en particular sabe comprobar el comportamiento por defecto de su librería zip para este tipo de archivos.

Vamos a demostrar las consecuencias cuando este caso no se maneja correctamente en Android. En Android se utiliza la librería Java Zip (java.util.zip), que permite recorrer la ruta como se ha explicado anteriormente por defecto.

El formato Dalvik Executable (.dex) de Android tiene limitaciones en cuanto a la cantidad de clases que puede tener un solo archivo. Las aplicaciones que necesitan más clases pueden hacer uso de la librería MultiDex Support que se ha añadido desde el nivel 21 de la API (Android 5.0 Lollipop). Esta librería guarda archivos .dex secundarios en el directorio de datos de la aplicación, este directorio es escribible por el usuario de la app y este código será cargado y ejecutado cuando el archivo .dex sea necesario.

Esto significa que un atacante puede modificar el archivo .dex sobrescribiéndolo mediante un archivo zip malicioso y, lo que es peor, este archivo se cargará y se ejecutará, dando lugar a una vulnerabilidad de ejecución remota de código. Esto no es sólo un ejemplo teórico, sino que se ha demostrado en la aplicación My Talking Tom, que tiene más de 100 millones de descargas en la tienda de aplicaciones. Aquí hay un vídeo del exploit que se presentó en Black Hat.

Tom el parlanchín

Compruebe siempre el comportamiento de su biblioteca zip para conocer sus inseguridades. Si no puedes desactivar el path traversal en tu librería zip, asegúrate de validar el nombre de cada entrada antes de extraerla. El nombre debería estar canonizado y la ruta resultante debería estar en el directorio en el que quieres extraer el archivo. Ya que estamos, también deberías comprobar el tamaño total del archivo extraído para evitar las bombas zip, pero esto será un post para otra semana.

Si quieres jugar a algunos retos sobre el cruce de caminos o quieres poner a prueba tus habilidades de codificación segura, echa un vistazo a nuestra plataforma.

Nos vemos la próxima vez, y recuerda, ¡con código seguro o sin código!

- Podemos inyectar un archivo en un zip cuyo nombre esté prefijado con un número arbitrario de " ../ "
- Si la librería zip no tiene cuidado de manejar adecuadamente este caso, nos permitiría escribir fuera del directorio de extracción previsto
- Si el archivo zip no es de confianza, esto da al atacante una vulnerabilidad de escritura arbitraria

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

Ver el seminario web
Empecemos.
Más información

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

Secure Code Warrior puede ayudar a su organización a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es usted responsable de seguridad de aplicaciones, desarrollador, director de seguridad de la información o cualquier otra persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados al código inseguro.

Ver informeReservar una demostración
Ver recursos
Compartir en:
marcas de LinkedInSocialx logotipo
¿Te interesa saber más?

Compartir en:
marcas de LinkedInSocialx logotipo
Autor
Pieter De Cremer
Publicado el 13 de noviembre de 2017

Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor

Compartir en:
marcas de LinkedInSocialx logotipo

Esta semana vamos a hablar del comportamiento por defecto de las librerías Zip. Si eres un desarrollador de aplicaciones, es muy probable que hayas utilizado esto antes. La mayoría de los recursos que se descargan por internet están en formato zip, esto tiene sentido; los datos comprimidos son más pequeños, por lo que se descargan más rápido y consumen menos ancho de banda.

Si quieres algunos ejemplos más concretos: texturas para juegos, paquetes de idiomas para autocompletar en los teclados, ... Muchos recursos no se incluyen automáticamente en la aplicación, sino que se descargan posteriormente.

Pero tenga cuidado al usar esta funcionalidad, los nombres de los archivos en zip pueden contener información de recorrido. Cuando se extrae, esto hará que se creen archivos fuera del directorio previsto. Esto se hace a menudo con la intención de sobrescribir los archivos existentes.

Archivos Zip

Digamos que tenemos un archivo zip que contiene los siguientes dos archivos:

archivo1
../archivo2

Cuando se extrae este archivo, el archivo1 se extrae donde esperamos que esté, en el directorio de descompresión. Sin embargo, el archivo2 fue escrito un directorio más arriba de donde le pedimos a la biblioteca zip que extrajera el archivo.

Así que tenga cuidado, si su librería zip no tiene cuidado de manejar adecuadamente este caso, permitirá a un atacante escribir un archivo arbitrario en el sistema. Compruebe siempre si su librería es segura, esta regla general es válida para cualquier librería, pero en particular sabe comprobar el comportamiento por defecto de su librería zip para este tipo de archivos.

Vamos a demostrar las consecuencias cuando este caso no se maneja correctamente en Android. En Android se utiliza la librería Java Zip (java.util.zip), que permite recorrer la ruta como se ha explicado anteriormente por defecto.

El formato Dalvik Executable (.dex) de Android tiene limitaciones en cuanto a la cantidad de clases que puede tener un solo archivo. Las aplicaciones que necesitan más clases pueden hacer uso de la librería MultiDex Support que se ha añadido desde el nivel 21 de la API (Android 5.0 Lollipop). Esta librería guarda archivos .dex secundarios en el directorio de datos de la aplicación, este directorio es escribible por el usuario de la app y este código será cargado y ejecutado cuando el archivo .dex sea necesario.

Esto significa que un atacante puede modificar el archivo .dex sobrescribiéndolo mediante un archivo zip malicioso y, lo que es peor, este archivo se cargará y se ejecutará, dando lugar a una vulnerabilidad de ejecución remota de código. Esto no es sólo un ejemplo teórico, sino que se ha demostrado en la aplicación My Talking Tom, que tiene más de 100 millones de descargas en la tienda de aplicaciones. Aquí hay un vídeo del exploit que se presentó en Black Hat.

Tom el parlanchín

Compruebe siempre el comportamiento de su biblioteca zip para conocer sus inseguridades. Si no puedes desactivar el path traversal en tu librería zip, asegúrate de validar el nombre de cada entrada antes de extraerla. El nombre debería estar canonizado y la ruta resultante debería estar en el directorio en el que quieres extraer el archivo. Ya que estamos, también deberías comprobar el tamaño total del archivo extraído para evitar las bombas zip, pero esto será un post para otra semana.

Si quieres jugar a algunos retos sobre el cruce de caminos o quieres poner a prueba tus habilidades de codificación segura, echa un vistazo a nuestra plataforma.

Nos vemos la próxima vez, y recuerda, ¡con código seguro o sin código!

- Podemos inyectar un archivo en un zip cuyo nombre esté prefijado con un número arbitrario de " ../ "
- Si la librería zip no tiene cuidado de manejar adecuadamente este caso, nos permitiría escribir fuera del directorio de extracción previsto
- Si el archivo zip no es de confianza, esto da al atacante una vulnerabilidad de escritura arbitraria

https://www.blackhat.com/docs/ldn-15/materials/london-15-Welton-Abusing-Android-Apps-And-Gaining-Remote-Code-Execution.pdf

Índice

Descargar PDF
Ver recursos
¿Te interesa saber más?

Investigador de seguridad de aplicaciones - Ingeniero de I+D - Candidato a doctor

Más información

Secure Code Warrior puede ayudar a su organización a proteger el código a lo largo de todo el ciclo de vida del desarrollo de software y a crear una cultura que dé prioridad a la ciberseguridad. Tanto si es usted responsable de seguridad de aplicaciones, desarrollador, director de seguridad de la información o cualquier otra persona relacionada con la seguridad, podemos ayudar a su organización a reducir los riesgos asociados al código inseguro.

Reservar una demostraciónDescargar
Compartir en:
marcas de LinkedInSocialx logotipo
Centro de recursos

Recursos para ayudarle a empezar

Más publicaciones
Centro de recursos

Recursos para ayudarle a empezar

Más publicaciones