La seguridad no es una función.
Es la base.
Cada afirmación de esta página corresponde a código real de sh0. Una auditoría interna del 17 de marzo de 2026 detectó 34 problemas; los 6 críticos estaban corregidos en la fecha del informe.
Resultados de auditoría
Auditoría de seguridad interna de autenticación, criptografía, superficie de API e interfaz.
Auditoría interna del 17 de marzo de 2026: 34 problemas detectados (6 críticos, 10 altos, 12 medios, 6 bajos). En la fecha del informe, los 6 críticos y 8 de los 10 altos estaban corregidos; los demás estaban previstos para una fase de refuerzo. A partir del 5 de octubre de 2026, las fallas corregidas se publican aquí.
Qué protegemos
Seis capas de seguridad fundamentales, cada una verificada en el código fuente de 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.
Defensa en profundidad
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.
El stack de seguridad
Cada capa refuerza la siguiente -- compromete una y el resto se mantiene
Dependencias criptográficas
Sin criptografía personalizada. Solo crates de Rust probados en producción.
Verificado en el código fuente
Cada hallazgo mapeado al crate donde se implementa.
Sin 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
Con 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
Preguntas y respuestas
¿Se ha auditado la seguridad de sh0? +
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én responde de la seguridad de las plantillas de un clic? +
Which cryptographic libraries do you use? +
Informar de una vulnerabilidad
Escríbanos a la dirección indicada abajo. Incluya la versión de sh0, los pasos para reproducirlo y el impacto observado. No abra una incidencia pública.
Si no recibe respuesta, use también el formulario de contacto: sh0.dev/contact
Nuestros compromisos
- Acuse de recibo en un plazo de 72 horas.
- Corrección prevista en 7 días para una falla crítica, 30 días para una alta y 90 días en los demás casos.
- Para fallas críticas y altas, un preaviso de 48 a 72 horas antes de la corrección: solo fecha, gravedad y componente. Los detalles se publican con la corrección.
- Las correcciones de seguridad saldrán como versiones de parche, sin funciones nuevas mezcladas, para que la actualización automática en modo parche pueda instalarlas solas.
Investigación de buena fe
No emprenderemos acciones legales contra una investigación realizada de buena fe en su propia instancia de sh0: sin acceder a datos ajenos, sin perturbar un servicio que no le pertenece y dejándonos un plazo razonable para corregir antes de cualquier publicación.
Recompensas
No hay recompensa en dinero en el lanzamiento: agradecemos públicamente a los investigadores en esta página, con su consentimiento. Un programa de recompensas podría llegar después de la prueba de intrusión externa.
Agradecimientos
Todavía no hemos recibido ningún informe. Los primeros nombres aparecerán aquí.
Avisos de seguridad
Los avisos publicados y un feed legible por máquina que el panel de sh0 consultará en cada comprobación de actualizaciones.
Seguridad de nivel empresarial, integrada
AES-256-GCM, Argon2id, TOTP 2FA, RBAC, registros de auditoría, limitación de tasa. Una seguridad que puede verificar en el código fuente, y fallas comunicadas según una política de divulgación pública.