
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 Licencia Apache, Versión 2.0 (la "Licencia"). No puede usar este archivo excepto en cumplimiento de 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.```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: ./...
#### Escaneo de proyectos con módulos privados
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.```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: ./...
Puede 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 Action que produce el archivo results.sarif.
Luego, el flujo de trabajo sube el archivo results.sarif a
GitHub utilizando la acción upload-sarif.```yaml
name: "Security Scan"
on: push: schedule:
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
### Análisis de Go
El paquete `goanalysis` proporciona un
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
para la integración con herramientas que soportan la interfaz
estándar de análisis de Go, como el 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"],
)
gosec requiere Go 1.25 o más reciente.```bash go install github.com/securego/gosec/v2/cmd/gosec@latest
## Inicio rápido```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 ./...
0: escaneo finalizado 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, excluir ciertas rutas de archivo y generar informes en diferentes formatos. De forma predeterminada, todas las reglas se ejecutarán sobre los archivos de entrada proporcionados. Para escanear recursivamente desde el directorio actual, puedes proporcionar ./... como argumento de entrada.
gosec incluye reglas en estas categorías:
G1xx: problemas generales de codificación segura (por ejemplo, credenciales codificadas, uso inseguro, endurecimiento HTTP, seguridad de cookies)G2xx: riesgos de inyección en la construcción de consultas/plantillas/comandosG3xx: riesgos en el manejo de archivos y rutas (permisos, path traversal, archivos temporales, extracción de archivos)G4xx: debilidades de criptografía y TLSG5xx: importaciones en lista negraG6xx: comprobaciones de corrección/seguridad específicas de Go (por ejemplo, alias de rango y límites de slice)G7xx: reglas de análisis de taint (inyección SQL, inyección de comandos, path traversal, SSRF, XSS, log, inyección SMTP, SSTI, deserialización insegura y redirección abierta)