Naar de inhoud
snowkit

Beveiliging

Een samenvatting voor IT- en beveiligingsteams die Snowkit voor gebruik op het werk beoordelen.

Beveiligingsoverzicht

Voor IT- en beveiligingsteams

Hoe Snowkit is gebouwd

Het korte antwoord voor een beveiligingsreview, met de details één klik weg.

Architectuur

  • Snowkit is een statische website. Elke tool draait als JavaScript en WebAssembly in de browser van de bezoeker.
  • Bestanden en tekst die in een tool worden ingevoerd worden in het geheugen van het apparaat van de bezoeker verwerkt en nooit naar Snowkit verzonden.
  • De site wordt alleen via HTTPS geleverd, met HSTS.

Netwerktoegang

Elke toolpagina heeft een eigen Content Security Policy. Toolpagina's mogen alleen de eigen scripts en stijlen van Snowkit laden en bijna alle mogen helemaal geen netwerkverbinding maken.

Een paar tools bestaan om dingen op internet op te zoeken en elk zegt dat op zijn pagina. De vervalcontrole leest openbare RDAP- en certificate-transparency-records. DNS-lookup vraagt de openbare resolvers van Cloudflare en Google. De bronvermeldingsmaker zoekt een DOI of ISBN op met Crossref en Open Library. De HTTP-headercontrole, de scan voor de lancering en de livesitecontrole in Snowkit Launch halen het openbare adres dat je typt op via de eigen server van Snowkit. De MCP-tester verbindt met het serveradres dat je invoert. Alleen het domein, adres of de identificatie die je typt wordt verstuurd, nooit je bestanden.

Bestanden openen vanuit, en resultaten opslaan in, Dropbox, Google Drive of OneDrive is beschikbaar op de pagina's die het aanbieden. Het eigen kiezerscript van die dienst wordt alleen geladen als iemand hem kiest en alleen die pagina's staan de adressen van die dienst toe in hun Content Security Policy. Bestanden gaan rechtstreeks tussen de browser en de dienst, nooit via Snowkit, en de kortlevende toestemming die de dienst geeft wordt alleen in de geopende pagina bewaard.

Notion of Canva accepteren bestanden alleen vanaf een server, dus een bestand daarheen sturen loopt onderweg via de server van Snowkit, over een versleutelde verbinding. Het wordt direct doorgegeven en nooit naar schijf geschreven, gelogd of bewaard. De toestemming die die dienst geeft wordt alleen in de geopende pagina bewaard en reist mee met dat ene verzoek.

Wat we nooit gebruiken

  • Geen analysetags of advertentienetwerken. De enige scripts van derden zijn de bestandskiezers die onder Netwerktoegang worden beschreven en die worden geladen als iemand die dienst kiest.
  • Geen tracking- of advertentiecookies. Bezoekers die niet inloggen krijgen helemaal geen cookies; je themakeuze wordt in de lokale opslag van je eigen browser bewaard.
  • Geen wachtwoorden. Accounts zijn optioneel en gebruiken passkeys of inloggen met GitHub of Google, dus Snowkit ziet of bewaart nooit een wachtwoord.

Overige headers

Pagina's kunnen niet door andere sites worden ingekaderd, MIME-sniffing is uitgezet, referrers worden ingekort bij het verlaten van de site en camera-, microfoon-, locatie- en betaalfuncties zijn uitgezet tenzij een tool ze nodig heeft.

Content-Security-Policy
Alleen de eigen scripts en stijlen van Snowkit worden geladen. Plug-ins en inkaderen zijn geblokkeerd.
Strict-Transport-Security
Alleen HTTPS, een jaar onthouden, subdomeinen inbegrepen.
X-Frame-Options
DENY. Andere sites kunnen een Snowkit-pagina niet inkaderen.
X-Content-Type-Options
nosniff. Bestanden worden alleen gelezen als het type waarmee ze worden geleverd.
Referrer-Policy
strict-origin-when-cross-origin. Andere sites zien alleen snowkit.io, nooit de pagina waar je was.
Permissions-Policy
Camera, microfoon, locatie en betalen staan uit tenzij een tool ze nodig heeft.
Cross-Origin-Opener-Policy
same-origin. Vensters die vanaf andere sites zijn geopend kunnen niet in een Snowkit-pagina reiken.

Optionele accounts

Inloggen slaat een naam en e-mailadres op als de inlogmethode ze levert, de account-ID van de inlogaanbieder en de tools die je als favoriet opslaat. Sessies gebruiken een willekeurig token in een veilige, HttpOnly first-party-cookie, met een tweede cookie die alleen je initiaal voor de paginakop bevat en een derde die alleen een fotoversie bevat als je een profielfoto toevoegt, en alleen een hash van het token wordt bij ons opgeslagen. Bestanden en tekst die in tools worden gebruikt worden nooit aan een account gekoppeld. Je kunt je account en alles erin op elk moment via de accountpagina verwijderen.

