Los módulos de Go junto con govulncheck te brindan una señal de cadena de suministro de primera clase en CI, mientras que la exportación de SBOM responde a auditores y equipos de seguridad que preguntan qué se incluye en cada binario.
Trata el escaneo de vulnerabilidades como una puerta de control, no como una casilla de verificación única.
Tu servicio importa docenas de módulos transitivos.
La base de datos de vulnerabilidades de Go registra CVEs que afectan a la biblioteca estándar y a paquetes de terceros.
govulncheck analiza qué símbolos importados son realmente alcanzables desde tu código e informa los hallazgos relevantes.
Los SBOM (Software Bill of Materials - Lista de Materiales de Software) enumeran componentes y versiones para el cumplimiento, la revisión de licencias y la priorización más rápida de incidentes cuando llega un nuevo CVE.
Empareja el escaneo con go mod tidy, versiones de Go fijadas en CI y un SLA de parcheo.
#!/usr/bin/env bashset -euo pipefail# Fragmento de trabajo de CI para example.com/myapiexport GOTOOLCHAIN=localgo versiongo mod downloadgo mod verifyecho "== govulncheck =="govulncheck -json ./... > govulncheck.json# Fallar ante cualquier hallazgo en CI (ajustar con archivo de lista blanca si es necesario)if jq -e '.finding | length > 0' govulncheck.json >/dev/null 2>&1; then echo "se encontraron vulnerabilidades" jq '.finding' govulncheck.json exit 1fiecho "== SBOM (CycloneDX) =="go install github.com/CycloneDX/cyclonedx-gomod/cmd/cyclonedx-gomod@latestcyclonedx-gomod mod -json -output sbom.json
// main.go - módulo mínimo para demostraciones de escaneopackage mainimport ( "encoding/json" "net/http")func main() { http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) { json.NewEncoder(w).Encode(map[string]string{"status": "ok"}) }) http.ListenAndServe(":8080", nil)}
Lo que esto demuestra:
go mod verify confirma que las entradas de go.sum coinciden con los módulos descargados.
La salida de govulncheck -json es adecuada para el análisis de CI y los paneles de control.
Fallar la compilación cuando existen hallazgos (elección de política).
Generación de SBOM CycloneDX a partir del grafo de módulos para almacenamiento de artefactos.
go mod resuelve las directivas require en un grafo de módulos registrado en go.sum.
Las descargas proxy (GOPROXY) sirven hashes zip; la manipulación rompe la verificación.
govulncheck realiza análisis estático para ver si las funciones vulnerables son llamadas desde tus paquetes, reduciendo el ruido en comparación con los escáneres de CVE ingenuos.
Las herramientas SBOM (cyclonedx-gomod, syft) emiten JSON listando módulos, versiones y hashes para adjuntar a imágenes de contenedor o páginas de lanzamiento.
Las compilaciones de contenedores deben ejecutar escaneos en el mismo commit de go.mod que se incluye en la etiqueta de la imagen.
# Fijar toolchain en go.mod para CI reproducible# línea go.mod: go 1.26# Módulos privadosexport GOPRIVATE=github.com/myorg/*export GONOSUMDB=github.com/myorg/*
Omitir govulncheck porque existe go.sum - Las sumas de verificación prueban la integridad, no la ausencia de CVEs conocidos.
Escanear solo los requires directos - Los módulos transitivos introducen la mayoría de los hallazgos; escanea ./... a nivel de paquete.
Ignorar vulnerabilidades de la biblioteca estándar - Las notas de lanzamiento de Go incluyen correcciones de seguridad; las versiones de parche antiguas permanecen vulnerables.
SBOM generado una vez manualmente - La deriva de CI hace que los artefactos de auditoría queden obsoletos. Generar por compilación a partir de go.sum bloqueado.
Directivas replace a forks no verificados - replace evita la procedencia normal; revisar como código propio.
GONOSUMDB demasiado amplio - Deshabilitar la verificación de sumas para dominios enteros elimina la detección de manipulación.
Escaneo verde sin actualizar - govulncheck puede no informar vulnerabilidades alcanzables en una versión antigua hasta que los símbolos cambien; aún así, actualiza según la política de lanzamiento.
Como mínimo, en cada pull request y compilación de lanzamiento.
Las ejecuciones nocturnas programadas detectan nuevos CVEs publicados después de tu última fusión.
¿govulncheck modifica go.mod?
No.
Informa hallazgos; actualizas versiones con go get -u o go get module@patch específico.
¿Cuál es la diferencia entre hallazgos alcanzables e inalcanzables?
Alcanzable significa que tu código importa y llama a un símbolo vulnerable.
Los hallazgos inalcanzables aún pueden justificar actualizaciones, pero son de menor prioridad.
¿Debería el SBOM incluir la biblioteca estándar?
Sí, para una transparencia completa.
CycloneDX gomod incluye dependencias de módulos; documenta la versión de la toolchain de Go por separado en los metadatos de lanzamiento.
¿Cómo afectan los módulos privados al escaneo?
govulncheck analiza tu grafo de código; el código de los módulos privados se incluye.
Los datos de vulnerabilidad provienen de la Go VulnDB pública para módulos públicos y la biblioteca estándar.
¿Puedo incluir en lista blanca un hallazgo temporalmente?
Documenta la aceptación del riesgo con el propietario, la razón y la fecha de caducidad.
Vuelve a escanear semanalmente; elimina la lista blanca cuando se publique la solución.
¿Cambia el vendaje al escanear?
Ejecuta govulncheck contra los mismos paquetes; el código empaquetado es lo que compila.
Mantén vendor/ sincronizado con go mod vendor en CI.
¿Qué versión de Go debe usar CI?
Coincide con la directiva go en go.mod y el nivel de parche que requiere tu política de seguridad.
Usa GOTOOLCHAIN o pines de imagen de contenedor para la consistencia.
¿Cómo ayudan los SBOM durante los incidentes?
Cuando se publica un nuevo CVE, busca en los SBOM las versiones de componentes afectadas en todos los servicios sin tener que volver a escanear clústeres en vivo a ciegas.
¿El cumplimiento de licencias es parte del SBOM?
El SBOM lista los componentes; la clasificación de licencias puede requerir herramientas separadas.
Sigue siendo valioso para la revisión legal de dependencias transitivas.
¿Debo confirmar go.sum?
Sí.
Permite compilaciones reproducibles y go mod verify para todos los colaboradores y CI.
¿Cómo se relaciona esto con la guía de cadena de suministro de OWASP?
SBOM más escaneo de vulnerabilidades aborda componentes vulnerables conocidos (CWE-1104).
Combina con commits firmados, ramas protegidas y política de dependencias mínimas.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado de GC Green Tea, modernizadores de go fix - verificar parche en la compilación), chi (última versión - verificar en la compilación), gin (última versión - verificar en la compilación), echo (última versión - verificar en la compilación), google.golang.org/grpc (última versión - verificar en la compilación), sigs.k8s.io/controller-runtime (última versión - verificar en la compilación), kubebuilder (última versión - verificar en la compilación), tinygo (última versión - verificar objetivos de placa en la compilación), wazero (última versión - verificar en la compilación) y golangci-lint (última versión - verificar en la compilación).
Revisado por Chris St. John·Última actualización: 19 jul 2026