What happens if the hosted server is compromised

A precise, attack-by-attack account of what a fully compromised PolicyVault server can and cannot do to your funds.

This page takes the worst honest case seriously: assume the PolicyVault hosted API server is completely compromised — an attacker has full control of it. What can they actually steal?

The short answer

Nothing, unilaterally. No key material exists on the server in any deployment mode. Every covenant transition requires a signature over the exact frozen transaction bytes, produced inside your own wallet, and Kaspa consensus independently enforces every covenant rule against whatever the server ultimately submits. A compromised server also cannot convert a login (authentication) signature into a spending signature — they use cryptographically distinct signing domains, verified against Kaspa's own reference implementation.

What a fully compromised server can do

Attack-by-attack: what actually stops each attempt

A compromised server tries to…What actually stops it
Replace the recipient on an agent spendThe covenant's Merkle-committed allowlist rejects any transaction paying an unlisted recipient, regardless of what the server built.
Increase the amountThe covenant's per-spend cap, budget, and conservation checks reject it — even with a completely genuine agent signature.
Inflate the feeThe covenant computes the actual fee from the transaction's real inputs/outputs and caps fee-reserve consumption independently.
Swap the agentThe agent's identity is bound into what the signature must match; a different key fails the covenant's own signature check.
Change the approver set or thresholdRequires the owner's actual signature over bytes containing the change — a server cannot forge it.
Replay or reuse a signed requestThe bound predecessor UTXO is consumed exactly once by consensus; a duplicate submission is rejected.
Serve a stale or substituted vault/networkConfig, request, manifest, and node network identity must all agree; address prefixes and wallet network binding are separately checked.
Trick the browser into signing different bytes than intendedThe central residual risk. Your wallet renders its signing popup from the actual bytes it was given, independent of the page's own display; PolicyVault's own pre-sign review independently re-derives the same bytes and refuses to offer a signature action on any mismatch. See Local intent verification and What KasWare signs.

The one honestly irreducible risk

A user who approves a wallet signing popup without reading it can still be defrauded by a fully compromised frontend — no software control can protect someone who signs without looking. This is the wallet-review trust anchor, and PolicyVault states it plainly rather than implying a false guarantee: read what your wallet shows you before you sign, especially recipient, amount, and fee.

See also: Non-custodial architecture, What the hosted server can and cannot do.