
gosec v2.28.0
Vérificateur de sécurité Go
gosec - Vérificateur de sécurité Go
Inspecte le code source à la recherche de problèmes de sécurité en analysant l'AST Go et la représentation de code SSA.
Liens rapides
- Action GitHub
- Installation locale
- Démarrage rapide
- Modèles d'utilisation courants
- Sélection des règles
- Formats de sortie
Fonctionnalités
- Règles basées sur des motifs pour détecter les problèmes de sécurité courants dans le code Go
- Analyseurs basés sur SSA pour les conversions de type, les limites de tranches et les problèmes cryptographiques
- Analyse de flux pour suivre le flux de données depuis l'entrée utilisateur vers les fonctions dangereuses (injection SQL, injection de commande, traversée de chemin, SSRF, XSS, injection de logs, injection SMTP, SSTI, désérialisation non sécurisée, redirection ouverte)
Licence
Sous licence Apache License, Version 2.0 (la "Licence"). Vous ne pouvez pas utiliser ce fichier sauf en conformité avec la Licence. Vous pouvez obtenir une copie de la Licence ici.
Statut du projet
Installation
Action GitHub
Vous pouvez exécuter gosec en tant qu'action GitHub comme suit :
Utilisez le tag versionné avec @master qui est épinglé à la dernière version stable. Cela fournira un comportement stable.```yaml
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@master
with:
args: ./...
#### Scanning Projects with Private Modules
If your project imports private Go modules, you need to
configure authentication so that `gosec` can fetch the
dependencies. Set the following environment variables in
your workflow:
- `GOPRIVATE`: A comma-separated list of module path prefixes
that should be considered private
(e.g., `github.com/your-org/*`).
- `GITHUB_AUTHENTICATION_TOKEN`: A GitHub token with read
access to your private repositories.```yaml
name: Run Gosec
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
tests:
runs-on: ubuntu-latest
env:
GO111MODULE: on
GOPRIVATE: github.com/your-org/*
GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
steps:
- name: Checkout Source
uses: actions/checkout@v3
- name: Run Gosec Security Scanner
uses: securego/gosec@v2
with:
args: ./...
Intégration avec le scanning de code
Vous pouvez intégrer des outils d'analyse de code tiers avec le scanning de code GitHub en téléchargeant les données sous forme de fichiers SARIF.
Le workflow montre un exemple d'exécution de gosec en tant qu'étape
dans un workflow GitHub Action qui produit le fichier results.sarif.
Le workflow télécharge ensuite le fichier results.sarif vers
GitHub en utilisant l'action upload-sarif.```yaml
name: "Security Scan"
Run workflow each time code is pushed to your repository and on a schedule.
The scheduled workflow runs every at 00:00 on Sunday UTC time.
on: push: schedule:
- cron: '0 0 * * 0'
jobs: tests: runs-on: ubuntu-latest env: GO111MODULE: on steps: - name: Checkout Source uses: actions/checkout@v3 - name: Run Gosec Security Scanner uses: securego/gosec@v2 with: # we let the report trigger content trigger a failure using the GitHub Security features. args: '-no-fail -fmt sarif -out results.sarif ./...' - name: Upload SARIF file uses: github/codeql-action/upload-sarif@v2 with: # Path to SARIF file relative to the root of the repository sarif_file: results.sarif
### Analyse Go
Le paquet `goanalysis` fournit un
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
pour l'intégration avec des outils qui prennent en charge l'interface
d'analyse standard de Go, tels que le framework
[nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst)
de Bazel :```starlark
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
Installation locale
gosec nécessite Go 1.25 ou une version ultérieure.```bash go install github.com/securego/gosec/v2/cmd/gosec@latest
## Démarrage rapide```bash
# Scan all packages in current module
gosec ./...
# Write JSON report
gosec -fmt json -out results.json ./...
# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...
Codes de sortie
0: scan terminé sans résultats/erreurs non supprimés1: au moins un résultat non supprimé ou une erreur de traitement- Utilisez
-no-failpour toujours retourner0
Utilisation
Gosec peut être configuré pour exécuter uniquement un sous-ensemble de règles, pour
exclure certains chemins de fichiers, et produire des rapports dans différents
formats. Par défaut, toutes les règles seront exécutées sur les fichiers
d'entrée fournis. Pour effectuer une analyse récursive à partir du répertoire courant, vous
pouvez fournir ./... comme argument d'entrée.
Règles disponibles
gosec inclut des règles dans ces catégories :
G1xx: problèmes généraux de codage sécurisé (par exemple, identifiants codés en dur, utilisation non sécurisée, durcissement HTTP, sécurité des cookies)G2xx: risques d'injection dans la construction de requêtes/modèles/commandesG3xx: risques de gestion des fichiers et des chemins (permissions, traversée, fichiers temporaires, extraction d'archives)G4xx: faiblesses cryptographiques et TLSG5xx: importations bloquéesG6xx: vérifications de correction/sécurité spécifiques à Go (par exemple, alias de plage et limites de tranche)G7xx: règles d'analyse de flux (injection SQL, injection de commande, traversée de chemin, SSRF, XSS, log, injection SMTP, SSTI, désérialisation non sécurisée, et redirection ouverte)