Pular para o conteúdo principal

Browser Extension — Chrome + Firefox

A partir da v4.8, o CipherVault tem extensão de navegador nativa em Manifest V3, com builds separados pra Chrome e Firefox. Cobre os fluxos clássicos de password manager: autofill, capture-on-submit, secret list rápido, password generator.

Features

🔍 Secret list + busca + click-to-copy

Popup mostra todos os secrets do tenant com:

  • Search incremental por name/tags
  • Click-to-copy com auto-clear clipboard 30s (configurável)
  • Badge inline se secret tem breach watch flag

🔒 ZK unlock + decrypt-on-reveal

Vaults marcados is_zero_knowledge=true aparecem com cadeado. Click → prompt passphrase + decrypt no popup via @ciphervault/zk-sdk. Keystore em memória do background service worker, TTL = idle timeout.

⚡ Autofill content script

Detecta forms login/registro via heurística (input type=password + campo username adjacente). Inject highlight + popup com 1-click fill.

📥 Capture-on-submit

Intercepta <form> submit em domain não-CV. Se credentials parecem novas (não match com secret existente), popup oferece "salvar como secret" pré-preenchendo name/value.

⏰ Auto-lock timer

Idle timeout configurável (5min default). Background service worker limpa keystore + força re-auth.

🔑 Password generator

6 perfis built-in:

  • Alfa (a-zA-Z)
  • Alfanumérico (a-zA-Z0-9)
  • Simbólico (a-zA-Z0-9 + 18 chars !@#$...)
  • PIN (0-9, length 4-8)
  • Passphrase (EFF wordlist, 4-6 palavras)
  • Custom (toggle individuais)

Output direto no clipboard ou em campo focado.

Install

Chrome / Edge / Brave

  • Chrome Web Store: pendente review (será atualizado no blog)
  • Self-host:
    git clone https://github.com/Martinez1991/ciphervault
    cd ciphervault/tools/browser-extension
    npm install
    npm run build
    # → dist/ ready to load unpacked em chrome://extensions

Firefox

  • AMO: pendente listing
  • Self-host:
    npm run build:firefox
    # → dist-firefox/ ready to load em about:debugging

Configuração

Primeira execução pede:

  • URL do CV (https://cv.acme.com.br)
  • Login (SSO redirect se tenant SAML, ou email+password)

Settings (gear icon):

  • Idle timeout (1-60 min)
  • Clipboard auto-clear (10s - 300s)
  • Autofill enabled (global toggle)
  • Capture-on-submit prompt (silent | ask | off)
  • ZK keystore TTL (= idle timeout default)

Manifest V3 permissions

{
"permissions": [
"storage", // session + persistent settings
"activeTab", // page interaction
"scripting", // inject autofill
"tabs", // detect URL changes
"alarms", // auto-lock timer
"clipboardWrite" // password copy + auto-clear
],
"host_permissions": ["https://*/*"]
}

Não solicita <all_urls> em content script broad — só https://*/* (no HTTP plain) + escopo por aba (activeTab).

Architecture

┌─────────────────────────────────────────────────┐
│ Browser │
│ │
│ ┌───────────────────────────────────────────┐ │
│ │ Service Worker (background.js) │ │
│ │ ├── session storage │ │
│ │ ├── ZK keystore (in-memory, idle clears) │ │
│ │ ├── alarms (auto-lock) │ │
│ │ └── CV API client (mTLS+DPoP via cv-sdk) │ │
│ └─────────────┬─────────────────────────────┘ │
│ │ │
│ ┌────────────┴───────────┬─────────────────┐ │
│ ▼ ▼ ▼ │
│ Popup Content (autofill) Content (capture)
│ • secret list • detect forms • submit hook
│ • search • highlight • offer save
│ • password gen • inject fill UI
└─────────────────────────────────────────────────┘

Segurança

  • No background fetch sem user gesture (best practice MV3)
  • object-src 'self' + script-src 'self' CSP locked-down (no eval)
  • mTLS + DPoP já no SDK base — extensão herda
  • Session storage (não localStorage) — clear em browser close
  • web_accessible_resources minimal — apenas content/autofill.js exposto
  • Não armazena passphrase ZK em storage persistente (chrome.storage.session only, MV3)

Limitações

  • No fingerprint biometric ainda — roadmap (Web Authentication API)
  • No native messaging com app desktop — Chrome/Firefox only
  • No mobile (iOS Safari extension) — MV3 iOS é diferente, roadmap separado
  • Capture-on-submit limitado a application/x-www-form-urlencoded simples — SPAs com fetch() custom não detectados em todos os casos

Referências