Análisis de seguridad de JHipster con Snyk
8 de octubre de 2020
0 minutos de lecturaJHipster es una plataforma de código abierto muy conocida que permite generar, desarrollar e implementar rápidamente aplicaciones web y de microservicios modernas. Con la CLI de JHipster, puedes elegir los frameworks y las plataformas que quieres usar para tus aplicaciones.
Combina fácilmente distintos frameworks. Por ejemplo, usa Java con Spring Boot para el backend, una base de datos MongoDB y Angular o React para el frontend. Al combinarlos con tu framework de pruebas favorito, se generará al instante una aplicación completa con todo el código base.

Crear aplicaciones con seguridad integrada
Crear el esqueleto de una aplicación y usar varios ecosistemas al mismo tiempo implica incorporar muchas dependencias de los ecosistemas elegidos. Es esencial vigilar el estado de tus dependencias. En particular, querrás recibir una notificación si alguna de esas dependencias tiene un problema de seguridad.

Analiza tu proyecto de JHipster desde la línea de comandos
Usaremos el escáner de vulnerabilidades gratuito de Snyk para probar las dependencias de la aplicación. Ya usaste npm para instalar JHipster, así que solo tienes que ejecutar este comando para instalar Snyk en tu equipo.
Lo primero que debes hacer es autenticarte. Necesitas una cuenta gratuita de Snyk para usar las funciones de análisis. Si escribes snyk auth, la CLI abrirá un navegador web donde podrás crear una cuenta gratuita o iniciar sesión. También puedes usar tu clave de API snyk auth <api key> si ya tienes una cuenta de Snyk, o configurarla como variable de entorno SNYK_TOKEN.
Cada vez que quieras analizar tu proyecto, solo tienes que ejecutar el siguiente comando.
Se recomienda usar la opción all-projects, ya que podrías tener más de un proyecto en la carpeta. Esto obliga a Snyk a buscar más de un archivo de manifiesto en el directorio actual y sus subdirectorios.
Si acabas de crear una pequeña aplicación monolítica con JHipster, es posible que tengas en la carpeta un archivo de manifiesto de Java para el backend y otro de Node.js para el frontend. Queremos analizarlos ambos.
El resultado del análisis te permite saber si incluiste bibliotecas con vulnerabilidades y si hay una forma sencilla de corregirlas. Pero, aunque todavía no haya una actualización directa disponible, es posible que puedas actualizar la biblioteca manualmente. Aquí encontrarás algunos ejemplos de cómo hacerlo con Maven.

Analiza tus dependencias en el flujo de CI/CD
Al ejecutar jhipster ci-cd, tienes varias opciones para configurar un pipeline de CI. También sería ideal analizar las dependencias como parte de este pipeline. En este ejemplo, usaremos Snyk para hacerlo. Solo necesitas una cuenta gratuita de Snyk para usar la clave de API.
En el siguiente ejemplo, te mostraremos cómo integrar la CLI en distintos pipelines que JHipster puede crear. Es la misma CLI que usamos hace poco en nuestro equipo local y genera resultados similares.
Además, probablemente quieras monitorear las dependencias después de compilar el binario. Como pueden aparecer vulnerabilidades con el tiempo, sería ideal monitorear las dependencias de forma continua. Te mostramos cómo hacerlo con snyk monitor en tu pipeline.
Jenkins
Al seleccionar un pipeline de Jenkins, se generará un nuevo archivo src/main/docker/jenkins.yml. Puedes ejecutar este contenedor de Docker con docker-compose -f src/main/docker/jenkins.yml up.
Al usar Jenkins, tienes dos opciones. Puedes instalar el plugin de Snyk en Jenkins desde la interfaz y configurarlo para usarlo en tu pipeline.
También puedes analizar tu aplicación con el binario de la CLI de Snyk y declararlo en el Jenkinsfile que genera el generador jhipster ci-cd.
Agrega las siguientes etapas a ese Jenkinsfile para descargar la versión más reciente de la CLI de Snyk y analizar con ella.
Nota: debes agregar el token de API de Snyk de tu cuenta gratuita como variable de entorno SNYK_TOKEN.

