Skip to main content

Vulnerabilidad de seguridad grave en la extracción de archivos ZIP de Bower

Escrito por
Severe Security Vulnerability in Bowers Zip and Tar Archive Extraction tumb

31 de enero de 2019

0 minutos de lectura

A principios de este mes se descubrió que Bower, un popular administrador de paquetes web, es vulnerable a ataques mediante la extracción de archivos. Actualmente, se le atribuyen dos incidentes de seguridad, para los que ya hay versiones posteriores que los solucionan:

  • La escritura arbitraria de archivos con posible inyección de comandos remota, corregida en Bower 1.8.6, se debió a las vulnerabilidades Zip Slip detectadas en la dependencia decompress-zip, una dependencia de código abierto que usa Bower.

  • La escritura arbitraria de archivos causada por vulnerabilidades de enlaces simbólicos (symlinks) en archivos .tar.gz, que se explotan debido a la forma en que Bower extrae estos archivos, se corrigió en Bower 1.8.8.

Webpack, yarn y el registro de npm quizá hayan cambiado el panorama para Bower, pero todavía se sigue usando. Aunque hoy existen administradores de paquetes más populares y npm es el registro de facto para JavaScript, Bower sigue teniendo muchos usuarios: registra casi 2 millones de descargas al mes, lo que pone de manifiesto la gravedad de este problema de seguridad.

El 1 de enero de 2019, un investigador de seguridad llamado skyn3t reportó al grupo de trabajo de seguridad de Node.js en HackerOne una escritura arbitraria de archivos implementada mediante una validación incorrecta de enlaces simbólicos, causada por la forma en que Bower extrae archivos tar.

Poco después de que se clasificara el error, invitaron a Adam Stankiewicz, del equipo central de Bower, a revisar el reporte. Lo confirmó de inmediato y proporcionó una solución en la versión 1.8.8 de Bower para corregir el problema de seguridad.

Recorrido malicioso de rutas al extraer archivos

Si un actor malicioso creara un archivo ZIP especialmente diseñado para un paquete que luego se instalara con Bower, podría provocar un recorrido de rutas y hacer que los archivos se extrajeran fuera del directorio raíz previsto para descomprimir el archivo.

La siguiente prueba de concepto (POC) proviene de un reporte de seguridad divulgado por skyn3t al programa del grupo de trabajo de seguridad de Node.js en HackerOne, y muestra cómo el manejo inseguro de enlaces simbólicos puede permitir la escritura arbitraria de archivos.

El archivo malicioso del paquete

El archivo debe crear un enlace simbólico a un directorio y luego colocar un archivo en ese directorio de destino. Sin embargo, para reproducir esta estructura de directorios, debemos crear manualmente un archivo malicioso.

Primero crearemos un directorio para el paquete malicioso, un archivo package.json predeterminado para Bower y un enlace simbólico a /tmp:

mkdir malicious-package
cd malicious-package
npm init -y
ln -s /tmp mySpecialDirectory

Ahora podemos crear un archivo tar para este paquete y asegurarnos de no comprimirlo:

tar -cvf malicious-package.tar malicious-package
Terminal que muestra comandos para crear un enlace simbólico y archivar un paquete malicioso que contiene package.json y mySpecialDirectory.

La parte complicada es introducir un archivo de nuestra elección en el directorio /tmp y, en esencia, en mySpecialDirectory/ dentro del archivo. Ese nombre de archivo ya está ocupado por un enlace, así que no podemos volver a usarlo en nuestro sistema de archivos.

Para superar este reto, volvemos a las funciones estándar de los archivos: manipular los datos dentro del archivo. Los archivos tar permiten actualizar un archivo existente, por ejemplo, agregándole más archivos, lo que nos permite crear una vía de escape.

Eliminaremos el enlace, crearemos un directorio en su lugar y pondremos nuestro propio archivo dentro. Luego agregaremos solo ese archivo al archivo tar con la función de actualización:

rm mySpecialDirectory
mkdir mySpecialDirectory
echo “abc” > mySpecialDirectory/ssmaliciousFile
cd ..
tar -rvf malicious-package.tar malicious-package/mySpecialDirectory/ssmaliciousFile

Como se ve en la captura de pantalla, el contenido del archivo incluye un enlace simbólico al directorio /tmp y también a un archivo malicioso que creamos:

