Skip to main content

Snyk Code CLI désormais disponible en bêta publique

Écrit par

Frank Fischer

21 septembre 2021

0 minutes de lecture

La mission de Snyk est de rendre les outils de test de sécurité des applications statique (SAST) utiles aux développeurs tout au long du pipeline DevOps. Snyk Code analyse le code en temps réel avec une grande précision, directement depuis les outils et les workflows que les développeurs utilisent déjà. Par exemple, les extensions IDE pour IntelliJ, PyCharm, WebStorm et Visual Studio Code vous permettent de coder, d’analyser et de corriger facilement le code avant même qu’il n’intègre le système de gestion de versions. Grâce à l’interface web, les développeurs peuvent aussi analyser du code existant ou effectuer une revue de code.

Pour aller plus loin, nous sommes heureux d’annoncer que Snyk Code est désormais disponible dans l’interface de ligne de commande Snyk (Snyk CLI), en bêta publique. Vous pouvez ainsi facilement intégrer Snyk Code à votre processus CI/CD et bénéficier de la flexibilité nécessaire pour lancer des analyses et traiter leurs résultats automatiquement.

Snyk propose une CLI pour interagir avec tous les éléments de la plateforme Snyk. Snyk Code étend les fonctionnalités de la CLI existante. Cet article vous explique comment bien démarrer. Pour approfondir le sujet, nous vous invitons à consulter notre documentation sur la CLI Snyk Code.

Pour rappel, la prise en charge de la CLI est actuellement en version bêta. N’hésitez pas à l’essayer et à nous faire part de vos commentaires pour nous aider à l’améliorer.

Installer et configurer la CLI Snyk

La CLI Snyk est une application Node.js qui peut donc être hébergée sur tout système prenant en charge Node.js. Elle est également facile à installer et à configurer.

Vous pouvez l’installer avec npm en exécutant : npm install -g snyk

Pour découvrir d’autres méthodes d’installation et en savoir plus sur l’installation avec npm, consultez notre documentation complète sur la CLI Snyk Code.

Une fois l’installation terminée, vous devez vous authentifier en exécutant : snyk auth.

Un processus d’authentification sera lancé et un jeton d’identification sera enregistré pour que vous puissiez utiliser la CLI à l’avenir.

Conseil : La CLI vérifie la disponibilité des mises à jour à chaque lancement. Si une mise à jour est disponible, elle vous en informe et affiche la commande à exécuter. Pour vous assurer de disposer de la dernière version, vous pouvez également effectuer la mise à jour manuellement avec npm update -g snyk.

Analyser un projet ou un dossier

Pour lancer une analyse Snyk Code avec la CLI, exécutez : snyk code test [my-folder-path]

Si vous ne renseignez pas le paramètre de chemin, la CLI analysera le dossier actuel. Elle parcourra bien toute l’arborescence des répertoires et en analysera le contenu. Vous trouverez de nombreuses autres commandes et options dans notre documentation.

Si vous utilisez déjà la CLI, notez que cette version bêta ne prend pas en charge la commande monitor pour Snyk Code.

Remarque : La CLI regroupe les fichiers de code source pris en charge et les envoie à Snyk pour analyse. Bien que les données en transit comme celles stockées soient chiffrées, le code source quitte bien votre environnement. Assurez-vous que cela vous convient avant d’exécuter la CLI sur un dépôt.

Options de format des résultats

La CLI peut présenter ses résultats de trois façons. Pour bien démarrer avec la CLI, il suffit de l’exécuter. Elle renverra alors un rapport dans un format lisible.

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] 

Le niveau de gravité est indiqué par un code couleur. Les résultats expliquent la vulnérabilité et proposent une mesure corrective.

Conseil : Snyk Code étant extrêmement rapide, choisissez un projet (ou un dépôt open source cloné) et lancez simplement une analyse pour vérifier que tout fonctionne.

La CLI propose également un format de données appelé SARIF, obtenu avec la commande 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"
                      },
...

Cette sortie est détaillée et contient toutes les informations — et même un peu plus — que vous voyez dans l’interface Snyk Code. Elle inclut également des exemples de correctifs et un score de priorité.

Conseil : Prenez un café et explorez le fichier SARIF. Comme il s’agit de JSON, il est assez facile à comprendre. Il regorge d’informations et vous donnera, j’en suis sûr, de nombreuses idées pour l’intégrer à vos processus ou en tirer des statistiques.

Enfin, la CLI renvoie un code de sortie qui peut notamment servir à piloter un processus CI/CD. Voici les codes de sortie possibles :

  • 3 : échec, aucun projet pris en charge détecté

  • 2 : échec, réessayez d’exécuter la commande

  • 1 : intervention requise, des vulnérabilités ont été détectées

  • 0 : réussite, aucune vulnérabilité détectée

Utilisez le paramètre --severity-threshold=<low|medium|high> dans votre commande pour filtrer les résultats par niveau de gravité.

Essayez la CLI Snyk Code en bêta

La CLI est un outil puissant et nous invitons tout le monde à participer à la bêta publique. Assurez-vous simplement que la dernière version de la CLI Snyk est installée, que Snyk Code est activé pour votre organisation, puis lancez-vous. Comme il s’agit d’une version bêta, nous vous serions reconnaissants de l’essayer et de nous faire part de vos commentaires.

Si vous découvrez Snyk, commencez par créer un compte Snyk avec Snyk Code activé ! Inscrivez-vous gratuitement dès aujourd’hui.

Lancez-vous dans les compétitions Capture The Flag

Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.

Publié dans:

Lire la suite

blog feature snyk container custom base recommendations
Blog

Découvrez Evo Agentic AppSec : une sécurité au rythme du développement de l’IA

Le développement piloté par l’IA dépasse les capacités des processus de sécurité traditionnels. Agentic AppSec de Snyk s’appuie sur des agents de sécurité pour détecter, corriger et vérifier les vulnérabilités en continu, tandis que les équipes définissent les exigences.

feature insights context
Blog

Les attaques autonomes sont déjà là. La défense doit suivre leur rythme.

Les attaquants autonomes réduisent la fenêtre de défense. Découvrez comment la découverte, la correction, la validation et la prévention continues peuvent aider les équipes de sécurité à suivre le rythme.

illustration hero ai
Blog

L’ouragan de l’IA est là

L’IA accélère à la fois la création de logiciels et les cyberattaques. Les dirigeants doivent sécuriser les agents et le code dès leur conception, appliquer des contrôles à l’exécution et valider les défenses de manière indépendante.