Cómo proteger aplicaciones JavaScript directamente desde la CLI
Gideon Idoko
24 de octubre de 2023
0 minutos de lecturaSegún el Informe sobre el estado de la seguridad del código abierto 2022 de Snyk, los proyectos de JavaScript tienen un promedio de 49 vulnerabilidades, incluidas algunas comunes como dependencias inseguras, cross-site scripting (XSS), validación débil de entradas y falsificación de solicitudes entre sitios (CSRF). Dado el uso generalizado de JavaScript, contar con medidas de seguridad sólidas es cada vez más importante para proteger tus aplicaciones de los ciberataques. Si bien es crucial implementar estas medidas durante el desarrollo, también es importante hacerlo desde el principio, y usar la CLI facilita el proceso.
Por eso, en este artículo te guiaremos por el proceso para proteger tus aplicaciones JavaScript con la CLI de Snyk.
¿Qué es la CLI de Snyk?
La CLI de Snyk es una herramienta potente que puede analizar y monitorear tus aplicaciones, contenedores e infraestructura como código (IaC) para detectar vulnerabilidades de seguridad. Como se integra sin problemas en tu flujo de trabajo de desarrollo, puedes ejecutarla de forma local o en tu canalización de integración y entrega continuas (CI/CD). Así puedes abordar de forma proactiva los problemas de seguridad desde las primeras etapas del proceso de desarrollo.
Al analizar tu proyecto JavaScript con la CLI de Snyk, esta compara las dependencias del proyecto con una amplia base de datos de vulnerabilidades de seguridad e informa cualquier problema. También ofrece información sobre cómo corregirlos. Esto puede implicar actualizar un paquete vulnerable a una versión segura o usar alternativas que no sean vulnerables.
Beneficios de usar la CLI de Snyk durante el desarrollo
Con la CLI de Snyk, puedes mejorar la seguridad, la confiabilidad y la velocidad de lanzamiento de tus proyectos. Estos son algunos de sus principales beneficios:
Análisis de seguridad del código y las dependencias: La CLI de Snyk analiza tu base de código y sus dependencias para detectar vulnerabilidades de seguridad conocidas, y proporciona detalles sobre los problemas, incluidos sus niveles de gravedad y las correcciones recomendadas.
Detección temprana de vulnerabilidades: Con la CLI de Snyk, puedes detectar vulnerabilidades en las primeras etapas del ciclo de desarrollo y abordarlas antes, con menos costos y esfuerzo.
Orientación para corregir vulnerabilidades: Además de identificar vulnerabilidades, la CLI de Snyk sugiere actualizaciones para las dependencias vulnerables o bibliotecas alternativas, lo que facilita la corrección de los problemas detectados.
Compatibilidad con requisitos de cumplimiento y prácticas recomendadas: Puedes realizar auditorías de seguridad y evaluar el cumplimiento mediante los informes que genera la CLI de Snyk, al mismo tiempo que te aseguras de seguir las prácticas recomendadas.
Compatibilidad con distintos lenguajes y ecosistemas: Gracias a su compatibilidad con varios lenguajes, puedes usar la CLI de Snyk para probar una amplia variedad de proyectos, como Java, Python, .NET, Ruby, PHP y muchos otros. Esto la convierte en una excelente opción para equipos que trabajan con varios lenguajes.
Experiencia pensada para desarrolladores: Los intuitivos comandos de terminal de la CLI de Snyk facilitan la integración de las comprobaciones de seguridad en el flujo de trabajo de desarrollo. Además de la CLI, también puedes usar Snyk en tu IDE mediante complementos y extensiones.
Cómo instalar la CLI de Snyk
Hay varias formas de instalar la CLI de Snyk en tu equipo, desde usar los ejecutables independientes disponibles hasta utilizar administradores de paquetes como Homebrew para macOS y Scoop para Windows.
Sin embargo, la forma más sencilla de instalar la CLI de Snyk para tu aplicación JavaScript es mediante la instalación global de npm o Yarn, ya que lo más probable es que ya tengas Node.js instalado. Asegúrate de usar la versión 12 o posterior de Node.js y ejecuta el siguiente comando para instalar la CLI de Snyk como paquete global de npm:
También puedes instalarla globalmente con Yarn. Para ello, ejecuta yarn global add snyk. Consulta la guía de instalación de la CLI de Snyk para obtener más información.
Cómo corregir vulnerabilidades de JavaScript con la CLI de Snyk
Ahora que instalaste la CLI de Snyk, explora sus funciones probándola con un proyecto JavaScript de ejemplo.
Configura un proyecto JavaScript de ejemplo de forma local
Para que puedas configurar rápidamente un proyecto y probarlo con la CLI de Snyk, hay un proyecto JavaScript de ejemplo disponible en este repositorio de GitHub, con todos los archivos de manifiesto necesarios. El proyecto es una API sencilla de citas que usa Lodash y Express como dependencias. La API de citas tiene un endpoint GET / que devuelve una lista de citas y un endpoint GET /random que devuelve una cita aleatoria.
El proyecto usa Docker para la contenerización y Kubernetes como parte de su infraestructura. La forma más sencilla de configurar Docker y Kubernetes en tu equipo local es instalar Docker Desktop y habilitar Kubernetes en la configuración:

