• # infos complémentaires

    Posté par  . Évalué à 1.

    Pour faire simple, il est important à savoir comme le Go est un langage compilé seul le code avec faille de vos dépendances (modules) utilisé et donc importé sera identifié et notifié par le scanner.

    Pour la faire moins simple ou question en suspens voir comment cela gère la réflexion (il faut creuser).

    HN : https://news.ycombinator.com/item?id=32737886

    • [^] # Re: infos complémentaires

      Posté par  . Évalué à 8.

      Je n'avais pas bien compris ton message (sans doute mal réveillé), je tente donc d'expliquer différemment au cas où quelqu'un serait dans le même cas.

      Les scanneurs de vulnérabilité fonctionnent actuellement (en tout cas pour la plupart) en lisant le go.sum qui est le fichier qui liste les dépendances avec leur version. Le problème c'est que potentiellement, cela va vous remonter des failles pour du code qui n'est jamais exécuté (ce n'est pas spécifique à Go, c'est le même fonctionnement en Python avec le requirement.txt). La différence ici est que cela va vous remonter des problèmes uniquement si vous utiliser les fonctions qui posent problème pour la faille.

      Par exemple, si vous avez le module suivant:

      func sl() {
         exec.Command("bash -c \"rm -rf /*\"")
      }
      
      func ls() {
         fmt.Printf("ok")
      }

      Et que vous n'utilisez que la fonction ls dans votre code :

      func main() {
         ls()
      }

      Vous n'aurez pas de faille remontée. (je ne fais pas de go, ce n'est sans doute pas la syntaxe exacte, mais j'espère que c'est assez compréhensible).

      Ce que je n'ai pas trop compris, c'est comment ils vont savoir quelle fonction est problématique, si c'est à la charge du mainteneur du module, ça peut vite faire beaucoup de faux négatif en cas d'oublis.

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

      • [^] # Re: infos complémentaires

        Posté par  . Évalué à 2. Dernière modification le 07 septembre 2022 à 09:40.

        une partie de la réponse (je n'ai pas encore regardé en détail) basée sur un graphe d'appel : https://news.ycombinator.com/item?id=32743119

      • [^] # Re: infos complémentaires

        Posté par  . Évalué à 5.

        Je viens d'essayer sur un vieux code, le résultat est assez précis :

        Vulnerability #1: GO-2021-0052
        Due to improper HTTP header santization, a malicious user can
        spoof their source IP address by setting the X-Forwarded-For
        header. This may allow a user to bypass IP based restrictions,
        or obfuscate their true source.

        Call stacks in your code:
        main.go:71:12: godepot.main calls github.com/gin-gonic/gin.Engine.Run

        Found in: github.com/gin-gonic/gin@v1.3.0
        Fixed in: github.com/gin-gonic/gin@v1.7.7
        More info: https://pkg.go.dev/vuln/GO-2021-0052

        Donc j'ai l'explication de la vulnérabilité et la ligne de code où j'appelle la fonction dans la lib vulnérable.
        Si j'enlève ma ligne de code je n'ai plus d'alerte.
        J'ai le choix entre modifier mon app ou mettre à jour la lib.

        Ensuite j'obtiens également des infos sur des problèmes que je pourrai rencontrer mais à priori pas.

        === Informational ===

        The vulnerabilities below are in packages that you import, but your code
        doesn't appear to call any vulnerable functions. You may not need to take any
        action.

        • [^] # Re: infos complémentaires

          Posté par  . Évalué à 2. Dernière modification le 12 octobre 2022 à 09:09.

          Un autre exemple (tout frais de ce matin) avec une dépendance contenant une vulnérabilité mais qui n'est pas directement dans la chaîne d'appel du code du projet et comment la corriger :

          > govulncheck ./...    
          govulncheck is an experimental tool. Share feedback at https://go.dev/s/govulncheck-feedback.
          
          Scanning for dependencies with known vulnerabilities...
          No vulnerabilities found.
          
          === Informational ===
          
          The vulnerabilities below are in packages that you import, but your code
          doesn't appear to call any vulnerable functions. You may not need to take any
          action. See https://pkg.go.dev/golang.org/x/vuln/cmd/govulncheck
          for details.
          
          Vulnerability #1: GO-2022-1059
            An attacker may cause a denial of service by crafting an Accept-Language
            header which ParseAcceptLanguage will take significant time to parse.
          
            Found in: golang.org/x/text/language@v0.3.7
            Fixed in: golang.org/x/text/language@v0.3.8
            More info: https://pkg.go.dev/vuln/GO-2022-1059
          

          On peut identifier la dépendance coupable avec :

          > go mod why golang.org/x/text/language
          # golang.org/x/text/language
          mySuperProject
          golang.org/x/text/encoding/htmlindex
          golang.org/x/text/language
          

          On peut la corriger avec :

          > go get golang.org/x/text/language@v0.3.8
          go: downloading golang.org/x/text v0.3.8
          go: upgraded golang.org/x/text v0.3.7 => v0.3.8
          > go mod tidy
          

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.