WASViking Docs
⌘K
Agente Sentinel

wasviking-sentinel secrets

Encontre secrets vazados em disco e no histórico do git, opcionalmente verifique ao vivo se eles estão ativos, sem que os secrets brutos saiam do host.

wasviking-sentinel secrets roda localmente no host, percorre o sistema de arquivos e, opcionalmente, o histórico do git, e reporta credenciais vazadas. A propriedade central: os secrets brutos nunca saem do host. Apenas um hash SHA-256 e uma prévia mascarada chegam à WASViking®.

Cobertura OWASP: A07 (Identification and Authentication Failures), CWE-798 (Use of Hard-coded Credentials).

O que ele detecta

O catálogo de detectores vem com 32 padrões, incluindo:

Provedor O que é detectado
AWS Pares de access key ID + secret access key, tokens de sessão.
GitHub Personal access tokens (classic e fine-grained), tokens de instalação de app.
GitLab Personal access tokens, tokens de registro de runner.
Stripe Chaves de API live e de teste (sk_live, sk_test).
SendGrid Chaves de API.
Slack Tokens de bot, tokens de usuário, URLs de webhook.
PagerDuty Chaves de integração de serviço.
Twilio Account SIDs + auth tokens.
Banco de dados URIs de conexão de Postgres / MySQL / MongoDB / Redis com credenciais.
Genérico Chaves privadas RSA / EC / OpenSSH.
Provedores de nuvem JSON de service account do GCP, connection strings do Azure.

O catálogo completo de detectores faz parte do binário. Novos detectores chegam a cada release.

O que ele NÃO detecta

Para suprimir ruído:

  • Fixtures de teste e valores fictícios bem conhecidos (aws_secret_key_AKIA…EXAMPLE).
  • Placeholders de documentação com EXAMPLE, PLACEHOLDER, XXXX.
  • Arquivos em caminhos comuns de documentação e teste (/docs/, /__tests__/, *.test.{js,ts,py}).
  • Padrões sinalizados pelo classificador de IA como texto que é obviamente placeholder.

Verificação de licença (preflight)

Antes de qualquer trabalho local, secrets chama o endpoint de preflight da WASViking para confirmar que a chave de API da organização está ativa. Isso é exigido mesmo quando você não está enviando resultados.

  • --api-key (ou a variável de ambiente WASV_API_KEY) é obrigatória. Ausente ou vazia, a execução é recusada com exit 1.
  • A verificação é POST /api/v1/sentinel/preflight. Qualquer chave de API ativa da organização passa; nenhum escopo específico é necessário para o preflight em si.
  • O resultado fica em cache em ~/.wasviking/preflight_cache.json (modo 0600) por 30 minutos por padrão (TTL vindo do servidor, limitado a 60s..6h).
  • Dentro do TTL, as chamadas seguintes pulam a rede por completo.
  • Se a API estiver inacessível, mas houver em disco uma aprovação recente e bem-sucedida (dentro de uma janela de tolerância de 24 horas), a execução continua. Indisponibilidades curtas da WASViking não quebram o CI do cliente.
  • Se a API rejeitar ativamente a chave (401 / 403), a janela de tolerância não se aplica. Chaves revogadas bloqueiam na próxima expiração do cache.
  • A chave do cache é um SHA-256 truncado da chave de API, então rotacionar a chave invalida o cache automaticamente.

A flag --submit é independente. --api-key é obrigatória independentemente de você enviar resultados ou não.

Uso básico

A partir do diretório que contém a árvore de código-fonte:

export WASV_API_KEY="wv_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
wasviking-sentinel secrets --path .
[sentinel] Walking .
[sentinel] Files scanned: 5,142
[sentinel] Secrets detected: 4
[sentinel]   aws_secret_key   src/config/prod.py:18  unverified
[sentinel]   github_pat       scripts/deploy.sh:5    unverified
[sentinel]   stripe_sk_live   src/billing/keys.py:3  unverified
[sentinel]   slack_webhook    src/alerts/post.go:9   unverified

