Seguridad en Termalin
Termalin es un cliente SSH: guarda las credenciales más sensibles que tienes. Esta página explica — con claridad — qué guardan nuestros servidores, qué no pueden leer nunca y por qué no hace falta que confíes mucho en ellos.
Cifrado de extremo a extremo, en concreto
Todo lo que importa se cifra en tu dispositivo antes de enviarse a ningún sitio, con una clave derivada de tu contraseña maestra (PBKDF2-HMAC-SHA256, 600.000 iteraciones → AES-256-GCM). La contraseña maestra nunca sale de tu dispositivo. No podemos leer tus datos, y no podemos restablecerlos por ti — así está diseñado, no es un fallo. El respaldo es tuyo: define un código de recuperación opcional y podrás volver a entrar si alguna vez olvidas la contraseña; sáltatelo, y una contraseña olvidada significa que los datos se han ido. En cualquier caso, el poder de recuperar se queda contigo, nunca con nosotros.
Qué ven nuestros servidores
| Datos | ¿El servidor puede leerlo? |
|---|---|
| Tus hosts, claves SSH, contraseñas y snippets (sincronización) | No — solo un blob cifrado |
| Grabaciones de sesiones de terminal (contenido) | No — solo un blob cifrado |
| Tu contraseña maestra | Nunca se envía |
| Correo + contraseña de la cuenta | El correo sí; la contraseña se guarda como un hash Argon2 |
| Título de la grabación y etiqueta del host | No — cifrados con tu contraseña maestra, como la grabación |
| Metadatos de la grabación (duración, tamaño, si actuó un agente de IA) | Sí — usados para listas y cuotas |
| Plan de suscripción, nombres de dispositivos, marcas de tiempo | Sí |
| Sesiones del terminal web (el panel web) | Pasan por nuestro servidor mientras están en vivo; no se guardan. Se registran el host, el puerto y el nombre de usuario |
| Comandos que las apps de IA ejecutan a través del endpoint MCP alojado | Sí — el texto del comando está en tu registro de actividad; su salida se guarda solo si lo activas, cifrada con una clave que solo tú tienes |
| Métricas de servidor y alertas de los servidores con Connector | Sí — necesarios para dibujar gráficas y lanzar alertas (mira la política de privacidad (en inglés)) |
| Sal de derivación de clave | Sí — una sal no es un secreto; permite que el panel web derive tu clave en tu navegador |
Las actualizaciones no se pueden falsificar
Las actualizaciones automáticas se firman con una clave Ed25519 sin conexión; la clave pública correspondiente viaja dentro de la app. Antes de instalar nada, la app verifica la firma del manifiesto de la versión y el SHA-256 del instalador contra ella. Nuestro propio servidor no es una parte de confianza aquí: incluso un servidor de actualizaciones totalmente comprometido (o una redirección por DNS/hosts) puede retener actualizaciones — no puede inyectar una.
La app autentica el servidor, no solo TLS
Antes de enviar las credenciales de tu cuenta a ningún sitio, la app reta al servidor con
un nonce aleatorio; el servidor debe firmarlo con su clave de identidad, verificada contra una
clave pública incrustada en la app. Un backend falso — alcanzado mediante una redirección por el archivo
hosts o por DNS, o una máquina configurada para confiar en un certificado TLS extra — no puede
producir esa firma, así que nunca ve tu contraseña.
Sin secretos en el binario
La app de escritorio incrusta solo claves públicas. Inspeccionar los archivos de la app no da nada aprovechable. Todo lo de pago se aplica en el servidor.
El panel web, con honestidad
El panel web descifra las grabaciones en tu navegador con tu contraseña maestra — la contraseña nunca sale de la página. La salvedad honesta que comparte todo producto web con cifrado E2E: el servidor entrega el código de esa página, así que un servidor comprometido podría servir una página modificada. La app de escritorio, con sus actualizaciones firmadas, sigue siendo la vía de mayor confianza; el panel web es por comodidad.
En tu máquina
- Las claves de host SSH se fijan en el primer uso (TOFU) en
~/.termalin/known_hosts. - Tu cuenta de termal.in admite autenticación de dos factores (TOTP con códigos de respaldo) y passkeys — la app de escritorio puede iniciar sesión a través del navegador, así que la contraseña nunca toca la app.
- Las grabaciones guardan la salida de la terminal y marcadores de eventos — nunca las pulsaciones en bruto.
Una contraseña escrita en un prompt oculto (
sudoy compañía) nunca se muestra, así que nunca acaba en una grabación; todo lo que la terminal imprime es parte de la cinta. - «Recordar contraseña maestra» (opcional, desactivado por defecto) está protegido por el almacén de secretos de tu sistema operativo — Windows DPAPI, el llavero de macOS o el Secret Service de Linux — ligado a tu usuario del sistema.
Infraestructura
El backend corre en Docker tras Cloudflare, con TLS 1.2+ (certificados de Let's Encrypt). La base de datos solo es accesible desde el localhost del host — nunca expuesta a internet — y las copias de seguridad están cifradas. Recopilamos lo menos posible: sin SDK de analítica, sin rastreadores de anuncios, y no vendemos datos.
Cumplimiento y hoja de ruta
Preferimos decirte exactamente dónde estamos a dar a entender más de lo que hemos hecho:
| Área | Estado |
|---|---|
| Bóvedas AES-256-GCM, PBKDF2-HMAC-SHA256, actualizaciones firmadas con Ed25519 | Disponible |
| Minimización de datos + borrado completo de cuenta/datos a petición (postura RGPD) | Disponible |
| Test de penetración independiente por terceros | Previsto antes de la GA |
| SOC 2 | En la hoja de ruta — pregúntanos por dónde va |
Informar de una vulnerabilidad
Escribe a security@termal.in (mira nuestro security.txt) con lo que encontraste, cómo reproducirlo y qué impacto crees que tiene. Respondemos en un plazo de 3 días laborables y te decimos qué decidimos — incluido cuándo decidimos que no es un problema, y por qué.
Prueba solo contra tu propia cuenta, detente al demostrar el problema (sin exfiltración de datos, sin persistencia, sin denegación de servicio, sin datos de terceros ni de otros usuarios) y danos un margen razonable antes de publicar. Trabaja dentro de esos límites y no te perseguiremos por ello.
No pagamos recompensas por fallos (bug bounties). Termalin es un proyecto pequeño y aún sin ingresos, y no hay presupuesto para recompensas; preferimos decirlo de entrada a dejar que alguien se pase un fin de semana trabajando sin garantías. Lo que sí ofrecemos: crédito en los agradecimientos de nuestro security.txt bajo el nombre y el enlace que elijas, una referencia por escrito que describa tu informe, y una licencia Pro durante unos meses. Si el hallazgo es grave, también te diremos cuándo se publica la corrección.
Agradecimientos
Gracias a quienes investigaron y reportaron problemas de forma responsable y nos ayudaron a hacer Termalin más seguro:
- MD Rabbi Hossain — refuerzo del registro de clientes OAuth en el flujo de autorización MCP (sept. 2026).