Skip to main content

Dependencias de Gradle: análisis con el nuevo plugin de Snyk para Gradle

Escrito por
Blog illustrations gradle feature

23 de octubre de 2020

0 minutos de lectura

Gradle es uno de los principales sistemas de compilación, tanto en el ecosistema de Java como en el desarrollo de Android. Con Gradle, puedes administrar las dependencias, compilar y probar tu proyecto.

Es importante analizar las dependencias de tu proyecto para detectar vulnerabilidades de seguridad conocidas. El momento ideal para empezar a analizarlas es justo cuando las importas. Para eso, creamos un plugin para Gradle con el que puedes analizar tu aplicación en busca de vulnerabilidades de seguridad en bibliotecas de terceros como parte de tu ciclo de compilación.

Plugin de Snyk para Gradle

El plugin de Snyk para Gradle está publicado en el portal de plugins de Gradle, por lo que es fácil incluirlo en tu proyecto de Gradle.

Página del plugin de Gradle para io.snyk.gradle.plugin.snykplugin, que muestra detalles del análisis de vulnerabilidades de Snyk, la versión 0.4 y etiquetas de seguridad

Para usarlo, solo tienes que declarar el plugin con el DSL de plugins.

Groovy:

plugins {
  id "io.snyk.gradle.plugin.snykplugin" version "0.4"
}

Kotlin:

plugins {
  id("io.snyk.gradle.plugin.snykplugin") version "0.4"
}

Configuración

Para usar el plugin necesitas una cuenta de Snyk. Si todavía no tienes una, puedes crearla aquí. ¿Ya mencioné que una cuenta de Snyk es totalmente gratis?

Hay varias formas de configurar tu clave de API:

Puedes configurarla directamente en tu archivo de Gradle, como te mostraré más adelante. Sin embargo, quizás quieras evitar que este token quede expuesto públicamente, por ejemplo, si tu proyecto es de código abierto.

La alternativa es configurar una variable de entorno SNYK_TOKEN que contenga la clave de API. Este también es el método recomendado si quieres usar el análisis de Snyk en tu pipeline de CI.

Configuración del plugin de Snyk

Si configuraste la clave de API como variable de entorno, puedes usar el plugin de inmediato. De todos modos, te explicaré cómo ajustar algunas de sus opciones.

Agrega un objeto de extensión snyk a tu archivo de Gradle.

Groovy:

snyk {
    api = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
    severity = 'low'
    autoDownload = true
    autoUpdate = true
    arguments = '--all-sub-projects'
}

Kotlin:

configure<io.snyk.gradle.plugin.SnykExtension> {
   setApi("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
   setSeverity("high")
   setAutoDownload(true)
   setAutoUpdate(true)
   setArguments("--all-sub-projects")
}
  • apiEs la clave de API de Snyk. Puedes configurarla aquí o dejar este campo vacío y configurar la variable de entorno SNYK_TOKEN que contiene la clave de API.

  • severityEs el umbral de gravedad sobre el que quieres recibir una advertencia. Puede ser bajo, medio o alto. Se mostrarán todas las vulnerabilidades que tengan la gravedad elegida o una mayor, y la compilación fallará. Si omites esta opción, se mostrarán todas las vulnerabilidades detectadas, pero la compilación no fallará.

  • autoDownloadSnyk usa el binario de la CLI para realizar el análisis. Si instalaste la CLI por separado, por ejemplo, con npm, el plugin de Gradle usará esa instancia. Si no encuentra la CLI en tu sistema, el plugin de Gradle descargará automáticamente la versión más reciente. Esta propiedad es true de forma predeterminada, así que no hace falta especificarla. Si no quieres que se descargue automáticamente, especifica esta propiedad y configúrala como false.

  • autoUpdateSi no tienes la CLI de Snyk preinstalada y el plugin la descarga automáticamente, también puede actualizarla cuando haya una versión más reciente. De forma predeterminada, esta propiedad está configurada como false. Ten en cuenta que autoUpdate no funciona si ya instalaste manualmente la CLI de Snyk, por ejemplo, con npm.

  • argumentsEl plugin de Gradle usa la CLI de Snyk internamente. Esta propiedad te permite configurar argumentos adicionales para la CLI, si los necesitas. Consulta la referencia de la CLI para obtener más información sobre las opciones disponibles. Consejo: si usas subproyectos en Gradle, configura la propiedad arguments como --all-sub-projects, tal como se muestra en el ejemplo anterior. Así se analizarán todos los subproyectos de Gradle.

Ejecutar el plugin de Snyk

El plugin de Snyk agrega dos tareas nuevas:

  • snyk-test

  • snyk-monitor

Puedes agregar cualquiera de estas tareas por separado o encadenarlas:

$ gradle snyk-test
$ gradle clean build snyk-test

Snyk test

La tarea Snyk test analiza tus dependencias y comprueba si hay vulnerabilidades conocidas, tanto en las dependencias de primer nivel como en las transitivas. Si encuentra vulnerabilidades que coinciden con el nivel de gravedad elegido o lo superan, las mostrará en la consola y la compilación fallará.

Si quieres recibir advertencias sobre las dependencias sin que falle la compilación, omite la configuración de gravedad.

Terminal que muestra una tarea de prueba de Gradle fallida y un informe de vulnerabilidades de dependencias que identifica una ruta vulnerable.

Snyk monitor

Snyk monitor también recopila todas tus dependencias de la misma manera que la tarea snyk-test. Sin embargo, guarda una instantánea de ese momento en tu cuenta de Snyk y la monitorea. A medida que se detecten nuevas vulnerabilidades o se corrijan las existentes, recibirás notificaciones automáticamente. Es ideal cuando publicas una versión en producción y quieres seguir monitoreándola. Snyk monitor NO hará que falle la compilación; solo monitorea.

Encadenamiento

Puedes encadenar las nuevas tareas de Snyk con otras tareas existentes para que los análisis se ejecuten automáticamente. En el siguiente ejemplo, conecto la tarea snyk-test con la tarea test habitual del archivo de Gradle.

Groovy:

test.finalizedBy('snyk-test')

Kotlin:

tasks.test {
   finalizedBy(tasks.`snyk-test`)
}

Ahora, cada vez que se ejecute gradle test, la tarea snyk-test se ejecutará después de las pruebas habituales. Esto también significa que la tarea snyk-test se ejecutará cada vez que se compile o se vuelva a compilar la aplicación. Según el contexto, esta estrategia puede ayudar a garantizar que se realicen pruebas y monitoreo para detectar vulnerabilidades.


Gradle Tutorial - How to use the Snyk plugin for Gradle