Volver a actualizaciones
Nuevo releaseAug 19, 2026

gosec v2.28.0

Verificador de seguridad de Go

Compartir

gosec - Comprobador de seguridad para 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.

Enlaces rápidos

Características

  • Reglas basadas en patrones para detectar problemas de seguridad comunes en código Go
  • Analizadores basados en SSA para conversiones de tipos, límites de slices y problemas criptográficos
  • Análisis de taint para rastrear el flujo de datos desde la entrada del usuario hasta funciones peligrosas (inyección SQL, inyección de comandos, path traversal, SSRF, XSS, inyección de logs, inyección SMTP, SSTI, deserialización insegura, redirección abierta)

Licencia

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í.

Estado del proyecto

CII Best Practices Build Status Coverage Status GoReport GoDoc Docs Downloads GHCR Slack go-recipes

Instalación

GitHub Action

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: ./...

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.
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: ./...

Integración con el escaneo de código

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

Análisis de Go

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"],
)

Instalación local

gosec requiere Go 1.25 o superior.

go install github.com/securego/gosec/v2/cmd/gosec@latest

Inicio rápido

# 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 ./...

Códigos de salida

  • 0: el escaneo finalizó sin hallazgos/errores no suprimidos
  • 1: al menos un hallazgo no suprimido o error de procesamiento
  • Use -no-fail para devolver siempre 0

Uso

Gosec 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.

Reglas disponibles

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/comandos
  • G3xx: riesgos de manejo de archivos y rutas (permisos, recorrido de rutas, archivos temporales, extracción de archivos)
  • G4xx: debilidades de criptografía y TLS
  • G5xx: importaciones en lista de bloqueo
  • G6xx: 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)

Categorías