Seguridad
Los fondos siguen siendo tuyos. Los controles de riesgo corren en nuestros servidores.
GRIDVULCAN es un bot de trading no custodial. Nunca tenemos tus fondos. Tus claves API se cifran con AES-256-GCM y se vinculan a tu user ID. Tu kill-switch y stop-loss corren en nuestro backend, así que una pestaña cerrada o un misclick no apaga tu red de seguridad.
No custodial por diseño
Tú aportas una clave API de tu exchange con permiso solo de trading. Nunca pedimos permiso de retirada. El bot firma órdenes con tu clave contra el libro del exchange — los fondos y la autoridad de firma para retiradas se quedan en el exchange.
Cifrado de claves (AES-256-GCM)
- La clave maestra vive en la variable de entorno
GRIDVULCAN_MASTER_KEY. Nunca se escribe en base de datos ni en logs. - Cada credencial recibe un nonce nuevo de 12 bytes; el AAD vincula el ciphertext a tu user ID. Una fila filtrada de la base de datos no puede reasignarse a otra cuenta.
- Las claves no se muestran en claro tras la creación. El dashboard solo enseña los últimos 4 caracteres.
- Al lanzar el subproceso, las claves van como variables de entorno — invisibles en listados de
ps/Get-Process.
Controles de seguridad aplicados en servidor
- Kill-switch. Una llamada de pánico (
POST /bots/{id}/panic) cancela órdenes abiertas y cierra posiciones en el exchange. Sobrevive a cerrar el navegador. - Stop-loss. El límite de pérdida diaria y el stop por posición se aplican en el engine; no se pueden desactivar desde la web.
- Allowlist de config. Solo campos concretos son editables. Los rangos numéricos se validan en servidor en el PUT, así que un fichero de config manipulado no puede apagar límites.
- Confirmación LIVE. Arrancar un bot en modo real requiere una aceptación de riesgo auditada (queda en el log de auditoría, no solo en la UI).
Aislamiento entre inquilinos
Cada bot corre como su propio subproceso del sistema operativo, con su propio estado, logs y ficheros de config. Un fallo en el bot de un usuario no puede contaminar el de otro. El puente engine→backend está protegido por un token HMAC-SHA256 por bot derivado de un secreto raíz — un engine comprometido no puede publicar fills de otro inquilino.
Autenticación
- Supabase Auth con JWTs ES256 / RS256 validados contra el JWKS del proyecto, con comprobaciones de audience e issuer.
- Confirmación de email obligatoria antes de cualquier acción privilegiada.
- Alta de cuenta filtrada por whitelist durante la beta privada.
- Recuperación de contraseña vía magic link firmado; el enlace caduca en una hora.
Reportar una vulnerabilidad
Agradecemos la divulgación responsable. Escríbenos a security@gridvulcan.com con pasos para reproducir. Confirmamos recepción en 72h y aspiramos a parchear severidades altas en 7 días. Por favor no explotes vulnerabilidades más allá de lo necesario para demostrar el problema.