El Jenkinsfile contiene 3 tareas:
descargar el binario más reciente de la CLI de Snyk
Snyk Test: analizar tu aplicación y mostrar las vulnerabilidades
Snyk Monitor: crear una instantánea del estado actual y enviarla a Snyk para su monitoreo activo
Tanto en Snyk Test como en Snyk Monitor, puedes agregar --severity-threshold=<low|medium|high> para recibir notificaciones solo sobre vulnerabilidades de una gravedad determinada.
GitHub Actions
GitHub Actions es probablemente una de las formas más populares de crear un pipeline cuando usas GitHub como repositorio. Al elegir “Github Actions” en el generador jhipster ci-cd, JHipster generará el archivo .github/workflow/github-ci.yml. GitHub detectará los archivos YAML de esa carpeta de flujo de trabajo y los ejecutará como una “acción” después de cada push.

Hay varias formas de integrar Snyk en este flujo.
Acciones de GitHub independientes
Puedes crear acciones de GitHub independientes para las funciones de Snyk Test. Para ello, debes crear un archivo yml independiente en la carpeta de flujo de trabajo. La acción se ejecutará en paralelo con el pipeline creado por JHipster.
Según el ecosistema, tendrás que insertar una acción específica. Puedes encontrar ejemplos de estas acciones en este repositorio.
Integra las pruebas de Snyk en el pipeline generado
También puedes integrar Snyk como paso adicional en el pipeline generado por JHipster.
Primero, debes agregar tu token de API de Snyk a las variables de entorno. Puedes agregarlo en la sección env de tu script.
Como no quieres exponer tu token al mundo exterior, agrégalo a tus secretos. Para ello, selecciona Settings Secrets New secret.

Al agregar los siguientes pasos, podrás:
descargar el binario más reciente de la CLI
probar tu aplicación con Snyk Test
monitorear la instantánea actual con Snyk Monitor
También puedes instalar el binario con npm. Sin embargo, npm debe estar instalado en el pipeline. Esto ya ocurre si elegiste un frontend basado en JavaScript. En ese caso, puedes reemplazar el paso Install Snyk CLI por el siguiente:
Tanto en Snyk Test como en Snyk Monitor, puedes agregar --severity-threshold=<low|medium|high> para recibir notificaciones solo sobre vulnerabilidades de una gravedad determinada.
Travis CI
JHipster genera un archivo .travis si eliges esta opción en el generador jipster ci-cd. Puedes integrar Snyk fácilmente agregando lo siguiente a la sección script:

Debes agregar tu clave de API de Snyk como variable de entorno SNYK_TOKEN. Tanto en Snyk Test como en Snyk Monitor, puedes agregar --severity-threshold=<low|medium|high> para recibir notificaciones solo sobre vulnerabilidades de una gravedad determinada.
Circle CI
Al usar Circle CI, tienes 2 opciones. Puedes configurar tu instancia de Circle CI para usar Snyk Orb, como se describe en la documentación de integración. La otra opción es analizar con la versión más reciente de la CLI. Para hacerlo, agrega lo siguiente a tu archivo config.yml, creado por JHipster ci-cd.

Debes agregar tu clave de API de Snyk como variable de entorno SNYK_TOKEN. Tanto en Snyk Test como en Snyk Monitor, puedes agregar --severity-threshold=<low|medium|high> para recibir notificaciones solo sobre vulnerabilidades de una gravedad determinada.
GitLab CI
Para GitLab CI, también podemos integrar la CLI de Snyk para analizar tus proyectos en el pipeline de CI. En el archivo .gitlab-ci.yml generado por JHipster ci-cd, puedes agregar el siguiente ejemplo al final para analizar y monitorear tus proyectos.

Una vez más, debes agregar tu clave de API de Snyk como variable de entorno SNYK_TOKEN. Tanto en Snyk Test como en Snyk Monitor, puedes agregar --severity-threshold=<low|medium|high> para recibir notificaciones solo sobre vulnerabilidades de una gravedad determinada.
Conclusión
Es evidente que es importante revisar si tus bibliotecas de terceros tienen problemas de seguridad. Hay muchísimos ejemplos de casos en los que una biblioteca vulnerable que no se reemplazó por una versión corregida provocó un problema grave. Analizar con Snyk te ayuda a prevenirlo, tanto en tu equipo local durante el desarrollo como en tu pipeline de CI.
Como ves, analizar las dependencias de tu proyecto de JHipster es bastante sencillo. Si quieres ver los ejemplos de código de los pipelines de CI descritos en esta publicación, consulta este proyecto de ejemplo de JHipster. Desarrolla rápido con JHipster y mantén la seguridad con Snyk.
Introducción a Capture the flag
Aprende a resolver los desafíos de Capture the flag viendo nuestro taller virtual 101 bajo demanda.
