Threat model, in short
We keep a written threat model of the service and update it as the code changes. It is the brief for an external security review before general availability. The main threats and what stops them:
- One customer attacking another. The project comes from the host name only; each project environment has its own database users; the process that serves requests never holds the database's root credentials.
- Stolen or forged tokens. Short-lived access tokens, refresh tokens that rotate on use, signing keys per environment, and a recent second factor for sensitive actions where you ask for it.
- Requests to addresses a customer chooses (webhooks, identity providers): sent through a guarded client that refuses private and internal addresses.
- Support access to a user's account. It is real impersonation, so it is off by default and needs a reason, a second factor and a time limit. It is audited, and the user is told.
- A compromised web server. It holds no keys, so an attacker can't take keys away, and nothing they saw keeps working after they are removed beyond ten-minute database tokens. While inside, though, they could read projects' data and ask the key service for signatures and decryptions as the server does. Per-project rate limits slow that down, every key operation is logged, and we watch for unusual access. We keep the server's dependencies few, its image minimal and its network access narrow, and the external review spends its time there.
Reliability
Anchr.ing runs on one server at Hetzner in the EU. There is no high-availability setup yet, and we would rather say so than imply one:
- Recovery point: 24 hours. A backup runs every night, so at most a day of changes is at risk.
- Recovery time: 4 hours. The time to restore the service from a backup, which we practise.
- Backups kept for 30 days, in the EU, encrypted to a key kept offline. Secrets stay encrypted inside them too; the master key is kept apart.
- Your API keeps working while we are down. It checks tokens offline with cached keys; new sign-ins and refreshes wait until we are back.
- No uptime promise yet. The status page shows the live state and any incidents.
Support: hello@anchr.ing, business hours (CET), first reply within one business day.
Where your data lives
All service data is stored in the EU, with Hetzner in Germany and Finland, and sign-in mail goes through Brevo in France. Payments for Anchr.ing plans happen on the payment page of Adyen in the Netherlands: card and bank details never reach our servers. The sub-processor list names every company that processes personal data for us, what it sees and where. The Data Processing Agreement covers your users' data and the measures above.
Report a vulnerability
Email security@anchr.ing with what you found, how to reproduce it and what it affects. We confirm within one business day, keep you posted while we fix it, and credit you when it is fixed if you want.
- Test only against your own account and projects. Don't access or change other people's data.
- No denial-of-service or load tests, no social engineering, no spam.
- Give us reasonable time to fix it before you publish.
We won't pursue research done in good faith within these rules. There is no paid bug bounty yet. Machine-readable: security.txt.