npm audit y la falacia de seguridad

La importancia de indagar en las vulnerabilidades que se presentan al programar en un proyecto Javascript.

hace 9 meses   •   2 min de lectura

Por Andrés Tuñón
Tabla de contenidos

npm audit ¿eso se come?

Npm es el que administra las dependencias de un proyecto Javascript, es como Nuget para C# o Composer para PHP.

Uno de sus comandos es npm audit que se encarga de revisar las vulnerabilidades del proyecto, este se ejecuta cada vez que instalas las dependencias de tu proyecto.

Por ejemplo, digamos que creamos un proyecto en Angular 11 y luego ejecuto npm audit para revisar lo seguro que es Angular.

npm audit sobre un proyecto generado en Angular 11
npm audit sobre un proyecto generado en Angular 11

Como puedes apreciar, hay dos vulnerabilidades moderadas relacionadas a Regular expression denial of service.

¡Oh no! mi proyecto es inseguro y apenas lo generé, pero que le pasa al equipo de Angular;  antes de que vayas a funarlos en twitter déjame aclararte un punto o dos...

Te estas comiendo una falacia con patatas

Regular expression denial of service es una vulnerabilidad y es peligroso, pero veamos el contexto.

meme de Peter B. Parker 'sucking fingers'
meme de Peter B. Parker 'sucking fingers'

Recapitulemos y veamos a detalle las vulnerabilidades que detalla npm audit:

  • @angular-devkit/build-angular > webpack > watchpack > watchpack-chokidar2 > chokidar > glob-parent
  • @angular-devkit/build-angular > webpack-dev-server > chokidar > glob-parent

El problema está sobre la dependencia glob-parent; que en resumen, permite expresiones regulares tomar mucho tiempo para ser recorridas debido a todas las posibles combinaciones.

Todo esto sobre una dependencia que se utiliza solo en desarrollo (fíjate en las librerías y la fila de "Dependency of"), es tan solo el servidor local que utilizas para levantar la aplicación y ver que todo funciona. El Express buscando tus archivos generados. ¿Queda claro que eso nunca se publica verdad?

¿Cómo evito esto?

Por el momento npm audit --production es tu solución; ya que solo evalua las dependencias principales, evitando las del ambiente de desarrollo.

Hay frameworks como Next.js que tienen otras estrategias para combatir este problema. Si deseas ver más ejemplos y saber más al respecto te dejo un enlace al final.

Y esto no solo se queda aquí

He tratado con especialistas de seguridad, que justamente indagan sobre estas vulnerabilidades en ambiente de desarrollo. Incluso me han pedido actualizar de una versión LTS a una versión llena de actualizaciones... que gran ironía.

Así que colegas no crean en todo lo que les dicen, siempre analicen lo que se les presenta.

Referencias

npm audit: Broken by Design
Found 99 vulnerabilities (84 moderately irrelevant, 15 highly irrelevant)

Corre la voz

Sigue leyendo