Tier overview
Tier 1 — Local daemon
vaultd is the primary trust boundary for zero-knowledge operations.
What it protects:
- Unlocked root keys (held in process memory only)
- Per-item DEK decryption
- Secret injection into spawned subprocesses
- Unix domain socket (
0600permissions, owner-only, inside a0700directory) - Process memory (mitigated by a 15-minute inactivity auto-lock that zeroes key buffers with
Uint8Array.fill(0); best-effort only — the JS runtime does not guarantee every copy is erased) - Swap or core dumps (not mitigated: abadge does not
mlockkey pages)
Tier 2 — Browser
The browser holds the derived root key in JavaScript memory for the session. Additional attack surface beyond the daemon:- XSS — if achieved, the attacker can steal the unlocked root key. Catastrophic.
- Malicious JS bundle — if the server ships compromised code it can exfiltrate the key.
- Browser extensions can read page memory.
- Tab persistence — the key is lost on tab close (no
localStorageorIndexedDB).
Tier 3 — Server (zero-knowledge for ZK items)
The server stores only ciphertext, wrapped keys, salts, and KDF parameters for ZK items. What the server cannot do:- Decrypt ZK item ciphertext
- Derive the user’s root key or KEK
- Recover a profile without the master password or recovery key
- Decrypt server-managed items (by design)
- See item IDs, storage modes, timestamps, and sizes for all items
- Delete or corrupt ciphertext (availability attack, not confidentiality)
- Serve malicious JS to browser clients (see Tier 2)
- Observe access patterns
- All server-managed item plaintext (assuming
ENCRYPTION_KEYis also obtained) - ZK item ciphertext (useless without root keys)
- Wrapped root keys (useless without master passwords)
- KDF parameters (enables offline brute-force of weak master passwords)
- Access patterns and audit metadata
Tier 4 — Remote agents
Remote agents (cloud workers, CI runners, webhook handlers) authenticate with short-lived Ed25519 keypair sessions (abs_) and can only access server-managed items with read permissions.
What a compromised remote agent exposes:
- Only the server-managed items it has permissions for
- Only until the permission expires or is revoked
- Any zero-knowledge item (no decryption capability)
- Any item without an explicit grant
Threats and mitigations
Server-breach impact by storage mode
Explicit non-goals (v1)
- Protection against local root or admin attackers
- Hardware security module integration
- Secure multi-party computation for shared secrets
- Organization-level vault cryptography
- Tamper-evident audit log chaining
- Protection against compromised build/deploy pipelines serving malicious JS