Pular para o conteúdo principal

CipherVault 1.2.1 — Cofres, OIDC Federation para CI/CD e refator AppConnections

· 3 min para ler
Time CipherVault
Notas oficiais de release

A versão 1.2.1 consolida três frentes que mudam como o CipherVault é usado em produção: introduz Cofres (Vaults) como container nomeado para Secrets e Fortress, traz OIDC Federation para CI/CD, e reorganiza AppConnections em torno do modelo vault-based.

✨ Novidades

Cofres (Vaults)

Nova entidade que agrupa Secrets normais + Fortress em containers nomeados por ambiente (Dev / Hml / Staging / Prd):

  • Tabela vaults com secret_ids[], fortress_secret_ids[], tags, status
  • CRUD completo em /vaults + GET /vaults/collisions (secrets em múltiplos cofres)
  • Validação de ambiente: vault PRD só aceita secrets PRD; secrets sem env podem ser auto-promovidos com promote=true (409 VAULT_ENV_PROMOTE_REQUIRED); hml/staging bloqueiam (409 VAULT_ENV_CONFLICT)
  • Página Vaults.jsx + VaultForm.jsx com classificação visual (ok / promote / conflict / em-múltiplos)

OIDC Federation para CI/CD

Pipelines trocam um id_token OIDC por bundle de certs fresco — zero segredo pré-compartilhado:

  • Suporte a GitHub Actions, GitLab CI, CircleCI (preset automático) + Jenkins, Bamboo (via plugin OIDC) + Custom (issuer/JWKS livres)
  • POST /app-connections/:id/federated-token (público, autentica via JWT) — valida signature, iss, aud, exp, iat ≤ 10min, subject pattern com wildcard seguro
  • CRUD de federation_configs com 5 endpoints
  • lib/federation.js com cache de JWKS (5min TTL via jwks-rsa)
  • Transação FOR UPDATE na emissão — evita race em chamadas concorrentes
  • UI FederationManager.jsx na página de detalhe da conexão + dialog gerador de snippet pronto pra pipeline

AppConnections — refator vault-based

  • Nova coluna vault_ids[] substituindo secret_ids[] na autorização
  • Página de detalhe em URL única: /AppConnections/<client_id> (UUID, não id sequencial)
  • client_secret agora prefixado com CipherVault_ — padrão tipo ghp_, sk-ant- para detecção de leaks por scanners
  • GET /app-connections/by-client/:clientId — resolve por UUID
  • GET /app-connections/auto-paths — lista auto-derivada de conexões × cofres × secrets
  • POST /app-connections/:id/export-zip — bundle AES-256 com senha custom (archiver-zip-encrypted)
  • GET /app-connections/fetch/:clientId/:vaultName/:secretName — fetch por nome (HTTP+mTLS)
  • Campos novos: environment, require_dpop, concurrent_session_*, external_ca_pem
  • Path aggregators agora vinculados obrigatoriamente a uma conexão, com escopo limitado (409 VAULT_OUT_OF_SCOPE)
  • Dialog de Client Secret após criação (antes o valor aparecia só em toast fácil de perder)

Auditoria (refresh)

  • Novo helper lib/audit.js fire-and-forget
  • 14+ actions novas: connection_*, path_*, vault_*, cert_{issued,revoked,rotated}, bundle_exported, dpop_toggled, concurrent_policy_changed, federation_*
  • Frontend: coluna "Data / Hora" como primeira da tabela, formato dd/MM/yyyy HH:mm:ss, ícones/labels por 30+ actions
  • Export CSV com escape correto + filename datado

Dashboard

  • Removido card "Tenants Ativos" (irrelevante pro contexto de secrets)
  • Novos cards: "Rotação em dia (≤ 90d)" e "Rotação atrasada (> 90d)"

🔒 Segurança

  • OIDC Federation elimina necessidade de compartilhar client_secret com pipelines
  • Prefixo CipherVault_ em client_secrets permite detecção por scanners
  • Export ZIP usa AES-256 real server-side (substituiu ZipCrypto legado do JSZip)
  • iat de id_tokens OIDC rejeitado se > 10min (replay window reduzida)
  • Transações com row-lock previnem race em write-heavy cert operations

🐛 Correções

  • Race em cert/issue com chamadas paralelas (perdia chave no read-modify-write do JWKS) — corrigido com transação FOR UPDATE
  • Castle icon faltando no import da aba Paths causava white screen
  • Date field mismatch em AuditTable (log.created_datelog.created_at)
  • Federation form abria com provider="github" mas issuer/jwks_url vazios — preset agora auto-aplicado
  • JWKS_KEY_NOT_FOUND mostrava mensagem vazia — agora surface .cause.code/.code

📊 Swagger

86 paths / 29 schemas documentados (antes 70 / 18).