Vulnerabilidades de los paquetes npm

Vulnerabilidades de los paquetes npm: cómo encontrarlas y solucionarlas antes de su lanzamiento.

TL; DR

Encontrar vulnerabilidades en los paquetes npm es fácil. npm audit Lo hace en cuatro segundos y te entrega 400 resultados. La parte difícil son las dos preguntas siguientes: ¿a cuáles de ellas se puede acceder realmente en tu aplicación y qué actualización soluciona el problema sin interrumpir la compilación?

  • La mayor parte de la lista no es problema tuyo. Aplicar la accesibilidad y el contexto de ejecución a los hallazgos "críticos" deja una pequeña fracción que sigue siendo crítica. El análisis del gráfico de llamadas es lo que te indica cuáles son.
  • npm audit fix --force no es una estrategia fija. Resuelve los avisos saltándose versiones principales, que es como una tarea de seguridad se convierte en una interrupción del servicio.
  • Las dependencias transitivas son donde reside el volumen. No los elegiste, a menudo no puedes mejorarlos directamente y dominan el recuento de hallazgos.
  • Corregir antes de la fusión, no después del lanzamiento. Una puerta en CI y un sistema automatizado pull request Cuesta minutos. Un parche de producción cuesta un fin de semana.

Por qué el recuento de hallazgos no es el problema

Todos los proyectos de Node que superan su primer año ofrecen la misma experiencia. Se realiza un escaneo, se obtienen cientos de vulnerabilidades en los paquetes npm, y la lista es tan extensa que la respuesta lógica es cerrar la terminal.

Esa reacción es correcta, y ahí radica la incomodidad. Casi tres cuartas partes de los repositorios de código contienen componentes de código abierto de alto riesgo, y la mayor parte de lo que un escáner reporta en un día cualquiera se encuentra realmente en el árbol de dependencias. La lista es precisa. Simplemente no es una cola de trabajo.

La diferencia entre una lista precisa y una lista práctica radica en el contexto, y todo se reduce a un puñado de preguntas.

  • ¿Es realmente accesible el código vulnerable desde mi aplicación?
  • ¿Hay alguien que esté aprovechando esto en la práctica?
  • ¿Importa para el negocio aquello a lo que afecta?

Un escáner que no puede responder esas entregas te da un inventario y lo llama informe.

Cómo comprobar si los paquetes npm son vulnerables

Existen cuatro maneras prácticas de comprobar si los paquetes npm presentan vulnerabilidades, y cada una responde a preguntas diferentes.

MétodoLo que te aportaDónde se detiene
npm auditInstantáneo, integrado, sin configuración. Avisos sobre todo el árbol de dependencias.Sin accesibilidad, sin contexto de explotación. Solo gravedad y --force romperá cosas
Alertas de DependabotAlertas automáticas en su repositorio, con la actualización pull requestsBasado en recomendaciones. No sabe si su código llama a la función vulnerable.
OSV o el Base de datos de asesoramiento de GitHubAutorizado, gratuito, consultable por paquete y versión. Útil para comprobaciones puntuales.Una base de datos, no un flujo de trabajo. Todavía se prioriza y se soluciona manualmente.
SCA con accesibilidadLos mismos avisos, filtrados según si el código vulnerable es invocable, además de la probabilidad de explotación y una ruta de actualización segura.Requiere una herramienta en el pipeline

Comience con npm audit Porque no cuesta nada y solo toma unos segundos. Pero no te detengas ahí, porque la respuesta que da es "aquí está todo", y "todo" no es un plan.

Un detalle importante a tener en cuenta si se utilizan fuentes de avisos: la base de datos de avisos de GitHub contiene avisos de malware para el ecosistema npm, pero Dependabot no genera alertas deliberadamente, ya que un usuario final generalmente no puede resolverlos actualizando. Se trata de una deficiencia estructural, no de una configuración que se pueda activar. Los paquetes maliciosos requieren un control diferente: detección en el momento de la publicación en lugar de después de la divulgación. Alerta temprana de malware Analiza los paquetes recién publicados en npm, PyPI, Maven y otros registros en el momento en que aparecen, utilizando análisis de comportamiento y anomalías en lugar de esperar una firma, y ​​está incluido en el plan gratuito para desarrolladores. Lo cubrimos en malicioso Paquetes npm.

Los filtros que convierten 400 resultados en una lista corta.

Esta es la parte que cambia la forma en que trabaja un equipo.

FiltrarLa pregunta que respondeLo que normalmente elimina
Accesibilidad¿Puede la ejecución en mi aplicación realmente alcanzar la función vulnerable?El recorte más grande. La mayoría de las advertencias se encuentran en el código que la aplicación nunca llama.
Disponibilidad de exploits¿Existe alguna vulnerabilidad pública que funcione, y se está explotando actualmente en la práctica?Separa el riesgo teórico del riesgo de armamento. Un hallazgo con una vulnerabilidad pública se salta la cola, independientemente de su puntuación de gravedad.
Probabilidad de explotación (EPSS)¿Qué probabilidades hay de que se produzca explotación en estado salvaje en los próximos 30 días?Hallazgos de alta gravedad que nadie está aprovechando, que rara vez son noticia esta semana.
Contexto empresarial¿Importa el servicio afectado y está expuesto?Hallazgos alcanzables y explotables en sistemas que no conllevan riesgos significativos.
Disponibilidad de solución¿Existe alguna versión que solucione esto sin causarme problemas?Separa lo que puedes cerrar hoy de lo que necesita una solución alternativa.
  • Accesibilidad Es el primer y mayor recorte. Una vulnerabilidad en un paquete del que dependes solo es explotable si la ejecución puede alcanzar la función vulnerable. El rastreo del grafo de llamadas responde a esta pregunta a nivel de función, en lugar de adivinarla a partir del manifiesto, y distingue los componentes que realmente utilizas de los que simplemente están presentes. El análisis de accesibilidad de Xygeni reduce los falsos positivos hasta en un 70 %.
  • Disponibilidad de exploits Es la segunda cuestión, y se trata de un hecho, no de una predicción. Una vulnerabilidad pública en funcionamiento, o una explotación confirmada en la práctica, cambia la prioridad de un hallazgo independientemente de su puntuación de gravedad. Esta distinción ha dejado de ser una buena práctica para convertirse en una obligación: según la Ley de Resiliencia Cibernética, un fabricante que detecta una vulnerabilidad explotada activamente en su producto tiene un plazo de 24 horas para informar. Un programa que no puede diferenciar entre "explotación activa" y "alta puntuación CVSS" no puede cumplir con este plazo.

  • La probabilidad de explotación es el tercer factor, y se trata de la misma pregunta, pero con la predicción incluida. La puntuación EPSS mide la probabilidad de que una vulnerabilidad sea explotada en la práctica en los próximos 30 días, lo cual es muy diferente a la cuestión de cuán grave sería si ocurriera. Una puntuación CVSS alta con una puntuación EPSS insignificante rara vez es el resultado habitual.

  • Contexto empresarial Es la tercera, y es la que ninguna fuente genérica puede proporcionar. Una vulnerabilidad accesible y explotable en un servicio de pago con acceso a internet no es lo mismo que el mismo CVE en una herramienta de informes interna.

Aplicados en conjunto, estos filtros transforman una lista que nadie lee en una lista que alguien termina de leer. El contexto de tiempo de ejecución y accesibilidad generalmente deja solo una pequeña minoría de hallazgos "críticos" que siguen siéndolo. Xygeni trata la accesibilidad, la disponibilidad de exploits, el EPSS y el contexto empresarial como etapas configurables en un embudo de priorización, hasta ocho de ellas, de modo que "accesible y explotado activamente" se convierte en una cola permanente en lugar de una consulta que alguien ejecuta manualmente.

Solucionar vulnerabilidades de paquetes npm sin interrumpir la compilación.

Encontrarlas es la parte fácil. La razón por la que las vulnerabilidades de los paquetes npm permanecen sin resolver durante meses es que solucionarlas conlleva sus propios riesgos, y los desarrolladores lo saben.

Opción de reparaciónCuando es correctoQué revisar primero
npm audit fixEl aviso se resuelve dentro de un rango compatible con semver.Generalmente seguro. Vuelva a ejecutar las pruebas y luego fusione.
npm audit fix --forceCasi nunca, sin protecciónSe aplica a versiones principales. Considere cada resultado como un cambio incompatible hasta que se demuestre lo contrario.
Actualización directa dirigidaUsted es el propietario de la dependencia y existe una versión parcheada.¿Qué vulnerabilidades desaparecen, cuáles nuevas surgen y si el salto rompe tu código?
Resolución transitivaEl paquete vulnerable está cuatro niveles más abajo y no es tuyo.La ruta de actualización más corta en el árbol que lo resuelve, o una anulación si no existe ninguna.
No hay solución disponibleEl responsable del mantenimiento no lo ha parcheado.Si es accesible en absoluto. Si no lo es, documéntelo y siga adelante en lugar de forzar una actualización.
Eliminar la dependenciaEl paquete apenas se usa o está abandonado.Si algo todavía lo llama. Los componentes no utilizados son los hallazgos más baratos para cerrar

La pregunta clave antes de cualquier actualización no es "¿corrige esta versión la vulnerabilidad CVE?". Son tres preguntas a la vez: ¿qué vulnerabilidades desaparecen con esta versión?, ¿qué nuevas vulnerabilidades aparecen con ella? y ¿el cambio de versión afecta negativamente a mi código?

