La sécurité n'est pas une fonctionnalité.
C'est le fondement.
Chaque affirmation sur cette page correspond à du vrai code dans la base de code sh0. 34 problèmes trouvés et corrigés à travers 3 audits parallèles. 6 vulnérabilités critiques résolues. Zéro raccourci.
Résultats de l'audit
Audit de sécurité complet couvrant l'authentification, la cryptographie, la surface API et le frontend.
Ce que nous protégeons
Six couches de sécurité fondamentales, chacune vérifiée dans le code source Rust.
AES-256-GCM Encryption
All secrets, env vars, backup files, SSH keys, and API tokens encrypted with AES-256-GCM via the ring crate. Nonce format: nonce(12) || ciphertext || tag(16). Authenticated encryption ensures both confidentiality and integrity.
Argon2id Password Hashing
OWASP-recommended Argon2id for all password storage. PHC-format hash output with unique random salt per password. TOTP backup codes also hashed with Argon2id.
HTTP-Only Cookie Auth
Access tokens (15 min) and refresh tokens (30 days) stored in HTTP-only cookies with SameSite=Strict. Secure flag auto-enabled in production. CSRF double-submit cookie pattern.
API Key Security
Format: sh0_ prefix + 32 random chars. SHA-256 hashed storage, prefix-based lookup (first 8 chars). Constant-time comparison via the subtle crate to prevent timing attacks.
RBAC & Project Permissions
Owner, Admin, Developer, Viewer roles with per-project membership. Dedicated extractors (AuthUser, AdminUser, ProjectAccess) verify authorization on every API endpoint.
TOTP Two-Factor Auth
RFC 6238 compliant, 6-digit codes, 30-second step, SHA-1 with +/-1 skew tolerance. 8 backup codes per user, each Argon2id-hashed. Provisioning URI for QR code setup.
Défense en profondeur
Encrypted at rest
Master key derived via PBKDF2-HMAC-SHA256 with 100,000 iterations and a 16-byte salt. Every secret -- env vars, SSH private keys, backup dumps, API tokens -- is AES-256-GCM encrypted before touching disk.
Authenticated at every layer
JWT (HS256) from Bearer header or HTTP-only cookie, with API key fallback. Refresh tokens SHA-256 hashed in the database. Expired tokens caught with specific error codes. Multi-strategy auth on every request.
Rate-limited and throttled
Per-IP sliding window: 10 login attempts/15 min, 5 TOTP attempts/5 min, 50 invitations/min. Global read/write rate limits with automatic cleanup. Health and webhook paths exempt.
Audited and traceable
Every significant action logged: user ID, action, resource type/ID, IP address (X-Forwarded-For aware), timestamp. Paginated queries with filtering by user, resource type, and resource ID.
La pile de sécurité
Chaque couche renforce la suivante -- compromettez-en une et les autres tiennent toujours
Dépendances cryptographiques
Pas de cryptographie maison. Uniquement des crates Rust éprouvées au combat.
Vérifié dans le code source
Chaque constat mappé au crate où il est implémenté.
Sans sh0
- x Store tokens in localStorage (XSS-vulnerable)
- x Write custom encryption per service
- x Manage SSH keys in plaintext on disk
- x Hope nobody SQL-injects your queries
- x Share root credentials across team
- x No audit trail of who did what
Avec sh0
- HTTP-only cookies, SameSite=Strict, CSRF protection
- AES-256-GCM for everything, master key with PBKDF2
- SSH keys encrypted at rest, loaded in-memory only
- Parameterized queries + input validation everywhere
- RBAC with 4 roles + per-project permissions
- Full audit log with IP, user, action, resource tracing
Questions et réponses
Has sh0 been security audited? +
How are secrets stored? +
How does authentication work? +
What about two-factor authentication? +
Can one user access another user's containers? +
What about container security? +
Which cryptographic libraries do you use? +
Sécurité de niveau entreprise, intégrée
34 problèmes trouvés. 34 problèmes corrigés. AES-256-GCM, Argon2id, TOTP 2FA, RBAC, journaux d'audit, limitation de débit. Une sécurité que vous pouvez vérifier dans le code source.