Skip to main content

Compatibilidad de Snyk Code con la CLI: ahora en beta pública

Escrito por

Frank Fischer

21 de septiembre de 2021

0 minutos de lectura

La misión de Snyk es hacer que las herramientas de pruebas de seguridad de aplicaciones estáticas (SAST) funcionen para los desarrolladores a lo largo del pipeline de DevOps. Snyk Code analiza el código en tiempo real con gran precisión y lo hace directamente desde las herramientas y los flujos de trabajo que los desarrolladores ya usan. Por ejemplo, los plugins de IDE para IntelliJ, PyCharm, WebStorm y Visual Studio Code facilitan programar, analizar y corregir problemas incluso antes de que el código llegue al sistema de control de versiones. Además, con la interfaz de usuario web, los desarrolladores pueden analizar código heredado o hacer revisiones de código.

Además de todo esto, nos complace anunciar que Snyk Code ya forma parte de la interfaz de línea de comandos de Snyk (Snyk CLI) en beta pública. Ahora puedes integrar fácilmente Snyk Code en el proceso de CI/CD, con la flexibilidad de iniciar un análisis y trabajar con los resultados de forma automática.

Snyk ofrece una CLI para interactuar con cualquier elemento de la plataforma de Snyk. Snyk Code amplía la funcionalidad de la CLI existente. Este artículo te ayudará a comenzar; para profundizar, te invitamos a consultar nuestra documentación de la CLI de Snyk Code.

Como recordatorio, por ahora la compatibilidad con la CLI está en beta. Pruébala y envíanos tus comentarios para que podamos mejorarla.

Instalación y configuración de Snyk CLI

Snyk CLI es una aplicación de Node.js y, por lo tanto, puede ejecutarse en cualquier sistema compatible con Node.js. Además, es fácil de instalar y configurar.

Puedes instalarla con npm ejecutando: npm install -g snyk

Para conocer otras formas de instalarla y obtener más información sobre la instalación con npm, consulta nuestra documentación completa de la CLI de Snyk Code.

Una vez instalada, el siguiente paso es autenticarse. Para ello, ejecuta: snyk auth.

Esto iniciará un proceso de autenticación y guardará un token de identificación que podrás usar con la CLI de ahora en adelante.

Consejo: La CLI busca actualizaciones cada vez que se ejecuta. Si hay una actualización, te lo notificará e indicará el comando necesario. Para asegurarte de tener la versión más reciente, también puedes actualizarla manualmente ejecutando npm update -g snyk.

Analizar un proyecto o una carpeta

Para iniciar un análisis de Snyk Code con la CLI, ejecuta: snyk code test [my-folder-path]

Si no proporcionas el parámetro de ruta, la CLI analizará la carpeta actual. Y sí, recorrerá el árbol de directorios y analizará su contenido. Hay muchos otros comandos y parámetros disponibles; puedes consultarlos en nuestra documentación.

Si ya usas la CLI, ten en cuenta que esta beta no admite el comando monitor para Snyk Code.

Nota: La CLI agrupa los archivos de código fuente compatibles y los carga en Snyk para analizarlos. Ten en cuenta que, aunque los datos en tránsito y en reposo están cifrados, el código fuente saldrá de tus instalaciones. Antes de ejecutar la CLI en un repositorio, asegúrate de estar de acuerdo con esto.

Opciones de formato de resultados

La CLI puede presentar los resultados de tres maneras. La primera, y una buena forma de empezar a usarla, es simplemente ejecutarla. Esto generará un informe en un formato fácil de leer.

Testing . ...

 ✗ [Medium] Cross-Site Request Forgery (CSRF) 
     Path: app.js, line 16 
     Info: Consider using csurf middleware for your Express app to protect against CSRF attacks.

 ✗ [Medium] Use of Hard-coded Credentials 
     Path: index.js, line 10 
     Info: Do not hardcode credentials in code. Found hardcoded credential used in mysql.createConnection.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: app.js, line 46 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: index.js, line 15 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: index.js, line 21 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Allocation of Resources Without Limits or Throttling 
     Path: createDummyData.js, line 16 
     Info: This endpoint handler performs a file system operation and does not use a rate-limiting mechanism. It may enable the attackers to perform Denial-of-service attacks. Consider using a rate-limiting middleware such as express-limit.

 ✗ [Medium] Use of Hard-coded Credentials 
     Path: index.js, line 11 
     Info: Do not hardcode passwords in code. Found hardcoded password used in mysql.createConnection.

 ✗ [High] Path Traversal 
     Path: index.js, line 25 
     Info: Unsanitized input from an HTTP parameter flows into fs.readFile, where it is used as a path. This may result in a Path Traversal vulnerability and allow an attacker to read arbitrary files.

 ✗ [High] SQL Injection 
     Path: index.js, line 39 
     Info: Unsanitized input from an HTTP parameter flows into get, where it is used in an SQL query. This may result in an SQL Injection vulnerability.

✔ Test completed

Organization:      undefined
Test type:         Static code analysis
Project path:      .

9 Code issues found
2 [High]  7 [Medium] 

