Angular vs. React: duelo de seguridad 2019
30 de octubre de 2019
0 minutos de lecturaTe damos la bienvenida al informe de Snyk sobre el estado de la seguridad de los frameworks de JavaScript 2019.
Comencemos este informe explorando las distintas vulnerabilidades de seguridad encontradas en los proyectos principales de Angular y React. Luego, revisamos la gravedad de cada vulnerabilidad y analizamos las diferencias entre ambas. Por último, para los dos proyectos, revisamos el tiempo transcurrido desde que se divulgó una vulnerabilidad hasta que se corrigió, así como el tiempo hasta que se publicó una actualización (tiempo de corrección y tiempo hasta el lanzamiento) en cada caso.
Proyecto principal de Angular: descripción general de las vulnerabilidades de seguridad
Al analizar los proyectos principales de Angular, investigamos específicamente las vulnerabilidades de seguridad en la rama v1.x, también conocida como AngularJS. AngularJS es la versión obsoleta de Angular más utilizada y tuvo soporte y mantenimiento oficiales hasta el 30 de junio de 2021: AngularJS 1.7 LTS.
Graficamos la cantidad mensual de descargas de los paquetes npm angular y @angular/core, que representan Angular v1.x y Angular v2.0 y versiones posteriores, respectivamente. Según los datos que analizamos, Angular v1.x sigue teniendo una participación considerable en el mercado de Angular: representa el 28 % de todas las descargas de Angular en todas las versiones. Aunque Angular ha lanzado muchas versiones principales desde la 1.x, lo cierto es que los usuarios siguen descargando millones de veces al mes esta versión anterior.

El gráfico anterior muestra lo populares que son las versiones de Angular 1.x en comparación con las demás opciones de Angular: las versiones 2.0 y posteriores de Angular están representadas en conjunto por la línea amarilla. Como se observa en el gráfico, Angular v1.x por sí sola representa cerca de un tercio (el 28 %, para ser exactos) de todas las descargas de Angular, tanto nuevas como antiguas.
Podemos suponer que el uso continuo de las versiones 1.x de Angular se debe a aplicaciones heredadas que aún mantienen empresas medianas y grandes. Para estas organizaciones, los cambios tecnológicos y las rutas de migración son muy costosos, pero las aplicaciones deben seguir recibiendo mantenimiento y publicándose con regularidad.
Esta suposición resalta aún más la importancia fundamental de monitorear las vulnerabilidades de seguridad en componentes de código abierto como el framework Angular, incluso en versiones anteriores. Así se pueden abordar rápidamente las vulnerabilidades detectadas en aplicaciones implementadas en producción y evitar que escalen y debiliten la postura de seguridad de una empresa con el tiempo.
Teniendo en cuenta estos problemas, encontramos un total de 19 vulnerabilidades en seis ramas de lanzamiento distintas de Angular v1.x, con el desglose por versión secundaria que se muestra en el siguiente gráfico.

Angular y React: las buenas bases de datos de vulnerabilidades son clave para detectar problemas de seguridad
Aunque Snyk ha monitoreado veintitrés vulnerabilidades de seguridad de Angular v1.x, ninguna tiene una referencia CVE porque no se divulgaron a través de ninguno de los programas CVE reconocidos oficialmente. Esto no necesariamente significa que Angular haya fallado; es una práctica común, ya que los CVE se diseñaron pensando en proveedores comerciales, y presentar un CVE requiere mucho tiempo y experiencia, algo que no siempre es viable para el código abierto.
Sin un CVE, las vulnerabilidades solo pueden ser monitoreadas por analistas dedicados que gestionan y siguen la actividad del código abierto con métodos personalizados; son pocas las soluciones que ofrecen esta posibilidad.
Herramientas como npm audit hacen cierto seguimiento, pero también pasan por alto muchas vulnerabilidades que no tienen un CVE. Por ejemplo, npm audit, que se incluye de forma predeterminada con el cliente npm, lamentablemente no detecta ninguna de las veintitrés vulnerabilidades de Angular v1.x ni ninguna de las vulnerabilidades de React. Por eso, confiar en npm audit puede dar a los desarrolladores una falsa sensación de seguridad.

Todo esto contrasta con la base de datos de vulnerabilidades de Snyk para Angular 1.x, que, por ejemplo, informa once vulnerabilidades de seguridad para Angular v1.2.32:
Versión | Fecha de publicación | Licencia | Vulnerabilidades directas |
|
| MIT | 3 moderadas |
|
|
| |
|
|
| |
|
| 3 altas |
Veamos los siguientes resultados del análisis de Snyk para un proyecto de Angular:

Estas vulnerabilidades se informan a través de la interfaz de usuario de Snyk o la herramienta Snyk CLI. Además, la interfaz de usuario de Snyk crea automáticamente solicitudes de incorporación de cambios (PR) para que los desarrolladores actualicen los paquetes vulnerables, mediante integraciones con sistemas como GitHub.
La situación de React es similar: npm audit no detecta ninguna de las tres vulnerabilidades relacionadas con React. De las tres vulnerabilidades de conocimiento público (dos que afectan a la biblioteca principal react y una que afecta a la biblioteca principal react-dom), solo la última tiene un CVE asignado que se monitorea en la National Vulnerability Database (https://nvd.nist.gov).

Proyecto principal de React: descripción general
Para este informe, consideramos que las bibliotecas react, react-dom y prop-types son los módulos «principales» de React, ya que, en conjunto, suelen formar la base de las aplicaciones web creadas con React.
En estos módulos principales encontramos tres vulnerabilidades en total: dos en react y una en react-dom.
Las tres son vulnerabilidades de Cross-Site Scripting (XSS). Las dos vulnerabilidades XSS del paquete npm de React son bastante antiguas: afectan a las versiones 0.5.x, que datan de 2013, y a las versiones anteriores a la 0.14, divulgadas en 2015.
La vulnerabilidad XSS de la rama de lanzamiento v16.x de react-dom, en cambio, es bastante reciente y se divulgó hace poco más de un año, en agosto de 2018. Sin embargo, esta vulnerabilidad solo se presenta cuando también se cumplen otras condiciones previas, como usar la biblioteca react-dom en un contexto de renderizado del lado del servidor. Aun así, siempre es recomendable mantenerte al día con las correcciones de seguridad y actualizar tus componentes de código abierto lo antes posible para evitar riesgos de seguridad innecesarios.
En detalle: Preact, una alternativa a React
Además de estas tres vulnerabilidades en el proyecto principal de React, también monitoreamos una vulnerabilidad de seguridad de gravedad moderada en Preact, relacionada con la deserialización de datos no confiables. Como muchos desarrolladores prefieren Preact sobre React por ser más ligero y rápido, consideramos que valía la pena analizarlo más de cerca. Esta vulnerabilidad de gravedad moderada de Preact afecta a las versiones de la rama preliminar 10.0.0 de marzo y abril de 2019.
Te recomendamos encarecidamente descargar la versión completa del informe en formato digital. También publicamos las siguientes secciones generales como entradas de blog:
El estado de la seguridad de los frameworks de JavaScript: informe 2019
Angular vs. React: duelo de seguridad 2019
Comparación lado a lado de las vulnerabilidades de seguridad de Angular y React en 2019
Angular vs. React: el riesgo de seguridad de las dependencias indirectas
Comparación de las prácticas de programación segura de React y Angular
El 84 % de todos los sitios web se ve afectado por vulnerabilidades XSS de jQuery



