Skip to main content

Snyk fix: corrección automática de vulnerabilidades desde la CLI de Snyk

Escrito por

7 de octubre de 2021

0 minutos de lectura

Nos complace anunciar la beta abierta de un nuevo comando de la CLI de Snyk que hace que encontrar y corregir vulnerabilidades sea aún más fácil: el comando snyk fix.

La CLI de Snyk ya es una herramienta muy versátil y potente que los desarrolladores usan para encontrar y corregir vulnerabilidades en sus proyectos, ya sea manualmente en su entorno de desarrollo local o automáticamente como parte de un pipeline de CI/CD.

Con snyk test, los usuarios de Snyk pueden analizar su proyecto y obtener una lista de todas las vulnerabilidades detectadas. Si existe una ruta de actualización para una dependencia que corrija la vulnerabilidad, la CLI de Snyk mostrará estas recomendaciones, junto con toda la información necesaria sobre la ruta de actualización y la corrección de la vulnerabilidad.

El nuevo comando snyk fix lleva esto un paso más allá al aplicar estas recomendaciones automáticamente. Esto puede ser especialmente útil para quienes buscan aplicar correcciones rápidamente como parte de su flujo de trabajo de desarrollo local, o para quienes desean automatizar las correcciones como parte de su CI/CD.

Antes de profundizar, aquí tienes algunos detalles sobre la disponibilidad y los ecosistemas compatibles:

  • El comando snyk fix está en beta abierta, por lo que es posible que encuentres problemas al usarlo.

  • Actualmente, solo se admiten proyectos de Python que usan Pip, Pipenv y Poetry. Encontrarás más detalles en la documentación de snyk fix.

¡Comencemos!

Configura la CLI de Snyk

Primero, asegúrate de tener instalada la CLI de Snyk. Si ya la conoces y la tienes instalada, asegúrate de usar la versión v1.715.0 o una posterior.

Configurar la CLI de Snyk es sencillo. Puedes usar npm o Homebrew para instalarla rápidamente. Después, solo tendrás que autenticarte con tu cuenta de Snyk (si aún no tienes una, regístrate gratis aquí):

npm install -g snyk
snyk auth

Se abrirá tu navegador y te pedirá que autentiques la CLI. ¡Autentícala! Ya puedes empezar a usar la CLI de Snyk para analizar tus proyectos en busca de vulnerabilidades.

Probemos la CLI de Snyk por primera vez y ejecutemos una prueba. Para esta demostración, usaré esta bifurcación del proyecto PyGoat:

pip install -r requirements.txt
snyk test
Terminal ejecutando `snyk test` en un proyecto PyGoat, con una lista de ocho vulnerabilidades en dependencias, recomendaciones de actualización y un problema de licencia.

Como muestran los resultados de la prueba, la CLI de Snyk detectó 8 vulnerabilidades y ofrece recomendaciones de actualización para corregirlas.

¿Y ahora qué sigue? Al final de los resultados de la prueba, la CLI de Snyk recomienda habilitar el nuevo comando snyk fix, ¡y ese es nuestro próximo paso!

Habilita snyk fix

Como mencionamos al principio, el nuevo comando snyk fix está actualmente en beta abierta. Para usarlo, primero debes habilitar la función. Esto se hace desde Snyk Preview, un área específica de la interfaz de Snyk que brinda acceso a funciones nuevas que aún están en desarrollo.

En Snyk, ve a Settings y luego a Snyk Preview. En “Automatically apply recommended remediation in CLI”, habilita snyk fix (1) y luego haz clic en el botón Save changes (2) para aplicar el cambio.

Página de configuración de Snyk Preview que muestra activada la opción de remediación y resalta el botón Guardar cambios.

Corrige vulnerabilidades en tu entorno local

Ahora que habilitamos el nuevo comando, es hora de probarlo. En la CLI, escribe:

snyk fix 

La CLI de Snyk aplica automáticamente, cuando es posible, las actualizaciones de versión recomendadas para corregir las vulnerabilidades detectadas y muestra un resumen de los resultados:

Terminal que muestra el comando snyk fix actualizando dependencias de Python en requirements.txt y resolviendo correctamente seis problemas.

En nuestra aplicación PyGoat, se corrigieron 6 de las 8 vulnerabilidades. Al ejecutar otro análisis, vemos que quedan dos problemas: una vulnerabilidad de severidad media en el paquete Jinja2 y una licencia LGPLv3.0 en el paquete psycopg2.

Como siguiente paso, puedes pedirle a la CLI de Snyk que supervise continuamente el proyecto y te avise cuando haya una corrección disponible para esta vulnerabilidad pendiente, o cuando se detecten nuevas vulnerabilidades en estas dependencias. Para hacerlo, usa:

snyk monitor

Corrige vulnerabilidades como parte de tu CI/CD