Passkeys

Passkeys gebruiken WebAuthn met gebruikersverificatie bij voorkeur. De server geeft een challenge voor eenmalig gebruik uit die na vijf minuten verloopt, controleert de origin, relying party en handtekeningteller en bewaart alleen de publieke sleutel van de credential. E-mailinloglinks, waar aangeboden, werken één keer, verlopen na 15 minuten en worden alleen als hash bewaard.

Privésynchronisatie

Ingelogde bezoekers kunnen kiezen hun Library, Jouw Snowkit, opgeslagen stappen en favoriete tools tussen hun apparaten te synchroniseren. Sync is eind-tot-eind versleuteld: elk item wordt in de browser versleuteld voordat het wordt geüpload en de server bewaart alleen versleutelde tekst.

Versleuteling
AES-GCM met 256-bits sleutels
Nonce
Een verse 96-bits nonce bij elke opslag
Vaultsleutel
256 willekeurige bits, in de browser gemaakt
Sleutelinpakking
Passkey-PRF met HKDF-SHA-256, of een herstelsleutel van 128 bits met PBKDF2-SHA-256 met 600.000 iteraties
Library-bestanden
Een eigen sleutel voor elke versie, verzegeld in brokken van 8 MiB
De server bewaart
Versleutelde tekst, ingepakte sleutels, de account-ID, tijdstempels en formaten
  • Een willekeurige 256-bits vaultsleutel wordt in de browser gemaakt als sync wordt aangezet. Items worden versleuteld met AES-GCM met een 256-bits sleutel en een verse 96-bits nonce bij elke opslag, met de sectienaam en versie gebonden als aanvullende geauthenticeerde gegevens.
  • De vaultsleutel verlaat het apparaat nooit onversleuteld. Hij wordt met AES-GCM ingepakt door elke passkey die de WebAuthn PRF-extensie ondersteunt, met een sleutel afgeleid van de PRF-uitvoer met HKDF-SHA-256, en door een herstelsleutel van 128 willekeurige bits die de persoon één keer te zien krijgt, met PBKDF2-SHA-256 met 600.000 iteraties.
  • De server bewaart de ingepakte sleutels, de versleutelde items, de account-ID, tijdstempels en formaten. Hij heeft geen sleutel waarmee ze ontsleuteld kunnen worden, dus Snowkit kan niets herstellen: als elke passkey en de herstelsleutel kwijt zijn, kan niemand de gesynchroniseerde gegevens openen.
  • Library-bestanden worden alleen gesynchroniseerd als sync aan staat. Elke bestandsversie wordt verzegeld met een eigen willekeurige 256-bits sleutel in brokken van 8 MiB, elk brok gebonden aan zijn object-ID, positie en aantal, en opgeslagen onder een willekeurige object-ID. De sleutels per bestand, namen, soorten en projecten leven alleen in de versleutelde Library-index, zodat de server ondoorzichtige ID's, formaten en tijdstempels ziet.
  • Bestanden die alleen in een tool worden geopend worden nooit gesynchroniseerd. Elk account heeft een opslaglimiet; als die is bereikt, pauzeren uploads en wordt niets verwijderd. Sync uitzetten verwijdert de versleutelde kopie van de server.

Een weergavenaam en een optionele profielfoto zijn accountgegevens, geen syncgegevens. De foto wordt in de browser verkleind en onversleuteld bij het account opgeslagen, alleen aan dat ingelogde account geleverd met privécaching en samen met het account verwijderd.

Wat we wel zien

Zoals elke website verwerkt onze host standaard verzoekgegevens zoals IP-adressen om pagina's te leveren. We tellen paginaweergaven per pad, zonder cookies en zonder IP-adressen op te slaan. Gap Radar telt zoekopdrachten zonder resultaat, onbeantwoorde Kitsune-vragen, ontbrekende pagina's en korte foutcodes alleen als dagtotalen, zonder cookie, identificatie of IP-adres; zoektekst wordt op het apparaat opgeschoond en zeldzame tekst die niet 5 keer binnen 28 dagen is voorgekomen wordt nooit getoond en verwijderd. Berichten die via het feedbackformulier worden verstuurd bereiken het Snowkit-team per e-mail. Zie het privacybeleid voor details.

Een kwetsbaarheid melden

Mail [email protected] met de details en stappen om het te reproduceren. We bevestigen je melding en houden je op de hoogte terwijl we het herstellen. Onze security.txt vermeldt hetzelfde contact.