All help topics
Security
Session, guardrail, and security principles of the current ALPHA line.
Updated: 2026-05-12
Purpose
This page explains how ARIA stores sensitive values and how the current alpha security model works: login, secure store, CSRF, guardrails, and confirmation-required actions.
What is stored encrypted
The secure DB (data/auth/aria_secure.sqlite) currently stores:
- LLM and embedding API keys
- profile API keys and tokens for connections
- user credentials with password hash and role
- additional runtime secrets when a module stores them there
Passwords are not stored in plaintext. Secrets are encrypted with AES-256-GCM.
Where the key lives
The master key lives in config/secrets.env:
ARIA_MASTER_KEYARIA_AUTH_SIGNING_SECRETARIA_FORGET_SIGNING_SECRET
Recommended permissions: 600.
These values must not be committed to git. If they are missing, ARIA creates persistent values on first start.
Cleartext to secure DB migration
./aria.sh secure-migrate
This copies secrets from config/config.yaml into the secure DB, clears YAML fields, and writes a backup.
Login and sessions
- login URL:
/login - session cookie is signed
- user names are case-sensitive
- disabled or removed users lose their session immediately
- the first bootstrap user becomes admin while bootstrap is not locked
- admin mode and role are separate: only admins can use admin features at all
CSRF and browser protection
State-changing browser requests are protected with CSRF tokens:
- cookie:
aria_csrf_token - forms include the token automatically
- fetch/HTMX sends
X-CSRF-Token - missing or invalid tokens are rejected with
403
ARIA also sets default security headers such as CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, and Permissions-Policy.
Guardrails for actions
The Agentic Action Flow separates:
- Draft: What might the user mean?
- Policy/Guardrail: Is it allowed, should it ask, or must it be blocked?
- Runtime: What is actually executed?
Possible policy results:
allow– executeask_user– ask for chat confirmationblock– do not execute
Examples:
- read-only SSH such as
df -hor health checks: can be allowed - service restarts: blocked by default or require explicit admin policy
- Discord/Webhook sends: ask for confirmation
One-click confirmation
When ARIA should not execute an action directly, chat shows a button such as Run action. This replaces fragile manual token copying for normal use. The older confirmation-code path can remain as a fallback, but should not be the preferred UX.
Public alpha boundary
ARIA is intended for controlled environments:
- LAN/VPN or reverse proxy with proper auth
- no secrets in the image
- no secrets in git
- volumes for persistent data
- updates through managed helper or deliberate host commands
Direct public internet exposure without additional protection is not recommended for the alpha.
Troubleshooting
ARIA_MASTER_KEY missing: checkconfig/secrets.envand start through the intended path.- new keys do not take effect: check
security.enabled, secure DB path, and restart. - action is blocked: read chat details; policy and guardrail reason are shown there.
- confirmation button does not execute: check browser/CSRF/session and the chat detail type
routed_action_pending.
Source: docs/help/security.en.md