Para configurar el proyecto JavaScript de ejemplo, clona el repositorio en tu equipo local:
Luego, ve al directorio del proyecto e instala sus dependencias:
Ten en cuenta que el código JavaScript del proyecto está en el archivo server.js. Ejecuta npm start para iniciar la aplicación en el puerto 3000:

Ahora, crea e inicia un contenedor para la aplicación con el siguiente comando de Docker:
Este comando crea una imagen de Docker vulnnode a partir de Dockerfile, la ejecuta y expone el contenedor en el puerto 4000.
Por último, crea un recurso de Kubernetes para la aplicación:
Este código usa el archivo de manifiesto kube.yml y deja la aplicación disponible en el puerto 5000. Ya tienes todo listo; es hora de analizar el proyecto.
Autentica tu equipo
La CLI de Snyk debe estar vinculada a una cuenta de Snyk, por lo que tienes que autenticar tu equipo antes de usarla. Si no tienes una cuenta, regístrate para obtener una cuenta gratuita de Snyk y sigue los pasos. Después de iniciar sesión, abre la terminal y autentica la CLI de Snyk con este comando:
Se abrirá una página web en tu navegador. Haz clic en el botón Authenticate y la CLI de Snyk quedará autenticada.
Si este método de autenticación no funciona, puedes usar tu token de API directamente. Ve a Account Settings > General > API Token y copia tu token de API. Luego, autentícate con el token desde la terminal de la siguiente manera:
En este punto, deberías recibir un mensaje que indique que tu cuenta se autenticó y que la CLI está lista para usarse. Explora los comandos de la CLI de Snyk que te ayudarán a probar tu proyecto JavaScript.
snyk test
El comando snyk test valida el software de código abierto para detectar fallas de seguridad y licencias. Analiza las dependencias del proyecto para identificar vulnerabilidades de seguridad conocidas. También informa sobre esas vulnerabilidades, por ejemplo, sus tipos, descripciones, rutas de archivos vulnerables y pasos para corregirlas.
Cuando ejecutas snyk test , la CLI de Snyk intenta detectar automáticamente los archivos de manifiesto con dependencias (como el archivo package.json del proyecto que configuraste) y analizarlos. Nota: Snyk busca dependencias locales para detectar vulnerabilidades. Por eso descargamos las dependencias del proyecto durante la configuración.
Para analizar el proyecto, ejecuta el comando de prueba en el mismo directorio:
Verás un resultado similar a este:

Snyk analizó las dependencias del proyecto, encontró algunos problemas e informó sobre ellos con una descripción que incluye el ID del problema, su gravedad y un enlace para obtener más información.
Todos los problemas están agrupados en una sección llamada Issues to fix by upgrading, lo que significa que actualizar las bibliotecas relacionadas con esos problemas elimina una o varias vulnerabilidades. Más adelante aprenderás en detalle cómo corregirlos.
Los problemas del análisis también pueden agruparse en otras secciones, como las siguientes:
Patchable issues significa que no hay una actualización disponible para corregir el problema, pero puedes usar un parche como solución alternativa.
Issues with no direct upgrade or patch significa que no hay una actualización ni un parche disponible para corregir el problema. Puedes conservar la dependencia o reemplazarla por una alternativa.
Nota: Si prefieres que el resultado esté en un archivo JSON, solo tienes que agregar la opción --json-file-output=./path/to/file.json al comando de la CLI de Snyk.
En una canalización de CI/CD, puedes ejecutar snyk test para detener la canalización si el proyecto contiene vulnerabilidades; es decir, si el código de salida del comando de prueba no es 0.
snyk monitor
Cuando ejecutas el comando snyk monitor, captura una instantánea de tu proyecto y envía los datos a Snyk. Es importante entender que snyk monitor no está pensado para reemplazar a snyk test, ya que su propósito principal es crear una instantánea y darle seguimiento a lo largo del tiempo. Es una herramienta valiosa para usar antes de implementar en producción. Además, Snyk te mantiene al tanto y te notifica mediante el método de contacto que prefieras cuando se identifica una nueva vulnerabilidad o una corrección pertinente para tu proyecto.
Para asegurarte de que la instantánea se guarde en la ubicación correcta, te recomendamos especificar información adicional, como la organización (--org) y el nombre del proyecto (--project-name).
Para ver snyk monitor en acción, ejecuta el siguiente comando:
Reemplaza <YOUR_ORG> por la organización en la que quieres guardar la instantánea del proyecto. Después de ejecutar el comando, recibirás un enlace a la instantánea en la respuesta, como este:

Sigue el enlace para ver la instantánea en tu panel de Snyk:

