
Verificador de seguridad de Go
Inspecciona el código fuente en busca de problemas de seguridad escaneando el AST de Go y la representación de código SSA.
Licenciado bajo la Apache License, Version 2.0 (la "Licencia"). No puede usar este archivo excepto en cumplimiento con la Licencia. Puede obtener una copia de la Licencia aquí.
Puede ejecutar gosec como una GitHub action de la siguiente manera:
Use la etiqueta versionada con @master, que está fijada a la
última versión estable. Esto proporcionará un comportamiento estable.
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: ./...
Si tu proyecto importa módulos Go privados, necesitas
configurar la autenticación para que gosec pueda obtener las
dependencias. Establece las siguientes variables de entorno en
tu flujo de trabajo:
GOPRIVATE: Una lista separada por comas de prefijos de rutas de módulos
que deben considerarse privados
(por ejemplo, github.com/your-org/*).GITHUB_AUTHENTICATION_TOKEN: Un token de GitHub con acceso de lectura
a tus repositorios privados.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: ./...
Puedes integrar herramientas de análisis de código de terceros con el escaneo de código de GitHub subiendo datos como archivos SARIF.
El flujo de trabajo muestra un ejemplo de ejecución de gosec como un paso
en un flujo de trabajo de GitHub Actions que genera el archivo results.sarif.
A continuación, el flujo de trabajo sube el archivo results.sarif a
GitHub usando la acción 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
El paquete goanalysis proporciona un
golang.org/x/tools/go/analysis.Analyzer
para la integración con herramientas que admiten la interfaz de análisis
estándar de Go, como el framework
nogo
de Bazel:
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
gosec requiere Go 1.25 o superior.
go install github.com/securego/gosec/v2/cmd/gosec@latest
# 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 ./...
0: el escaneo finalizó sin hallazgos/errores no suprimidos1: al menos un hallazgo no suprimido o error de procesamiento-no-fail para devolver siempre 0Gosec se puede configurar para ejecutar solo un subconjunto de reglas, para
excluir ciertas rutas de archivos y para producir informes en diferentes
formatos. Por defecto, todas las reglas se ejecutarán contra los archivos de
entrada proporcionados. Para escanear de forma recursiva desde el directorio
actual, puede proporcionar ./... como argumento de entrada.
gosec incluye reglas en estas categorías:
G1xx: problemas generales de codificación segura (por ejemplo, credenciales
codificadas de forma rígida, uso inseguro, endurecimiento de HTTP, seguridad de cookies)G2xx: riesgos de inyección en la construcción de consultas/plantillas/comandosG3xx: riesgos de manejo de archivos y rutas (permisos, recorrido de rutas,
archivos temporales, extracción de archivos)G4xx: debilidades de criptografía y TLSG5xx: importaciones en lista de bloqueoG6xx: comprobaciones de corrección/seguridad específicas de Go (por ejemplo,
alias de rango y límites de slices)G7xx: reglas de análisis de contaminación (inyección SQL, inyección de
comandos, recorrido de rutas, SSRF, XSS, inyección de log, inyección de SMTP,
SSTI, deserialización insegura y redirección abierta)