También puedes usar el nuevo comando snyk fix para automatizar las correcciones como parte de tus pipelines de CI/CD. Veamos un ejemplo con GitHub Actions.

GitHub creó GitHub Actions para ayudar a los desarrolladores a automatizar sus flujos de trabajo de integración continua. Las acciones de GitHub de Snyk facilitan la integración de Snyk en estos flujos de trabajo y permiten analizar tus proyectos en busca de vulnerabilidades, todo como parte de tu flujo de trabajo de CI/CD automatizado y directamente desde GitHub. Ahora también puedes corregir vulnerabilidades como parte de este flujo.

En concreto, usaremos esta acción, que ejecuta el siguiente flujo de trabajo:

  • Init: para evitar actualizaciones incrementales de versiones, el flujo de trabajo comienza revisando el mensaje del último commit y así no vuelve a ejecutar snyk fix si el último commit ya fue una corrección automatizada.

  • Security: el flujo de trabajo ejecuta snyk fix para buscar vulnerabilidades y abrir un PR si encuentra una ruta de actualización.

Usar la acción es sencillo.

Las acciones de GitHub de Snyk usan una variable de entorno llamada SNYK_TOKEN. Este es tu token de API de Snyk. Deberás obtenerlo antes de configurar la acción de GitHub. Lo encontrarás en la interfaz de Snyk, en la página Settings.

Página de configuración de la cuenta de Snyk que muestra la sección del token de API con un token difuminado, la fecha de creación y el botón Revocar y regenerar

Cuando tengas el token, defínelo como secreto en la configuración de tu repositorio, en Settings | Secrets:

Formulario de secreto de GitHub Actions que muestra el nombre “SNYK_TOKEN” y un campo de valor difuminado.

Ya puedes configurar la acción de Snyk. En tu repositorio de GitHub, abre la pestaña Actions y haz clic en el botón New workflow, en la esquina superior izquierda.

GitHub te ofrecerá algunas acciones de plantilla según el lenguaje de programación del repositorio. Para configurar la acción de GitHub de Snyk, haz clic en set up a workflow yourself, en la parte superior de la página:

Página de configuración de GitHub Actions con una flecha que resalta el enlace «configura un flujo de trabajo por tu cuenta».

Reemplaza el código de ejemplo con este código (asegúrate de ingresar los nombres de tus ramas en los espacios correspondientes de la configuración):

name: Example workflow using Snyk fix
on: pull_request
jobs:
    init:
      runs-on: ubuntu-latest
      outputs:
        skip: ${{ steps.ci-skip-step.outputs.ci-skip }}
        skip-not: ${{ steps.ci-skip-step.outputs.ci-skip-not }}
      steps:
        - uses: actions/checkout@v2
          with:
            fetch-depth: 0
        - id: ci-skip-step
          uses: mstachniuk/ci-skip@master
          with:
            commit-filter: 'Merge pull request'
    security:
      runs-on: ubuntu-latest
      needs: init
      if: ${{ needs.init.outputs.skip == 'false' }}
      steps:
        - uses: actions/checkout@master
        - name: Run Snyk to check for vulnerabilities
          uses: snyk/actions/python-3.8@master
          env:
            SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
          with: 
            command: fix # adding this option to run snyk fix
            base: master    
        - name: create a PR
          uses: peter-evans/create-pull-request@v3
          with:
            base: main
        - name: get PR info
          run: |
            echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
            echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"      
        - name: Run a multi-line script
          run: |
            echo Add other actions to build,
            echo test, and deploy your project.

Eso es todo. Al confirmar el nuevo archivo, se abre un PR que activa el flujo de trabajo y simula la automatización de las correcciones con el comando snyk fix. Echa un vistazo a este flujo de trabajo, que muestra todos los pasos:

Trabajo de seguridad de GitHub Actions que muestra un flujo de trabajo de análisis de vulnerabilidades de Snyk exitoso y con todos los pasos completados.

Como se define en el flujo de trabajo, se abre un nuevo PR con las correcciones recomendadas:

pull request de GitHub que muestra actualizaciones de versiones de dependencias en un archivo requirements.txt

¡Prueba snyk fix!

Una de las razones por las que presentamos Snyk Preview fue para darles a los usuarios acceso anticipado a funciones que aún están en desarrollo y en beta. snyk fix es un gran ejemplo de una nueva función sobre la que nos gustaría recibir comentarios de la comunidad antes de lanzarla oficialmente. Pruébala y cuéntanos qué te parece en: snyk-fix-feedback@snyk.io

Encontrarás más detalles sobre cómo usar el nuevo comando y qué es compatible y qué no en nuestra documentación de snyk fix.

¡Felices correcciones!

Empieza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag viendo nuestro taller virtual introductorio a pedido.