Skip to main content

Angular vs. React: duelo de seguridad 2019

Escrito por
JavaScript Report feature

30 de octubre de 2019

0 minutos de lectura

Te damos la bienvenida al informe de Snyk sobre el estado de la seguridad de los frameworks de JavaScript 2019.

Descarga el informe aquí.

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.

Gráfico de líneas que muestra que las descargas de Angular v1.x se mantienen entre 1,5 y 2 millones, mientras que las versiones más recientes aumentan de 3 a 5,3 millones, de junio de 2018 a julio de 2019.

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.

Gráfico de barras de las vulnerabilidades de Angular 1.x por versión: 1.1 tiene 1, 1.2 tiene 4, 1.3 tiene 3, 1.4 tiene 1, 1.5 tiene 7 y 1.6 tiene 3.

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.

Terminal que muestra npm instalando angular@1.2.32, auditando un paquete y sin encontrar vulnerabilidades.

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

angular 1.6.0-rc.1


(versión preliminar)


21 nov. de 2016

MIT

3 moderadas


angular 1.6.0-rc.0


(versión preliminar)


27 oct. de 2016


MIT


3 moderadas


11 oct. de 2016


MIT


6 moderadas


11 oct. de 2016


MIT

3 altas
7 moderadas
1 baja

Veamos los siguientes resultados del análisis de Snyk para un proyecto de Angular:

Terminal que muestra un informe de auditoría de npm para Angular, con una vulnerabilidad de scripting entre sitios de gravedad alta y recomendaciones para corregirla.

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).

Salida de terminal que muestra a npm instalando paquetes de React, auditando 29 paquetes y detectando 0 vulnerabilidades

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:

Leer más

blog feature ai violet
Blog

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

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

blog feature snyk container custom base recommendations
Blog

Presentamos Evo Agentic AppSec: seguridad al ritmo del desarrollo con IA

El desarrollo impulsado por IA supera el ritmo de 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 definen el estándar.

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.