Seguridad
Un resumen para los equipos de TI y de seguridad que revisan Snowkit para usarlo en el trabajo.
Cómo está construido Snowkit
La respuesta corta para una revisión de seguridad, con el detalle a un clic.
Arquitectura
- Snowkit es un sitio web estático. Cada herramienta se ejecuta como JavaScript y WebAssembly dentro del navegador del visitante.
- Los archivos y el texto introducidos en una herramienta se procesan en memoria en el dispositivo del visitante y nunca se transmiten a Snowkit.
- El sitio se sirve solo por HTTPS, con HSTS.
Acceso a la red
Cada página de herramienta lleva su propia Content Security Policy. Las páginas de herramientas solo pueden cargar los scripts y estilos propios de Snowkit, y casi todas tienen bloqueada cualquier conexión de red.
Unas pocas herramientas existen para consultar cosas en internet, y cada una lo indica en su página. El verificador de caducidad lee registros públicos RDAP y de transparencia de certificados. La consulta DNS pregunta a los resolvedores públicos de Cloudflare y Google. El generador de citas consulta un DOI o un ISBN con Crossref y Open Library. El verificador de cabeceras HTTP, el análisis previo al lanzamiento y la comprobación del sitio en vivo de Snowkit Launch obtienen la dirección pública que escribes a través del propio servidor de Snowkit. El probador de MCP se conecta a la dirección del servidor que introduces. Solo se envía el dominio, la dirección o el identificador que escribes, nunca tus archivos.
Abrir archivos desde Dropbox, Google Drive o OneDrive y guardar resultados en ellos está disponible en las páginas que lo ofrecen. El script selector propio de ese servicio solo se carga cuando alguien lo elige, y solo esas páginas permiten las direcciones de ese servicio en su Content Security Policy. Los archivos van directamente entre el navegador y el servicio, nunca por Snowkit, y el permiso de corta duración que concede el servicio se mantiene solo en la página abierta.
Notion o Canva solo aceptan archivos desde un servidor, así que enviar un archivo allí pasa por el servidor de Snowkit por el camino, mediante una conexión cifrada. Se transmite directamente, sin escribirse en disco, registrarse ni conservarse. El permiso que concede ese servicio se mantiene solo en la página abierta y viaja con esa única petición.
Lo que nunca usamos
- Sin etiquetas de analítica ni redes publicitarias. Los únicos scripts de terceros son los selectores de archivos descritos en Acceso a la red, que se cargan cuando alguien elige ese servicio.
- Sin cookies de seguimiento ni de publicidad. Los visitantes que no inician sesión no reciben ninguna cookie; tu elección de tema se guarda en el almacenamiento local de tu propio navegador.
- Sin contraseñas. Las cuentas son opcionales y usan passkeys o el inicio de sesión de GitHub o Google, así que Snowkit nunca ve ni guarda una contraseña.
Otras cabeceras
Otros sitios no pueden enmarcar las páginas, el rastreo de tipos MIME está desactivado, los referrers se recortan al salir del sitio, y las funciones de cámara, micrófono, ubicación y pago están desactivadas a menos que una herramienta las necesite.
Content-Security-Policy- Solo se cargan los scripts y estilos propios de Snowkit. Los plugins y el enmarcado están bloqueados.
Strict-Transport-Security- Solo HTTPS, recordado durante un año, subdominios incluidos.
X-Frame-Options- DENY. Otros sitios no pueden enmarcar una página de Snowkit.
X-Content-Type-Options- nosniff. Los archivos solo se leen siempre como el tipo con el que se sirven.
Referrer-Policy- strict-origin-when-cross-origin. Otros sitios solo ven snowkit.io, nunca la página en la que estabas.
Permissions-Policy- La cámara, el micrófono, la ubicación y el pago están desactivados a menos que una herramienta los necesite.
Cross-Origin-Opener-Policy- same-origin. Las ventanas abiertas desde otros sitios no pueden acceder a una página de Snowkit.
Cuentas opcionales
Iniciar sesión guarda un nombre y una dirección de correo cuando el método de inicio de sesión los proporciona, el ID de cuenta del proveedor de inicio de sesión y las herramientas que guardas como favoritas. Las sesiones usan un token aleatorio guardado en una cookie propia, segura y HttpOnly, con una segunda cookie que solo contiene tu inicial para el encabezado de la página y una tercera que solo contiene una versión de la imagen cuando añades una foto de perfil, y de nuestro lado solo se guarda un hash del token. Los archivos y el texto usados en las herramientas nunca se vinculan a una cuenta. Puedes eliminar tu cuenta y todo lo que contiene desde la página de la cuenta en cualquier momento.
Passkeys
Las passkeys usan WebAuthn con verificación de usuario preferida. El servidor emite un desafío de un solo uso que caduca a los cinco minutos, comprueba el origen, la parte confiante y el contador de firma, y guarda solo la clave pública de la credencial. Los enlaces de inicio de sesión por correo, cuando se ofrecen, funcionan una vez, caducan a los 15 minutos y se guardan solo como un hash.
Sincronización privada
Los visitantes con sesión iniciada pueden elegir sincronizar su Library, Your Snowkit, sus pasos guardados y sus herramientas favoritas entre sus dispositivos. La sincronización está cifrada de extremo a extremo: cada elemento se cifra en el navegador antes de subirse, y el servidor solo guarda texto cifrado.
- Cifrado
- AES-GCM con claves de 256 bits
- Nonce
- Un nonce nuevo de 96 bits en cada guardado
- Clave de la bóveda
- 256 bits aleatorios, creados en el navegador
- Envoltura de claves
- PRF de passkey con HKDF-SHA-256, o una clave de recuperación de 128 bits con PBKDF2-SHA-256 a 600 000 iteraciones
- Archivos de la Library
- Su propia clave para cada versión, selladas en fragmentos de 8 MiB
- El servidor guarda
- Texto cifrado, claves envueltas, el ID de la cuenta, marcas de tiempo y tamaños
- Se crea en el navegador una clave de bóveda aleatoria de 256 bits cuando se activa la sincronización. Los elementos se cifran con AES-GCM usando una clave de 256 bits y un nonce nuevo de 96 bits en cada guardado, con el nombre de la sección y la versión vinculados como datos autenticados adicionales.
- La clave de la bóveda nunca sale del dispositivo sin cifrar. Cada passkey que admite la extensión PRF de WebAuthn la envuelve con AES-GCM, usando una clave derivada de la salida de PRF con HKDF-SHA-256, y también una clave de recuperación de 128 bits aleatorios que se muestra a la persona una sola vez, usando PBKDF2-SHA-256 con 600 000 iteraciones.
- El servidor guarda las claves envueltas, los elementos cifrados, el ID de la cuenta, las marcas de tiempo y los tamaños. No tiene ninguna clave que pueda descifrarlos, así que Snowkit no puede recuperar nada: si se pierden todas las passkeys y la clave de recuperación, nadie puede abrir los datos sincronizados.
- Los archivos de la Library solo se sincronizan cuando la sincronización está activada. Cada versión de archivo se sella con su propia clave aleatoria de 256 bits en fragmentos de 8 MiB, cada fragmento vinculado a su ID de objeto, posición y recuento, y se guarda bajo un ID de objeto aleatorio. Las claves por archivo, los nombres, los tipos y los proyectos viven solo dentro del índice cifrado de la Library, de modo que el servidor ve ID opacos, tamaños y marcas de tiempo.
- Los archivos que solo se abren en una herramienta nunca se sincronizan. Cada cuenta tiene un límite de almacenamiento; cuando se alcanza, las subidas se pausan y no se elimina nada. Desactivar la sincronización elimina la copia cifrada del servidor.
Un nombre visible y una imagen de perfil opcional son datos de la cuenta, no datos de sincronización. La imagen se redimensiona en el navegador y se guarda sin cifrar con la cuenta, se sirve solo a esa cuenta con sesión iniciada con caché privada y se elimina con la cuenta.
Lo que sí vemos
Como cualquier sitio web, nuestro alojamiento procesa datos estándar de las peticiones, como las direcciones IP, para entregar las páginas. Contamos las visitas por ruta, sin cookies y sin guardar direcciones IP. Gap Radar cuenta las búsquedas sin resultado, las preguntas de Kitsune sin respuesta, las páginas que faltan y los códigos de error cortos solo como totales diarios, sin cookie, identificador ni dirección IP; el texto de la búsqueda se limpia en el dispositivo, y el texto poco frecuente que no ha surgido 5 veces en 28 días nunca se muestra y se elimina. Los mensajes enviados con el formulario de comentarios llegan al equipo de Snowkit por correo. Consulta la política de privacidad para más detalles.
Informar de una vulnerabilidad
Escribe a [email protected] con los detalles y los pasos para reproducirlo. Acusaremos recibo de tu informe y te mantendremos al tanto mientras lo arreglamos. Nuestro security.txt enumera el mismo contacto.
Contacto de seguridad: [email protected] · security.txt