La sécurité n'est pas une fonctionnalité.
C'est le fondement.
Chaque affirmation de cette page correspond à du vrai code dans la base de code sh0. Un audit interne du 17 mars 2026 a relevé 34 problèmes ; les 6 critiques étaient corrigés à la date du rapport.
Résultats de l'audit
Audit de sécurité interne couvrant l'authentification, la cryptographie, la surface d'API et l'interface.
Audit interne du 17 mars 2026 : 34 problèmes relevés (6 critiques, 10 hauts, 12 moyens, 6 faibles). À la date du rapport, les 6 critiques et 8 des 10 hauts étaient corrigés ; les autres étaient prévus pour une phase de durcissement. À partir du 5 octobre 2026, les failles corrigées sont publiées ici.
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, SSH keys, and API tokens -- and backup files when backup encryption is enabled -- 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
sh0 a-t-il été audité ? +
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? +
Qui répond de la sécurité des gabarits en un clic ? +
Which cryptographic libraries do you use? +
Signaler une faille
Écrivez-nous à l'adresse ci-dessous. Indiquez la version de sh0, les étapes pour reproduire et l'impact observé. N'ouvrez pas de ticket public.
Sans réponse, utilisez aussi le formulaire de contact : sh0.dev/contact
Nos engagements
- Accusé de réception sous 72 heures.
- Correctif visé sous 7 jours pour une faille critique, 30 jours pour une haute, 90 jours sinon.
- Pour une faille critique ou haute, une pré-annonce 48 à 72 heures avant le correctif : date, gravité et composant seulement. Les détails sont publiés avec le correctif.
- Les correctifs de sécurité sortiront en version de patch, sans fonctionnalité mêlée, pour que la mise à jour automatique en mode patch puisse les installer seuls.
Recherche de bonne foi
Nous n'engagerons aucune poursuite contre une recherche menée de bonne foi sur votre propre instance sh0 : sans accès aux données d'autrui, sans perturbation d'un service qui ne vous appartient pas, et en nous laissant un délai raisonnable pour corriger avant toute publication.
Récompenses
Pas de prime en argent au lancement : les chercheurs sont remerciés publiquement sur cette page, avec leur accord. Un programme de primes pourrait suivre le test d'intrusion externe.
Remerciements
Aucun signalement reçu pour l'instant. Les premiers noms apparaîtront ici.
Avis de sécurité
Les avis publiés, et un flux lisible par machine que le tableau de bord sh0 consultera à chaque vérification de mise à jour.
Sécurité de niveau entreprise, intégrée
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, et des failles signalées selon une politique de divulgation publique.