snyk ignore
En ciertos casos, no existe un parche ni una actualización para corregir una vulnerabilidad, o consideras que no es posible explotarla en tu aplicación. Si esto ocurre, puedes indicarle a Snyk que ignore la vulnerabilidad durante un periodo determinado. Con el comando snyk ignore, puedes gestionar problemas conocidos o falsos positivos que no se puedan corregir de inmediato o que no sean relevantes para el contexto de tu proyecto.
Al usar snyk ignore, debes identificar el problema con su ID de vulnerabilidad. Puedes obtenerlo en el resultado del comando snyk test. Por ejemplo, la vulnerabilidad de denegación de servicio mediante expresiones regulares (ReDoS) asociada con la versión actual del paquete Lodash del proyecto tiene el ID SNYK-JS-LODASH-1018905, así que puedes ignorarla ejecutando este comando:
En este caso, la opción --expiry especifica durante cuánto tiempo se debe ignorar el problema, y la opción --reason indica el motivo. Este comando crea un archivo de políticas .snyk con información sobre la vulnerabilidad en el directorio raíz. Así se evita que la vulnerabilidad se vuelva a señalar al ejecutar snyk test.
snyk container
La CLI de Snyk tiene dos comandos para contenedores (test y monitor) que analizan y monitorean imágenes de contenedores locales o remotas, como las imágenes de Docker, para detectar vulnerabilidades conocidas. La sintaxis de ambos comandos es la siguiente:
Como configuraste la imagen con el nombre vulnnode, analízala con este comando:
Deberías ver un resultado similar a este:

Más adelante en este artículo aprenderás a corregir estos problemas. Al igual que con el comando snyk monitor, puedes monitorear y crear instantáneas de la imagen del contenedor vulnnode con el siguiente comando:
snyk iac
Con IaC, los recursos en la nube, las redes y las configuraciones no se configuran manualmente; se administran y aprovisionan mediante código. El comando snyk iac identifica vulnerabilidades de seguridad en tus archivos de configuración. Así puedes corregir las configuraciones incorrectas antes de que se conviertan en un riesgo de seguridad.
Analiza el archivo de IaC de Kubernetes con el siguiente comando:
Verás un resultado similar a este:

Ahora que analizaste el proyecto JavaScript, veamos cómo puedes corregir algunos de los problemas que identificaste.
Cómo corregir problemas de seguridad en tu proyecto de JavaScript
Al comenzar con el comando snyk test, Snyk CLI indica que los problemas identificados en el resultado se pueden corregir actualizando express de v4.17.1 a v4.18.2 y lodash de v4.17.4 a v4.17.21. Actualiza las versiones en tu package.json y vuelve a instalar con npm install.
Vuelve a ejecutar snyk test después de reinstalar y obtendrás un resultado como este:

Y eso es todo lo que tienes que hacer para resolver las vulnerabilidades del proyecto. Nota: Si conectas tu repositorio de Git con Snyk a través de app.snyk.io, Snyk creará automáticamente nuevos pull requests con actualizaciones de dependencias que corrigen los problemas de seguridad en el archivo de manifiesto package.json.
Con el comando de prueba snyk container, los problemas detectados se deben a la aplicación en la imagen y a la imagen base que se utiliza:

La imagen base actual tiene un problema crítico, cuatro de gravedad alta y tres de gravedad media. Se recomienda eliminar cuanto antes los problemas críticos y de gravedad alta, ya que podrían afectar gravemente tu aplicación si alguien los explota.
Para corregir los problemas del contenedor, puedes actualizar la imagen base en el Dockerfile a una de las sugeridas, como node:20.5-bookworm-slim:
Nota: Si conectas tu repositorio de Git con Snyk a través de app.snyk.io, Snyk creará automáticamente nuevos pull requests con actualizaciones del Dockerfile que corrigen los problemas de seguridad para que las integres.
Vuelve a crear la imagen del contenedor con lo siguiente:
Vuelve a ejecutar la prueba del contenedor y esta vez obtendrás un resultado como este:

Esta solución elimina los problemas críticos y de gravedad alta. Los 28 problemas que quedan son de prioridad baja, por lo que no representan un impedimento.
Por último, con el comando snyk iac test, los problemas detectados se deben a algunas configuraciones que no se incluyeron en el archivo de manifiesto kube.yml:

Estos problemas tienen prioridad media. Intenta corregir dos de ellos con la solución recomendada por Snyk CLI. Abre el archivo kube.yml y actualiza el contenedor:
Vuelve a ejecutar snyk iac test kube.yml y deberías obtener lo siguiente:

Esto redujo los problemas a dos de prioridad media que se pueden ignorar.
Para terminar
En este artículo, aprendiste cómo proteger tus aplicaciones de JavaScript mediante el análisis con Snyk CLI para identificar vulnerabilidades.
¿Te encanta la terminal? Ahora puedes usar Snyk CLI fácilmente para proteger tu código, aplicaciones, contenedores y archivos de IaC. Snyk CLI es un aliado formidable que permite a los desarrolladores proteger sus proyectos frente a posibles amenazas e integrarse sin problemas en sus flujos de trabajo de desarrollo. Regístrate gratis hoy.
Empieza a proteger tus aplicaciones JavaScript
Encuentra y corrige vulnerabilidades de JavaScript gratis con Snyk.
No necesitas tarjeta de crédito.
O regístrate con Azure AD Docker ID Bitbucket
Al usar Snyk, aceptas cumplir nuestras políticas, incluidos nuestros Términos del servicio y nuestra Política de privacidad.



