Skip to main content

Las vulnerabilidades más comunes en Maven Central y npm

Escrito por
The Most Common Vulnerabilities in Maven Central and npm small

27 de junio de 2018

0 minutos de lectura

La versión completa de esta entrada del blog se publicó originalmente como una publicación de invitado de Snyk en el blog de Cloud Foundry.

En esta publicación veremos los tipos de vulnerabilidades más comunes en dos de los principales ecosistemas que seguimos en nuestra base de datos de vulnerabilidades: Maven Central y npm. La Snyk Vulnerability Database incluye vulnerabilidades de más de 1,000,000 de paquetes de código abierto que seguimos y que usan Composer, Go, Maven Central, npm, NuGet, pip y Rubygems.

En 2017, la cantidad de vulnerabilidades publicadas en los ecosistemas que seguimos alcanzó un máximo histórico, con un aumento del 83 por ciento con respecto a 2016. Podemos ver cuáles fueron los tipos de vulnerabilidad más frecuentes en los dos ecosistemas principales, de los que hablaremos aquí.

Gráfico de líneas titulado «Vulnerabilidades críticas en paquetes de Java y Node», que muestra que las vulnerabilidades de Java aumentan hasta aproximadamente 88 y las de Node hasta alrededor de 29 en 2017.

En nuestras publicaciones de abril y mayo analizaremos algunas de estas vulnerabilidades en mayor profundidad para ver cómo pueden explotarse.

JavaScript (npm)

1. Recorrido de directorios – Ejemplo: el paquete st.

La vulnerabilidad más común en el ecosistema de npm es el recorrido de directorios. Suele ocurrir cuando se proporciona una ruta relativa a un directorio, pero no se valida. Sin validación, la ruta relativa puede apuntar a un directorio principal y permitir el acceso a datos confidenciales. Por ejemplo, una técnica que se usa con frecuencia para ejecutar un exploit consiste en usar entidades HTML, donde «.» se representa como «%2E». En estos casos, una solicitud a la siguiente URL /%2E%2E/%2E%2E/%2E%2E/etc/password podría hacer que se exponga /etc/passwd.

2. Recursos descargados mediante un protocolo no seguro – Ejemplo: Chromedriver.

Esta vulnerabilidad permite que los atacantes realicen un ataque de intermediario (MitM). Cuando los recursos se descargan mediante un protocolo no seguro, un atacante puede interceptar la conexión y modificar los paquetes recibidos.

3. Secuencias de comandos entre sitios (XSS) – Ejemplo: el paquete handlebars.

Los ataques XSS ocurren cuando un atacante engaña al navegador de un usuario para que ejecute código JavaScript malicioso en el entorno de la víctima. Estos scripts pueden robar las cookies de sesión del usuario para el dominio, obtener contraseñas o números de tarjetas de crédito escritos, extraer o modificar contenido y realizar o modificar acciones en nombre del usuario. De otro modo, el navegador normalmente bloquearía estas acciones mediante su política del mismo origen. Para obtener más información, consulta Ataques XSS: la próxima ola.

Maven Central

1. Denegación de servicio (DoS) – Ejemplo: el procesador de datos jackson.

Una vulnerabilidad de denegación de servicio satura los recursos de los servidores de backend y afecta otras solicitudes de los usuarios. Esto suele ocurrir por el consumo de CPU, pero también puede deberse a que se llenen los discos, la memoria u otros recursos del servidor.

2. Ejecución de código arbitrario – Ejemplo: la biblioteca Apache Struts.

La ejecución de código arbitrario consiste en ejecutar código malicioso enviado a un servidor vulnerable. A menudo, este código ejecuta comandos en la máquina remota. Suele ser consecuencia de otra vulnerabilidad, como una vulnerabilidad de deserialización, como ocurrió en el caso de Struts.

3. Secuencias de comandos entre sitios (XSS) – Ejemplo: el complemento Jenkins CI Server.

Consulta la descripción de XSS en la sección de npm de arriba.

Para conocer otras vulnerabilidades comunes en estos ecosistemas, consulta la publicación completa en el blog de Cloud Foundry.

Empieza con los desafíos de Capture the Flag

Aprende a resolver desafíos de captura la bandera con nuestro taller virtual introductorio a pedido.