El nivel de gravedad se indica con colores y el resultado incluye una explicación de la vulnerabilidad, además de una solución recomendada.

Consejo: Snyk Code es muy rápido. Elige cualquier proyecto (o un repositorio de código abierto clonado) y simplemente ejecuta el análisis para comprobar que el sistema funciona.

Luego, la CLI ofrece un formato de datos llamado SARIF. Para obtenerlo, ejecuta snyk code test --sarif:

{
  "$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
  "version": "2.1.0",
  "runs": [
    {
      "tool": {
        "driver": {
          "name": "SnykCode",
          "semanticVersion": "1.0.0",
          "version": "1.0.0",
          "rules": [
            {
              "id": "javascript/UseCsurfForExpress",
              "name": "UseCsurfForExpress",
              "shortDescription": {
                "text": "Cross-Site Request Forgery (CSRF)"
              },
              "defaultConfiguration": {
                "level": "warning"
              },
              "help": {
                "markdown": "\n## Details\nCross-site request forgery is an attack in which a malicious third party takes advantage of a user's authenticated credentials (such as a browser cookie) to impersonate that trusted user and perform unauthorized actions. The web application server cannot tell the difference between legitimate and malicious requests. This type of attack generally begins by tricking the user with a social engineering attack, such as a link or popup that the user inadvertently clicks, causing an unauthorized request to be sent to the web server. Consequences vary: At a standard user level, hackers can change passwords, transfer funds, make purchases, or connect with contacts; from an administrator account, hackers can then make changes to or even take down the app itself.\n\n### Best practices for prevention\n* Use development frameworks that defend against CSRF, using a nonce, hash, or some other security device to the URL and/or to forms.\n* Implement secure, unique, hidden tokens that are checked by the server each time to validate state-change requests.\n* Never assume that authentication tokens and session identifiers mean a request is legitimate.\n* Understand and implement other safe-cookie techniques, such as double submit cookies.\n* Terminate user sessions when not in use, including automatic timeout.\n* Ensure rigorous coding practices and defenses against other commonly exploited CWEs, since cross-site scripting (XSS), for example, can be used to bypass defenses against CSRF.\n\n## References\n\n* [Express Documentation - Implement CSRF Protection](https://expressjs.com/en/resources/middleware/csurf.html)\n* [Node Security Checklist - CSRF](https://blog.risingstack.com/node-js-security-checklist/#csrf)",
                "text": ""
              },
              "properties": {
                "tags": [
                  "javascript",
                  "maintenance",
                  "express",
                  "server",
                  "CSRF"
                ],
                "categories": [
                  "Security"
                ],
                "exampleCommitFixes": [
                  {
                    "commitURL": "https://github.com/eclipse/orion.client/commit/ad8f3bce33a1ea9d1e2144e6c42f075ad25829d6?diff=split#diff-16594450dc1f06f7d9cf4a47859cfa52L175",
                    "lines": [
                      {
                        "line": "}",
                        "lineNumber": 172,
                        "lineChange": "none"
                      },
...

Este resultado es detallado y contiene todo —e incluso un poco más— de lo que puedes ver en la interfaz de Snyk Code. También incluye las correcciones de ejemplo y la puntuación de prioridad.

Consejo: Prepárate un café y explora el archivo SARIF. Como es JSON, en realidad no es tan difícil de entender. Contiene muchísima información y te aseguro que te dará muchas ideas sobre cómo usarla en tus procesos o para recopilar estadísticas.

Por último, la CLI proporciona un código de salida que puedes usar, por ejemplo, para dirigir un proceso de CI/CD. Estos son los códigos de salida que puedes esperar:

  • 3: error: no se encontraron proyectos compatibles

  • 2: error: vuelve a ejecutar el comando

  • 1: se requiere una acción: se encontraron vulnerabilidades

  • 0: éxito: no se encontraron vulnerabilidades

Puedes filtrar por nivel de gravedad usando el parámetro --severity-threshold=<low|medium|high> en el comando.

Prueba la beta de Snyk Code CLI

La CLI es una herramienta potente y queremos invitar a todas las personas a participar en la beta pública. Solo asegúrate de tener instalada la versión más reciente de Snyk CLI, de que Snyk Code esté habilitado para tu organización y ¡pruébala! Como está en beta, nos encantaría que la usaras y nos enviaras tus comentarios.

Y si recién conoces Snyk, el primer paso es crear una cuenta de Snyk con Snyk Code activado. Regístrate gratis hoy.

Comienza con Capture the Flag

Aprende a resolver desafíos de Capture the Flag con nuestro taller virtual 101 a pedido.

Leer más

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

illustration hero ai
Blog

El huracán de la IA ha llegado

La IA está acelerando por igual la creación de software y los ciberataques. Los líderes deben proteger los agentes y el código desde el inicio, aplicar controles en tiempo de ejecución y validar las defensas de forma independiente.

feature insights context
Blog

¿La prevención es, en esencia, un problema ya resuelto?

La prevención en el código generado por agentes está resuelta desde el punto de vista arquitectónico, pero elegir controles que protejan la seguridad sin ralentizar el desarrollo sigue siendo el desafío.