Os artefatos de relatório são gravados em --out (padrão .).

Verificação ao vivo

10 detectores oferecem verificação ao vivo opcional. O agente consulta o endpoint legítimo do provedor para checar se o secret está válido no momento.

wasviking-sentinel secrets --path . --verify
[sentinel] aws_secret_key   src/config/prod.py:18  VERIFIED LIVE
[sentinel] stripe_sk_live   src/billing/keys.py:3  VERIFIED LIVE
[sentinel] github_pat       scripts/deploy.sh:5    invalid (404 from provider)
[sentinel] slack_webhook    src/alerts/post.go:9   no verifier available

A verificação ao vivo:

  • Usa endpoints de identidade somente leitura do provedor sempre que possível.
  • Nunca modifica estado no provedor remoto.
  • Registra o endpoint do verificador no log do agente, para que um auditor possa ver exatamente o que foi consultado.

Garantia de privacidade

O payload de envio para a WASViking contém:

  • ID do detector e severidade.
  • Caminho do arquivo e número da linha.
  • Um hash SHA-256 do secret bruto.
  • Uma prévia mascarada (AKIA••••••••••••••••XYZ7).
  • Resultado da verificação ao vivo (booleano).

O secret bruto fica em memória no host apenas pelo tempo necessário para verificá-lo (se solicitado) e depois é descartado. Ele nunca é gravado em nenhum sistema da WASViking.

Histórico do git

wasviking-sentinel secrets --path . --git

--git percorre o histórico do git do repositório além da working tree. Útil para encontrar secrets que foram commitados e depois "removidos" por um commit posterior, mas que continuam vivos no histórico. Mais lento que um scan da working tree; roda sobre todos os commits alcançáveis no repositório local.

Envie para o seu tenant

wasviking-sentinel secrets \
  --path . \
  --submit \
  --api-key "$WASV_API_KEY"

Os achados chegam ao portal em Application Security → Hard-coded Secrets como Findings, com a categoria token_exposure ou credential_exposure. Eles alimentam o Risk Score e o fluxo de trabalho de Findings.

Referência de flags

Flag Finalidade Padrão
--path Diretório a analisar, de forma recursiva. .
--out Diretório onde gravar os artefatos de relatório. .
--fail-on Limite de severidade: critical, high, medium, low, none. high
--git Percorre também o histórico do git do repositório (mais lento). false
--verify Chama os endpoints de identidade dos provedores para confirmar que as ocorrências estão ativas (somente leitura). false
--submit Faz POST das ocorrências para a API da WASViking depois do scan. false
--api URL base da API da WASViking. Env: WASV_API. https://api.wasviking.com
--api-key Chave de API da organização. Obrigatória em toda execução (preflight). Adicione o escopo secrets:submit à chave se você também usa --submit. Env: WASV_API_KEY. (obrigatória)
--timeout Tempo máximo total (wall-clock) do pipeline de secrets. 10m0s

Exit codes

Exit code Significado
0 OK. Nada no limite de --fail-on ou acima dele.
1 Falha genérica (IO, rede, parse).
2 Argumento inválido, ou --submit sem uma chave de API.
73 Uma credencial no limite de --fail-on ou acima dele que o --verify confirmou como ativa.
74 Ocorrências no limite de --fail-on ou acima dele que não foram verificadas.
79 Falha de cobertura: a raiz não pôde ser percorrida, então nada foi analisado. Nunca é retornado para um projeto que está simplesmente vazio. Veja Falhas de cobertura.

A separação entre 73 e 74 existe para que um pipeline possa tratar uma credencial confirmada como ativa como um incidente e uma ocorrência não verificada como um item de revisão, sem fazer parse do log.

O próprio secrets pode ser usado como gate de CI via --fail-on. Para o wrapper de nível mais alto, que combina secrets + sbom + scans orientados por template em uma única passada, veja wasviking-sentinel ci.

Integração com CI

Veja wasviking-sentinel ci para o wrapper de gate de CI/CD. O subcomando secrets sozinho serve bem para pipelines que só precisam deste gate.