Terminal que muestra comandos tar que crean un archivo de paquete malicioso con un directorio vinculado simbólicamente y un archivo sospechoso.

Es importante tener en cuenta que los archivos comprimidos no se pueden manipular de la misma manera que los archivos tar. Por eso, comprimiremos el archivo con gzip ahora que ya hemos creado el archivo malicioso:

gzip malicious-package.tar

Activar la instalación de Bower

Ahora que tenemos un archivo tar.gz en el directorio de inicio ~/tmp, ejecutemos una instalación de Bower desde el sistema de archivos local para demostrar cómo se descomprime el paquete:

Terminal que muestra Bower 1.8.7 instalando un paquete malicioso y enumerando el archivo /tmp/ssmaliciousFile creado

Como se puede ver, se usa Bower 1.8.7 y, al instalar el paquete malicioso, el archivo malicioso que controlábamos se instaló en el directorio /tmp del sistema.

Cómo corregir la vulnerabilidad

Bower admite estos tipos de archivo: tar, tar.gz y zip. Aunque ya se había corregido una vulnerabilidad similar que afectaba a los paquetes ZIP al solucionar decompress-zip, tar y tar.gz seguían siendo vulnerables.

La solución aplicada para las vulnerabilidades de tar y tar.gz mitigó el problema al ignorar los enlaces simbólicos de los paquetes que se van a instalar. Desde entonces, se lanzó la nueva versión 1.8.8 de Bower para que los usuarios la actualicen y mitiguen el problema de seguridad.

A principios de 2018, el equipo de investigación de seguridad de Snyk acuñó el término de vulnerabilidad de seguridad Zip Slip tras realizar una investigación exhaustiva sobre la explotación de la extracción de archivos que permite la escritura arbitraria de archivos. En casos de gravedad crítica, esto también puede permitir la ejecución remota de comandos y la sobrescritura de archivos de configuración sensibles del sistema.

La investigación sobre Zip Slip permitió descubrir miles de proyectos vulnerables en distintos ecosistemas, incluidos proyectos de Apache, Pivotal, Amazon y otras organizaciones.

En resumen

Vimos cómo crear deliberadamente un paquete malicioso que puede provocar la escritura arbitraria de archivos, pero el problema no se limita a la descarga de paquetes maliciosos. Si un paquete se obtiene a través de un medio inseguro, como tráfico sin HTTPS, se puede llevar a cabo un ataque de intermediario.

Los problemas al extraer archivos no son nuevos; de hecho, podrían remontarse a un artículo de Phrack de 1991 que explicaba cómo hackear un BBS mediante vectores de ataque de extracción de archivos ZIP. Es muy probable que sigamos viendo vulnerabilidades Zip Slip en bibliotecas y aplicaciones a medida que avance la investigación en este campo.

Recuerda que, aunque se permitan los enlaces simbólicos, trabajar con archivos controlados por usuarios es peligroso y debe hacerse con la debida diligencia, como con cualquier otro dato de entrada del usuario.

Puntos clave

  • Actualiza a Bower 1.8.8 lo antes posible.

  • Te invitamos a consultar nuestra guía rápida de Zip Slip para ver ejemplos de código vulnerable en distintos ecosistemas de lenguajes y aprender a evitar vulnerabilidades de seguridad similares en tu código.

Leer más

AI Background min crop
Blog

La IA activa todos los riesgos que has aceptado: siete ideas del panel de seguridad de IA sin filtros

La IA hace que los ataques sean más baratos y rápidos, y deja al descubierto riesgos que las organizaciones ya enfrentan. Cuatro líderes de seguridad explican por qué la defensa a velocidad de máquina y la corrección más rápida son esenciales.

blog feature ai violet
Blog

VulnBump: ¿Pueden los agentes de IA corregir dependencias vulnerables sin romper la compilación?

VulnBump prueba agentes de IA con 307 actualizaciones reales de dependencias. Una corrección cuenta solo si elimina la vulnerabilidad y la compilación y las pruebas siguen pasando.

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad que sigue el ritmo del desarrollo con IA

El desarrollo impulsado por IA avanza más rápido que los flujos de trabajo de seguridad tradicionales. Agentic AppSec de Snyk usa agentes de seguridad para encontrar, corregir y verificar vulnerabilidades de forma continua, mientras las personas establecen el nivel.