
Verificador de segurança Go
Inspeciona o código-fonte em busca de problemas de segurança, analisando a AST do Go e a representação de código SSA.
Licenciado sob a Apache License, Version 2.0 (a "Licença"). Você não pode usar este arquivo exceto em conformidade com a Licença. Você pode obter uma cópia da Licença aqui.
Você pode executar o gosec como uma GitHub action da seguinte forma:
Use a tag versionada com @master, que está fixada na
última versão estável. Isso proporcionará um comportamento estável.
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: ./...
Se o seu projeto importa módulos Go privados, você precisa
configurar a autenticação para que o gosec possa buscar as
dependências. Defina as seguintes variáveis de ambiente no
seu workflow:
GOPRIVATE: Uma lista separada por vírgulas de prefixos de caminhos de módulos
que devem ser considerados privados
(por exemplo, github.com/your-org/*).GITHUB_AUTHENTICATION_TOKEN: Um token do GitHub com acesso
de leitura aos seus repositórios 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: ./...
Você pode integrar ferramentas de análise de código de terceiros com a verificação de código do GitHub enviando dados como arquivos SARIF.
O workflow mostra um exemplo de execução do gosec como uma etapa
em um workflow de ação do GitHub que gera o arquivo results.sarif.
Em seguida, o workflow envia o arquivo results.sarif para o
GitHub usando a ação 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
O pacote goanalysis fornece um
golang.org/x/tools/go/analysis.Analyzer
para integração com ferramentas que suportam a interface padrão de
análise Go, como a estrutura
nogo
do Bazel:
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
gosec requer Go 1.25 ou mais recente.
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: a verificação terminou sem achados/erros não suprimidos1: pelo menos um achado não suprimido ou erro de processamento-no-fail para sempre retornar 0O Gosec pode ser configurado para executar apenas um subconjunto de regras, para
excluir determinados caminhos de arquivo e para produzir relatórios em diferentes
formatos. Por padrão, todas as regras serão executadas sobre os arquivos de
entrada fornecidos. Para verificar recursivamente a partir do diretório atual, você
pode fornecer ./... como argumento de entrada.
O gosec inclui regras nas seguintes categorias:
G1xx: problemas gerais de codificação segura (por exemplo, credenciais
embutidas no código, uso inseguro, endurecimento de HTTP, segurança de cookies)G2xx: riscos de injeção na construção de consultas/templates/comandosG3xx: riscos de manipulação de arquivos e caminhos (permissões, travessia de
caminhos, arquivos temporários, extração de arquivos compactados)G4xx: fraquezas de criptografia e TLSG5xx: importações em lista de bloqueioG6xx: verificações de correção/segurança específicas de Go (por exemplo,
aliasing em range e limites de slice)G7xx: regras de análise de taint (injeção de SQL, injeção de comandos,
travessia de caminhos, SSRF, XSS, log, injeção de SMTP, SSTI, desserialização
insegura e redirecionamento aberto)