Skip to main content

El 77 % de los sitios usa al menos una biblioteca de JavaScript vulnerable

Escrito por
Headshot of Tim Kadlec

Tim Kadlec

29 de marzo de 2017

0 minutos de lectura

La semana pasada se publicó un estudio que señalaba que cerca del 37 % de los sitios incluía al menos una biblioteca de JavaScript con una vulnerabilidad conocida. Cuando escribimos sobre los hallazgos, mencionamos que creíamos que la realidad probablemente era mucho peor.

Así es. Mucho peor, de hecho.

Hicimos nuestra propia prueba con las 5.000 URL principales de Alexa y descubrimos que un asombroso 76,6 % incluía al menos una biblioteca vulnerable. Si te interesa saber cómo realizamos la prueba, los detalles están abajo, o puedes ir directamente a los resultados.

La prueba

Para realizar las pruebas, tomamos las 5.000 URL principales de Alexa. Algunas dieron error cuando intentamos acceder a ellas, así que seguimos avanzando en la lista de Alexa hasta tener 5.000 páginas que cargaran correctamente.

Ejecutamos cada URL en WebPageTest. WebPageTest cargó cada página en Chrome y luego ejecutó JavaScript personalizado para identificar la versión de algunas bibliotecas de JavaScript.

Por ejemplo, para determinar qué versión de jQuery se usaba, cada página ejecutaba el siguiente código después de cargarse:

return jQuery && jQuery.fn && jQuery.fn.jquery

En esta primera ejecución, incluimos comprobaciones de las siguientes bibliotecas:

  • jQuery

  • Handlebars

  • Mustache

  • React

  • Angular

  • Ember

  • jQuery UI

  • YUI

  • Dojo

Para cada versión detectada, la comparamos con la base de datos de vulnerabilidades de código abierto de Snyk para averiguar cuántas bibliotecas tenían una vulnerabilidad conocida.

Resultados nada alentadores

Como mencionamos antes, la seguridad de las bibliotecas de JavaScript está en un estado alarmantemente malo; no hay forma de suavizarlo. De los 5.000 sitios, 3.831 (el 76,6 %) incluyen una biblioteca de JavaScript con al menos una vulnerabilidad conocida.

Gráfico de dona que muestra las bibliotecas de JavaScript vulnerables por sitio: el 76,6 % tiene una o más y el 23,4 % no tiene ninguna.

Puede sonar extraño decirlo dado el alto porcentaje, pero, al igual que en el estudio original, probablemente la realidad sea aún peor. Aquí probamos nueve bibliotecas de JavaScript. La lista de frameworks y bibliotecas de JavaScript disponibles para los desarrolladores incluiría cientos y cientos de opciones. Las que probamos están entre las más populares, así que es poco probable que el porcentaje aumentara demasiado; con todo, es casi seguro que habría algunos puntos porcentuales más.

Y, de nuevo, esto solo comprueba si hay vulnerabilidades conocidas en bibliotecas de JavaScript de terceros que se ejecutan del lado del cliente. No se considera el uso del lado del servidor ni el JavaScript escrito a medida. Además, agregamos nuevas vulnerabilidades a nuestra base de datos todos los días: existen más, aunque todavía no se conozcan públicamente.

jQuery

Como era de esperarse, jQuery es la biblioteca más popular de las que probamos; su extraordinario dominio está más que documentado. Pudimos detectar jQuery en el 79 % de las 5.000 URL principales.

Aunque no es una biblioteca particularmente vulnerable (hay cinco vulnerabilidades conocidas, todas corregidas en versiones posteriores), la popularidad de jQuery hace que por sí sola genere bastantes problemas.

Resulta que, aunque solo comprobáramos jQuery, igualmente tendríamos un 75,1 % de sitios que usan una versión con al menos una vulnerabilidad. Esto se debe en gran medida a lo antiguas que son la mayoría de las bibliotecas jQuery en producción. El 17,4 % de las versiones de jQuery encontradas en producción tienen más de cinco años. Esto coincide bastante con el estudio inicial: la gente no actualiza con regularidad.

Gráfico circular titulado “Antigüedad de las versiones de jQuery en uso”, que muestra versiones de menos de 1 año hasta más de 5 años, con porcentajes de entre 15.6% y 17.4%.

