0 XP

DEVOPSQUEST

Minha Trilha
Módulo 5 · CI/CD com GitHub Actions

Quality gates: SAST, dependências e tratamento de vulnerabilidades

Avançado 50 min+25 XPGitHub ActionsSemgrepnpm audit

Objetivos desta aula

  • Distinguir SAST de análise de dependências
  • Criar gates de segurança com critérios explícitos
  • Bloquear publicação quando um gate obrigatório falha
  • Tratar falsos positivos com justificativa e prazo
  • Manter ferramentas e regras atualizadas

Qualidade e segurança precisam de critérios executáveis. Um pipeline que apenas imprime alertas pode continuar publicando código vulnerável. Um quality gate define quais achados reprovam a execução, quem os avalia e quais evidências permitem uma exceção.

SAST examina o código sem executar o produto. Regras podem identificar construção insegura de consultas, uso perigoso de funções e outros padrões. O resultado depende da linguagem e do conjunto de regras; semgrep scan não comprova que toda entrada do usuário está protegida.

Análise de dependências olha outro risco: pacotes diretos e transitivos podem ter vulnerabilidades conhecidas. npm audit consulta avisos do ecossistema e usa o lockfile para mapear versões. Um código próprio sem alertas SAST ainda pode importar uma biblioteca comprometida.

Severidade não é contexto completo. Examine se o componente está em produção, se o caminho vulnerável é alcançável e se há correção disponível. Uma política inicial pode bloquear avisos de severidade alta ou crítica; documente a evolução para evitar que alertas sejam ignorados em massa.

Ferramentas também fazem parte da cadeia de confiança. O exemplo pressupõe Semgrep instalado na imagem do runner pelo processo aprovado da equipe, com versão registrada. As regras p/ci são remotas e exigem acesso à rede; em uso controlado, revise e versione um conjunto local.

Falha deve ser inequívoca: --error faz achados Semgrep reprovarem a execução e --strict trata avisos de configuração como falhas. Não acrescente || true para deixar o CI verde; indisponibilidade do scanner exige investigação, não aprovação silenciosa.

Exceção é uma decisão com prazo. Para um falso positivo, registre regra, trecho, justificativa, responsável e revisão futura. Para risco real sem correção imediata, estabeleça mitigação e vencimento; uma lista de exclusões sem dono vira dívida invisível.

O gate precisa proteger o destino. Exija o check de segurança antes do merge e faça o job de publicação depender dele com needs. Mantenha testes e scan de imagem como verificações adicionais: SAST e auditoria de pacotes não cobrem configuração de runtime nem substituem revisão humana.

Na prática

.github/workflows/seguranca.yml: gates separados por responsabilidade

yaml

name: seguranca
on: [pull_request, push]
permissions:
  contents: read
jobs:
  dependencias:
    runs-on: ubuntu-latest
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: 22
      # Primeiro verifique o lockfile sem executar scripts de instalação.
      - run: npm ci --ignore-scripts
      # Inclui dependências de desenvolvimento: elas também executam no CI.
      - run: npm audit --audit-level=high
  sast:
    # Runner efêmero, isolado e exclusivo para código confiável interno.
    # A imagem aprovada deve conter Semgrep com versão fixada e Python.
    runs-on: [self-hosted, linux, semgrep-ephemeral]
    timeout-minutes: 10
    steps:
      - uses: actions/checkout@v4
      - run: semgrep --version
      # Em produção, prefira regras locais revisadas e versionadas.
      - run: semgrep scan --config p/ci --error --strict .

Reproduzir a triagem sem aplicar correções cegamente

bash

# Execute no ambiente aprovado, com as mesmas versões usadas no CI.
# npm audit retorna código diferente de zero quando encontra riscos.
npm audit --json > audit.json
# Consulte cadeias de dependências antes de escolher uma atualização.
npm explain nome-do-pacote
# Para regras revisadas em .semgrep/, gere evidência local de SAST.
semgrep scan --config .semgrep/ --error --strict --json --output semgrep.json .
# Não aplique npm audit fix --force sem revisar mudanças e rodar testes.

Por que isso importa

Gates independentes encontram classes diferentes de falhas e impedem que um alerta conhecido acompanhe o artefato até produção sem avaliação.

Erro comum

Usar || true em scanners obrigatórios ou executar npm audit fix --force sem avaliar mudanças incompatíveis.

Dica de produção

Fixe actions por SHA revisado, mantenha runners efêmeros e versione regras; exija que publicação aguarde todos os gates obrigatórios.

Alerta de segurança

Nunca execute PRs públicos não confiáveis em runners self-hosted com acesso interno; use runners hospedados isolados ou uma infraestrutura efêmera sem secrets e sem acesso à rede corporativa.

Pergunta de entrevista

Qual a diferença entre um alerta SAST e uma vulnerabilidade de dependência, e como você trataria uma exceção em cada caso?

Glossário

SAST
Análise estática de código para identificar padrões potencialmente inseguros.
SCA
Análise de componentes e dependências, incluindo vulnerabilidades conhecidas.
quality gate
Critério automatizado que permite ou impede avançar no fluxo de entrega.
falso positivo
Alerta que, após avaliação, não representa a falha indicada naquele contexto.
dependência transitiva
Pacote incluído indiretamente por outra dependência do projeto.

Conexão com o CloudShop

Bloquear o merge e a publicação do CloudShop quando SAST ou auditoria de dependências violarem a política definida.

Quiz da aula

  1. 1. Qual análise procura padrões inseguros no código próprio?

  2. 2. Qual é o problema de scanner || true em um gate obrigatório?

  3. 3. Como tratar um falso positivo de forma responsável?

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima