
gosec v2.28.0
Verificador de segurança Go
gosec - Verificador de Segurança para Go
Inspeciona código fonte em busca de problemas de segurança através da varredura da AST (Árvore Sintática Abstrata) do Go e da representação de código SSA.
Links rápidos
- Ação do GitHub
- Instalação local
- Início rápido
- Padrões de uso comuns
- Selecionando regras
- Formatos de saída
Características
- Regras baseadas em padrões para detectar problemas comuns de segurança em código Go
- Analisadores baseados em SSA para conversões de tipo, limites de slice e problemas de criptografia
- Análise de taint para rastrear fluxo de dados desde a entrada do usuário até funções perigosas (SQL injection, command injection, path traversal, SSRF, XSS, log injection, SMTP injection, SSTI, desserialização insegura, open redirect)
Licença
Licenciado sob a Licença Apache, Versão 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.
Status do projeto
Instalação
Ação do GitHub
Você pode executar gosec como uma ação do GitHub da seguinte forma:
Use a tag versionada com @master que está fixada na versão estável mais recente.
Isso fornecerá um comportamento estável.```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: ./...
#### Verificação de Projetos com Módulos Privados
Se o seu projeto importa módulos Go privados, você precisa
configurar a autenticação para que `gosec` possa buscar as
dependências. Defina as seguintes variáveis de ambiente em
seu fluxo de trabalho:
- `GOPRIVATE`: Uma lista separada por vírgulas de prefixos de caminhos de módulo
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.```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: ./...
Integração com a verificação de código
Você pode integrar ferramentas de análise de código de terceiros com a verificação de código do GitHub carregando dados como arquivos SARIF.
O workflow mostra um exemplo de execução do gosec como uma etapa
em um workflow do GitHub Actions que gera o arquivo results.sarif.
Em seguida, o workflow envia o arquivo results.sarif para o
GitHub usando a ação upload-sarif.```yaml
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álise do Go
O pacote `goanalysis` fornece um
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
para integração com ferramentas que suportam a interface padrão de análise do Go,
como o framework [nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst) do Bazel:```starlark
nogo(
name = "nogo",
deps = [
"@com_github_securego_gosec_v2//goanalysis",
# add more analyzers as needed
],
visibility = ["//visibility:public"],
)
Instalação Local
O gosec requer Go 1.25 ou superior.```bash go install github.com/securego/gosec/v2/cmd/gosec@latest
## Início 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 ./...
Códigos de saída
0: verificação concluída sem achados/erros não suprimidos1: pelo menos um achado não suprimido ou erro de processamento- Use
-no-failpara sempre retornar0
Uso
Gosec pode ser configurado para executar apenas um subconjunto de regras, excluir determinados caminhos de arquivo e gerar relatórios em diferentes formatos. Por padrão, todas as regras serão executadas nos arquivos de entrada fornecidos. Para verificar recursivamente a partir do diretório atual, você pode fornecer ./... como argumento de entrada.
Regras disponíveis
gosec inclui regras nestas categorias:
G1xx: issues gerais de codificação segura (por exemplo, credenciais codificadas, uso inseguro, hardening HTTP, segurança de cookies)G2xx: riscos de injeção na construção de consultas/modelos/comandosG3xx: riscos de manipulação de arquivos e caminhos (permissões, travessia, arquivos temporários, extração de arquivos)G4xx: fraquezas de criptografia e TLSG5xx: importações em lista de bloqueioG6xx: verificações de correção/segurança específicas do Go (por exemplo, alias de intervalo e limites de slice)G7xx: regras de análise de contaminação (SQL injection, command injection, path traversal, SSRF, XSS, log, SMTP injection, SSTI, desserialização insegura e redirecionamento aberto)
Para a lista completa, descrições das regras e configuração por regra, consulte RULES.md.