Otro factor que complica la situación para quienes usan jQuery es que las únicas versiones sin vulnerabilidades conocidas son las >=3.0.0. Para muchos usuarios actuales, actualizar no es tan sencillo como instalar una versión menor: podría implicar cambios incompatibles. Aproximadamente el 79 % de las bibliotecas jQuery detectadas eran de la versión 1.x. Aunque la versión final de jQuery 3.0.0 se publicó hace casi un año, solo el 3,6 % de los sitios usaba alguna versión 3.x.

Gráfico circular titulado “Versiones de jQuery detectadas”, que muestra la versión 1.x con un 79,4 %, la 2.x con un 17,0 % y la 3.x con un 3,6 %.
Gráfico de barras que muestra las diez versiones de jQuery más populares, encabezadas por la 1.11.1 con un 8,8 %, y que descienden hasta la 1.11.0 con un 4,3 %.

La próxima semana analizaremos jQuery con más detalle, ya que su popularidad sin precedentes lo hace especialmente interesante.

jQuery UI

jQuery UI ocupó el segundo lugar en popularidad: estaba presente en el 19,3 % de las URL probadas. Una vez más, la mayoría de quienes usan jQuery UI utiliza una versión vulnerable, pese a que hay actualizaciones disponibles. Cerca del 91 % de las bibliotecas jQuery UI encontradas tiene al menos una vulnerabilidad.

Gráfico de dona que muestra la antigüedad de las versiones de jQuery UI en uso: de 2 a 3 años, 33,2 %; más de 5 años, 21,8 %; y menos de 1 año, 6,6 %.

De nuevo, gran parte del problema se debe a que la gente no actualiza: el 21,8 % de los sitios que usan jQuery UI utiliza una versión de más de cinco años.

Handlebars

Detectamos Handlebars en el 3,4 % de las URL probadas. De esos sitios, el 68 % usaba una versión vulnerable de Handlebars. Una vez más, la principal causa es la lenta adopción de nuevas versiones. A primera vista, parecería que el uso de Handlebars está un poco más actualizado. Aunque no detectamos la versión más reciente de la biblioteca (4.0.6), la versión anterior (4.0.5) también es la más común en producción: representa el 26,7 % del uso de Handlebars.

Gráfico de dona que muestra las versiones de Handlebars en uso según su antigüedad: de 1 a 2 años, 44,3 %; de 3 a 4 años, 23,7 %; 5 años o más, 16,6 %; y de 2 a 3 años, 15,4 %.

Sin embargo, debido a un ritmo de lanzamientos más lento (solo publicaron dos versiones menores desde noviembre de 2015), esos sitios siguen usando una versión de la biblioteca que tiene casi dos años. En total, el 40 % de las versiones de Handlebars detectadas tenía más de tres años.

React, Mustache, Angular, YUI y Dojo

React (1,7 %), Mustache (1,6 %), Angular (1,3 %), YUI (0,7 %) y Dojo (0,2 %) aparecieron con muy poca frecuencia como para sacar conclusiones confiables sobre el uso de cada una. Sin embargo, al considerar su uso en conjunto, las versiones vulnerables siguen siendo muy comunes: el 56,3 % de las versiones de estas bibliotecas encontradas en los datos tiene al menos una vulnerabilidad.

Una conclusión esperanzadora

No cabe duda de que la situación actual no es buena. Aunque esperábamos que la cifra del estudio original fuera optimista, no imaginábamos que el 77 % de los sitios usara al menos una biblioteca vulnerable.

Y para que quede claro, no hay una única solución para este problema. En cambio, necesitamos combinar una mayor concientización, mejores herramientas y una manera más sencilla de mantener las dependencias de JavaScript en el frontend (la adopción de administradores de paquetes no está tan extendida como en el desarrollo de backend), para empezar.

Pero, como hemos dicho antes, mantenemos la esperanza. Proteger el JavaScript de terceros es un problema que se puede resolver; solo requiere un poco más de esfuerzo de lo que pensábamos.

Debido a la sensibilidad de un informe como este, no compartiremos los datos sin procesar: eso equivaldría a entregar una lista de sitios y posibles vectores de ataque. Sin embargo, si eres propietario de un sitio web, puedes contactarnos para averiguar si tu sitio aparece en el informe y, de ser así, si encontramos alguna vulnerabilidad. Si usas paquetes de npm, probar tu aplicación con Snyk también puede ayudarte a descubrir posibles brechas de seguridad.

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.