
gosec v2.28.0
Vérificateur de sécurité Go
gosec - Vérificateur de sécurité pour Go
Inspecte le code source à la recherche de problèmes de sécurité en analysant l'AST Go et la représentation du code SSA.
Liens rapides
- GitHub Action
- 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 la SSA pour les conversions de types, les limites de tranches et les problèmes cryptographiques
- Analyse de teinte (taint analysis) pour suivre le flux de données depuis les entrées utilisateur jusqu'aux fonctions dangereuses (injection SQL, injection de commandes, 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.
État du projet
Installation
GitHub Action
Vous pouvez exécuter gosec en tant que GitHub action comme suit :
Utilisez le tag versionné avec @master qui est épinglé sur la
dernière version stable. Cela garantira un comportement stable.
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: ./...
Analyser des projets avec des modules privés
Si votre projet importe des modules Go privés, vous devez
configurer l'authentification afin que gosec puisse récupérer les
dépendances. Définissez les variables d'environnement suivantes dans
votre workflow :
GOPRIVATE: une liste séparée par des virgules de préfixes de chemins de modules qui doivent être considérés comme privés (par exemple,github.com/your-org/*).GITHUB_AUTHENTICATION_TOKEN: un jeton GitHub disposant d'un accès en lecture à vos dépôts privés.
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 l'analyse de code
Vous pouvez intégrer des outils d'analyse de code tiers à l'analyse de code GitHub en téléversant des 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éverse ensuite le fichier results.sarif vers
GitHub à l'aide de l'action upload-sarif.
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
pour l'intégration avec les outils qui prennent en charge l'interface
d'analyse standard de Go, tels que le framework
nogo
de Bazel :
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 plus récente.
go install github.com/securego/gosec/v2/cmd/gosec@latest
Démarrage rapide
# 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: analyse terminée sans résultats ni erreurs non supprimés1: au moins un résultat ou une erreur de traitement non supprimé- Utilisez
-no-failpour toujours renvoyer0
Utilisation
Gosec peut être configuré pour n'exécuter qu'un sous-ensemble de règles, pour
exclure certains chemins de fichiers et pour produire des rapports dans différents
formats. Par défaut, toutes les règles sont exécutées sur les fichiers
d'entrée fournis. Pour analyser récursivement depuis le répertoire courant, vous
pouvez fournir ./... comme argument d'entrée.
Règles disponibles
gosec inclut des règles réparties dans ces catégories :