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).
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.
Et que vous n'utilisez que la fonction ls dans votre code :
funcmain(){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
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
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.
Posté par woffer 🐧 .
É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
# infos complémentaires
Posté par woffer 🐧 . É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 claudex . É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:
Et que vous n'utilisez que la fonction
ls
dans votre code :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 woffer 🐧 . É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 wilk . Évalué à 5.
Je viens d'essayer sur un vieux code, le résultat est assez précis :
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.
[^] # Re: infos complémentaires
Posté par woffer 🐧 . É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 :
On peut identifier la dépendance coupable avec :
On peut la corriger avec :
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.