Beta Crew2FA is currently in beta — features may change and you may encounter bugs. Please report issues to bug_report@crew2fa.com. Learn more

Security

Last updated 2026-07-29. A plain-English description of how we protect your account and the infrastructure we run on.

Encryption

All TOTP secrets are encrypted before being stored. The database holds ciphertext only; an attacker who reads a raw database row sees encrypted bytes, not a usable shared secret.

Password hashing

Passwords are hashed using a memory-hard algorithm with parameters tuned to resist GPU and ASIC attacks. The same hardware that cracks MD5 in seconds does not make modern password-hashing schemes economical to attack at scale.

Hashes are salted; salting is handled by the underlying algorithm, so two users with the same password have different hashes on disk. We never store plaintext passwords, never email them back, and never log them.

Multi-factor authentication

2FA is mandatory for every account. There is no bypass for site administrators, no bypass for power users, and no way to disable it after enrollment. Every login requires both a password and a current time-based one-time password.

Recovery codes

Every account is issued 10 recovery codes at enrollment. Each code is 10 lowercase-alphanumeric characters (~1.7 × 1015 possibilities per code). They are shown once, at enrollment, and can be regenerated from your profile at any time.

Infrastructure

The service runs on a single virtual machine hosted by Hetzner Cloud in Falkenstein, Germany. We do not use multi-region failover, container orchestrators, or third-party PaaS — the attack surface is the one Hetzner VM, plus the Cloudflare edge in front of it.

Responsible disclosure

We accept vulnerability reports from independent security researchers and operate under a coordinated-disclosure model. We will not pursue legal action against researchers who stay within scope, give us a reasonable window to fix before public disclosure, and avoid privacy violations or service disruption.

Severity tiers and fix SLAs:

  1. Critical — RCE, authentication bypass, encryption-key disclosure, mass data exposure. Fix within 7 days.
  2. High — stored XSS, CSRF bypass, privilege escalation. Fix within 30 days.
  3. Medium — information disclosure, denial-of-service, broken access control. Fix within 90 days.
  4. Low — cosmetic, style, documentation. Fix in the next sprint.

Reporter credit is included in the postmortem if requested. We do not currently run a paid bug-bounty program, but we will respond promptly, triage fairly, and disclose the fix publicly when the reporter agrees.

Vulnerability reporting

Where to send it: security@crew2fa.com. Every report is acknowledged within 2 business days and updated with a status within 7 days. We treat security reports with the same care as privacy incidents.

What to include:

What NOT to do:

Scope:

Backups

A nightly snapshot protects against operator error (accidental DROP TABLE, silent corruption, bad migration) and against the unlikely event of an infrastructure failure. It does not replicate off-host; full regional failover is on the roadmap.

Audit logging

Every security-relevant action writes an audit log row with the actor, the organization (where applicable), the action name, the timestamp, the IP address, the user-agent, and a JSON metadata blob. Deleting a user preserves the audit row and nulls the actor pointer instead of cascading the trail away.

What gets logged:

Who can see it:

Retention: for the life of the account plus 30 days of grace, after which associations are hard-deleted per the privacy policy.