Verificação de Dependências com govulncheck & SBOM
Go modules mais govulncheck fornecem um sinal de cadeia de suprimentos de primeira classe em CI, enquanto a exportação de SBOM responde a auditores e equipes de segurança que perguntam o que está incluído em cada binário.
Trate a verificação de vulnerabilidades como um portão, não como uma caixa de seleção única.
Seu serviço importa dezenas de módulos transitivos.
O banco de dados de vulnerabilidades Go registra CVEs que afetam pacotes da biblioteca padrão e de terceiros.
govulncheck analisa quais símbolos importados são realmente alcançáveis a partir do seu código e relata descobertas relevantes.
SBOMs (Software Bill of Materials) listam componentes e versões para conformidade, revisão de licenças e triagem de incidentes mais rápida quando um novo CVE é lançado.
Combine a verificação com go mod tidy, versões Go fixadas em CI e um SLA de patch.
#!/usr/bin/env bashset -euo pipefail# Trecho do trabalho de CI para example.com/myapiexport GOTOOLCHAIN=localgo versiongo mod downloadgo mod verifyecho "== govulncheck =="govulncheck -json ./... > govulncheck.json# Falhar em qualquer descoberta em CI (ajustar com arquivo de lista de permissões, se necessário)if jq -e '.finding | length > 0' govulncheck.json >/dev/null 2>&1; then echo "vulnerabilidades encontradas" 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 demonstrações de verificaçãopackage 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)}
O que isso demonstra:
go mod verify confirma que as entradas go.sum correspondem aos módulos baixados.
Saída govulncheck -json adequada para análise de CI e dashboards.
Falha na compilação quando existem descobertas (escolha de política).
Geração de SBOM CycloneDX a partir do grafo de módulos para armazenamento de artefatos.
go mod resolve as diretivas require em um grafo de módulos registrado em go.sum.
Downloads de proxy (GOPROXY) servem hashes zip; adulteração quebra a verificação.
govulncheck realiza análise estática para ver se funções vulneráveis são chamadas de seus pacotes, reduzindo o ruído em comparação com scanners de CVE ingênuos.
Ferramentas SBOM (cyclonedx-gomod, syft) emitem JSON listando módulos, versões e hashes para anexar a imagens de contêiner ou páginas de release.
Compilações de contêineres devem executar verificações no mesmo commit go.mod que está incluído na tag da imagem.
# Fixar toolchain em go.mod para CI reproduzível# Linha go.mod: go 1.26# Módulos privadosexport GOPRIVATE=github.com/myorg/*export GONOSUMDB=github.com/myorg/*
Pular govulncheck porque go.sum existe - Checksums provam integridade, não ausência de CVEs conhecidos.
Verificar apenas requires diretos - Módulos transitivos introduzem a maioria das descobertas; verifique ./... no nível do pacote.
Ignorar vulnerabilidades da biblioteca padrão - Notas de release do Go incluem correções de segurança; versões de patch antigas permanecem vulneráveis.
SBOM gerado uma vez manualmente - Desvio da CI torna os artefatos de auditoria desatualizados. Gere por build a partir de go.sum travado.
Diretivas replace para forks não verificados - replace contorna a proveniência normal; revise como código de primeira parte.
GONOSUMDB muito amplo - Desabilitar a verificação de soma para domínios inteiros remove a detecção de adulteração.
Scan verde sem atualização - govulncheck pode não relatar vulns alcançáveis em uma versão antiga até que os símbolos mudem; ainda assim, atualize de acordo com a política de release.
Versões da Stack: Esta página foi escrita para Go 1.26.x (padrão Green Tea GC, go fix modernizers - verifique o patch na compilação), chi (última versão - verifique na compilação), gin (última versão - verifique na compilação), echo (última versão - verifique na compilação), google.golang.org/grpc (última versão - verifique na compilação), sigs.k8s.io/controller-runtime (última versão - verifique na compilação), kubebuilder (última versão - verifique na compilação), tinygo (última versão - verifique os alvos de placa na compilação), wazero (última versão - verifique na compilação) e golangci-lint (última versão - verifique na compilação).
Revisado por Chris St. John·Última atualização: 19 de jul. de 2026