Skip to main content

Aprovecha al máximo snyk test con JSON

Escrito por
Headshot of Tim Kadlec

Tim Kadlec

29 de junio de 2017

0 minutos de lectura

Al ejecutar snyk test, se analizan las dependencias de tu aplicación para comprobar si contienen vulnerabilidades conocidas. Si se detecta alguna, el comando genera un error y muestra en la consola información sobre la vulnerabilidad y cómo solucionarla.

Funciona muy bien en un entorno de CI y te proporciona abundante información práctica. Sin embargo, a veces quizá quieras ir un paso más allá y manipular de alguna manera los resultados de las pruebas o crear un informe local que puedas compartir fácilmente. Ahí es donde entra en juego la opción --json, que genera los resultados de snyk test en formato JSON.

Te mostraremos algunas de las cosas que puedes hacer con snyk test --json y algunas herramientas gratuitas.

La opción JSON

Al ejecutar snyk test --json, se genera un objeto JSON con información básica y útil sobre tu proyecto. Este es el formato básico que tiene actualmente:

{
  "ok": false,
  "vulnerabilities": [...],
  "dependencyCount": 72,
  "org": "myOrg",
  "licensesPolicy": null,
  "isPrivate": true,
  "packageManager": "rubygems",
  "summary": "2 vulnerable dependency paths",
  "filtered": {
    "ignore": [],
    "patch": []
  },
  "uniqueCount": 1
}

Además, vulnerabilities contiene información detallada sobre cada vulnerabilidad detectada:

{
    "title": "",
    "credit": [],
    "description": "",
    "moduleName": "",
    "language": "",
    "packageManager": "",
    "semver": {
      "unaffected": [],
      "vulnerable": []
    },
    "identifiers": {
      "CWE": [],
      "CVE": []
    },
    "CVSSv3": "",
    "severity": "",
    "creationTime": "",
    "modificationTime": "",
    "publicationTime": "",
    "disclosureTime": "",
    "id": "",
    "packageName": "",
    "from": [],
    "upgradePath": [],
    "version": "",
    "name": "",
    "isUpgradable": false,
    "isPatchable": false
 }

Toda esta información nos ofrece muchas formas distintas de personalizar los resultados de Snyk test.

Orden personalizado de las vulnerabilidades

De forma predeterminada, snyk test informa las vulnerabilidades en el orden en que las encuentra en el árbol de dependencias generado.

Hay varias herramientas que puedes usar para modificar y reordenar los resultados, pero usaremos jq. jq es un procesador de JSON para la línea de comandos. Te permite pasar datos JSON, filtrarlos y luego obtener los datos resultantes.

Con jq, puedes ordenar los resultados como quieras. Por ejemplo, podrías ordenar las vulnerabilidades por fecha de publicación para que las más recientes aparezcan primero.

snyk test --json | jq '.vulnerabilities |= sort_by(.publicationTime) | .vulnerabilities |= reverse'

O, con unas cuantas líneas más, podrías ordenar las vulnerabilidades por gravedad para que las más críticas aparezcan primero.

snyk test --json | jq '.vulnerabilities|= map(. + {severity_numeric: (if(.severity) == "high" then 1 else (if(.severity) == "medium" then 2 else (if(.severity) == "low" then 3 else 4 end) end) end)}) |.vulnerabilities |= sort_by(.severity_numeric) | del(.vulnerabilities[].severity_numeric)'

Gravedad personalizada de las vulnerabilidades

También puedes usar jq para cambiar la gravedad de una vulnerabilidad que, por cualquier motivo, consideres que debería tener una gravedad distinta de la asignada por Snyk.

Por ejemplo, quizá tu sitio dependa de una versión de Nokogiri que contiene una vulnerabilidad de ejecución de código arbitrario de gravedad alta, pero tu equipo haya concluido que la forma en que se usa Nokogiri hace que el problema sea menos grave. Podrías usar jq para cambiar la gravedad de la vulnerabilidad en tus informes.

snyk test --json | jq '. | (.vulnerabilities[] | select(.id == "SNYK-RUBY-NOKOGIRI-20367").severity |= "low")

Genera un informe HTML local

El panel en línea de tu proyecto detalla cada vulnerabilidad: su gravedad, una descripción, las rutas vulnerables y mucho más. Si quieres una copia local basada en los resultados de snyk test, puedes usar nuestra herramienta de código abierto Snyk JSON to HTML Mapper.

La herramienta acepta snyk test --json y genera un informe HTML local sin recursos externos. Para usarla, puedes instalarla globalmente con npm install -g snyk-to-html. Luego, al ejecutar el comando test, puedes pasar los resultados directamente al módulo, así:

snyk test --json | snyk-to-html -o results.html

El comando anterior creará un informe local con un diseño atractivo y sin dependencias externas.

Informe de Snyk test que muestra una vulnerabilidad de entidad externa XML de gravedad alta en la dependencia Nokogiri, con rutas, detalles, medidas correctivas y referencias.

Si personalizas los resultados JSON con jq, también puedes pasar los resultados JSON modificados. Por ejemplo, el siguiente comando genera un informe HTML local con las vulnerabilidades ordenadas por fecha de publicación.

snyk test --json | jq '.vulnerabilities |= sort_by(.publicationTime) | .vulnerabilities |= reverse' | snyk-to-html -o results.html

Informes personalizados con JSON

Ejecutar snyk test por sí solo te proporciona mucha información útil. Si necesitas un poco más de flexibilidad, snyk test --json es la solución. Con unas cuantas herramientas gratuitas y algo de creatividad, puedes personalizar los resultados de Snyk según tus necesidades específicas.

Si usas los resultados JSON para crear informes o funcionalidades personalizadas, cuéntanos. ¡Nos encantaría saber qué se te ocurrió!

Empieza con los retos de Capture the Flag

Aprende a resolver retos de Capture the Flag viendo nuestro taller virtual de nivel básico a pedido.