xygeni muestra los tres para cada dependencia vulnerable, por lo que la elección es entre opciones visibles en lugar de un salto. Luego, Autofix genera el pull request Con la versión parcheada, la remediación masiva aplica múltiples correcciones en una sola acción, y el Bot Xygeni se ejecuta bajo demanda, en pull requests o diariamente, de modo que la acumulación de tareas pendientes se reduce sin que nadie tenga que programarlas.

En el caso de dependencias transitivas, donde no se puede simplemente actualizar a una versión que no se ha elegido, el resultado útil es la ruta de actualización más corta en el árbol que resuelve la advertencia, no una alerta que indique que un paquete cuatro niveles más abajo es vulnerable.

Antes del envío: ¿Dónde va el cheque?

“Antes del envío” es una cuestión de programación, y se reduce a tres ubicaciones.

  • En el IDE, por lo que un desarrollador ve el problema al elegir la dependencia, que es el momento más económico para cambiarla.
  • En la pull requestdonde un bot comenta sobre los cambios y abre la corrección, y donde una puerta de seguridad puede provocar el fallo de una compilación si se detectan hallazgos que superan un umbral. La limitación basada únicamente en la gravedad es lo que hace que los equipos desactiven la puerta. La limitación basada en hallazgos accesibles y explotables es lo que hace que la mantengan.
  • Continuamente después del lanzamiento, Porque una dependencia que era segura al momento de la fusión se vuelve vulnerable el día en que se publica un aviso. El monitoreo continuo en todos los registros es lo que lo detecta, sin que nadie tenga que acordarse de volver a escanear.

Y la salida de los tres pertenece a una cola priorizada junto con la suya. SAST, Secretos, y hallazgos de contenedores, incluyendo los ingeridos desde herramientas que ya ejecutas. Un lista de vulnerabilidades Esa lista, que reside en su propia consola, compite por la atención con el trabajo que se suponía que debía informar.

Envíen la solución, no el hallazgo.

Un escáner que te muestra 400 vulnerabilidades en paquetes npm no ha hecho el trabajo. Simplemente lo ha trasladado.

Xygeni reduce los hallazgos de dependencias por accesibilidad, probabilidad de explotación y contexto empresarial, muestra qué corrige cada actualización y qué podría romper, y abre el pull request con la versión parcheada. Se ejecuta en tu pipeline, produce SBOM y la salida de VDR en SPDX y CycloneDX, la evidencia que solicitan CRA, NIS2 y DORA, y coloca los hallazgos de dependencia en la misma cola priorizada que el resto de su riesgo, incluidos los hallazgos de escáneres que no está reemplazando.

Empieza gratis y escanear un repositorio, o mira cómo la accesibilidad cambia la lista.

Preguntas Frecuentes

¿Cómo puedo comprobar si los paquetes npm tienen vulnerabilidades?

Ejecutar npm audit Para una visualización instantánea, utilice una herramienta con análisis de accesibilidad para reducir la lista a los hallazgos donde el código vulnerable pueda ser invocado. Las bases de datos de avisos como OSV y la base de datos de avisos de GitHub son útiles para verificar un paquete y una versión específicos.

Is npm audit fix ¿Es seguro correr?

La versión no forzada suele ser segura, ya que se mantiene dentro de los rangos compatibles con semver. npm audit fix --force No es así: se actualiza a través de las versiones principales para resolver las advertencias, y de ahí provienen los cambios incompatibles.

¿Por qué tengo tantas vulnerabilidades en los paquetes npm?

Porque la mayoría son transitivas. Instalas unas pocas dependencias directas y heredas cientos de indirectas, cada una con su propio historial de recomendaciones. El volumen es normal. Lo que falta es la priorización.

¿Qué es el análisis de accesibilidad?

Determinar si la ejecución en tu aplicación puede realmente alcanzar la función vulnerable en una dependencia. Es la mayor reducción de ruido disponible en la seguridad de dependencias, ya que la mayoría de las vulnerabilidades reportadas se encuentran en código que tu aplicación nunca llama.

¿Debo usar CVSS o EPSS para priorizar?

Ambos, pero para cosas diferentes. CVSS describe la gravedad de una vulnerabilidad si se explotara. EPSS estima la probabilidad de explotación en los próximos 30 días. La gravedad sin probabilidad genera una cola ordenada por el eje incorrecto.

¿Con qué frecuencia debo comprobar si hay vulnerabilidades en los paquetes de npm?

De forma continua, sin un horario fijo. Un escaneo limpio el lunes no significa nada el miércoles si aparece una advertencia en un paquete que ya enviaste.

sca-tools-software-herramientas-de-analisis-de-composicion
Priorice, solucione y proteja sus riesgos de software
Obtén tu cuenta gratuita.
Sin tarjeta de crédito.

Asegure el desarrollo y entrega de software

con la suite de productos Xygeni