# Security Policy

Aeonora is open beta. An internal security review passed on 2026-07-19, but no independent professional audit has occurred. Do not use it to control material funds or irreversible actions.

## Report a vulnerability

Use the repository host's private security-reporting channel. Do not open a public issue containing exploit details, private keys, personal data, or vulnerable deployment coordinates.

## Current security boundary

- Local registry files assume a trusted local filesystem and are not a multi-user authorization service.
- Controller private keys must remain outside the repository and should use wallet/HSM custody in production.
- On-chain commitments prove integrity and ordering, not execution truth.
- Browser vault plaintext and its recovery phrase stay client-side. The API receives ciphertext, a bearer capability token, version, and commitment. Blob objects are public ciphertext at unguessable paths; confidentiality does not depend on their URL staying secret.
- A recovery phrase controls both decryption and remote access. Loss is permanent; disclosure compromises the vault.
- Passkey unlock requires WebAuthn PRF support and is a device convenience, not the only recovery method.
- Vercel Blob can delete or withhold ciphertext. A self-hosted IPFS copy improves retrievability, but the current single pin is not independent redundancy. Public chain commitments detect unauthorized mutation but do not guarantee availability.
- Contracts compile and pass local integration checks, including controller recovery and IPFS brain pointers, but have not received an external audit or a recorded canonical public deployment.

See [internal security review](docs/security-audit-2026-07-19.md).
