Hace unos días la empresa Snyk, especializada en ofrecer servicios de seguridad para desarrolladores que utilizan Open Source, presentó su primer estudio del estado de la seguridad en Open Source. El estudio analizó 418.000 sitios web en busca de posibles problemas de seguridad derivados del uso de productos JavaScript de código abierto que no están correctamente actualizados.
Para el análisis poseen una posición privilegiada ya que Lighthouse, el producto de Google integrado en Chrome para auditar la calidad de las páginas web, hace uso de los servicios de Snyk para auditar la seguridad de las bibliotecas JavaScript. Además, los resultados de Lighthouse se recogen como parte del interesante proyecto HTTP Archive que ofrece información muy útil sobre el estado de la web, tendencias, etc... y que muestra sus datos abiertamente y se pueden descargar y también consultar mediante Google Bigquery.
Los resultados son bastante sorprendentes: el 77,3% de los sitios analizados por Lighthouse en noviembre de 2017 (¡más de 300.000!) contenían al menos una biblioteca JavaScript conocida que presentaba algún tipo de vulnerabilidad de seguridad.
Además, de estos, más de la mitad (el 51,8%) utilizan más de una biblioteca vulnerable. Y el 9,2% (o sea, más de 38.000 sitios) presentan al menos 4 bibliotecas vulnerables:
Las versiones de bibliotecas más vulnerables
Por supuesto, la biblioteca más utilizada del mundo en 2017 sigue siendo jQuery, que aparece en el 82,4% de los sitios web analizados, seguida a mucha distancia de jQuery UI, Modernizr y Bootstrap. Por lo tanto, como es de esperar, jQuery es también la biblioteca que menos se actualiza y por lo tanto la que más contribuye a que los sitios sean vulnerables, con el 92,5% de los casos debidos a ella.
OJO: esto no quiere decir que jQuery sea más vulnerable que otras bibliotecas. Lo que implica es que si los responsables de los sitios web no la actualizan nunca y dejan versiones antiguas vulnerables, el sitio web puede ser comprometido debido a la biblioteca. Pero no es culpa de jQuery, que lanza a menudo nuevas versiones con problemas corregidos, sino culpa de los responsables de estos sitios que no actualizan la versión de jQuery para que no sea vulnerable.
De hecho tienen una lista muy interesante con las bibliotecas más utilizadas y cuál es la versión más antigua que puedes tener de la que no se conocen vulnerabilidades:
Biblioteca |
Versión más antigua sin vulnerabilidades conocidas |
Fecha de lanzamiento |
jQuery |
3.0.0 |
June, 2016 |
jQuery UI |
1.10.0 |
January, 2013 |
Moment.js |
2.15.2 |
October, 2016 |
AngularJS |
1.6.1 |
December, 2016 |
Handlebars |
4.0.0 |
September, 2015 |
Mustache |
2.2.1 |
December, 2015 |
YUI 3 |
3.10.3 |
June, 2016 |
jQuery Mobile |
1.2.0 |
October, 2012 |
Knockout |
3.0.0 |
October, 2013 |
React |
0.14.0 |
October, 2015 |
Así, por ejemplo, si usas jQuery en su versión sin compatibilidad para navegadores antiguos, cualquier versión posterior a la 3.0.0. (incluida) no tiene fallos de seguridad conocidos.
El resumen de todo esto sería que siempre hay que estar muy atentos y mantener actualizados los proyectos de terceros que utilicemos en nuestros desarrollos, sean comerciales o de código abierto. Si manejamos un par de ellos es una tarea fácil, pero si es un proyecto grande y tenemos muchas dependencias, entonces la tarea se convierte en algo mucho más complejo y servicios como los que ofrece Snyk (que tiene una capa gratuita muy generosa) se vuelven extremadamente útiles.
Muy interesante...