ketl cloud
HjemKunnskapDesktop sikkerhet

Desktop sikkerhetsmodell for ketl service

ketl service (desktop-appen) er bygget på Tauri. Tauri har historisk hatt en sårbarhet hvor remote-origin iframes kunne kalle host-IPC uten eksplisitt allowlisting. Denne siden dokumenterer hvordan vi stenger den og andre angrepsflater — capabilities per vindu, CSP, shell-restriksjoner og signert updater.

8

blokkerende krav

Min. Tauri v1

1.6.7

Min. Tauri v2

2.0.0-beta.19

Kjente CVE-er vi har patchet

Remote iframe IPC-eksponering
Patched i Tauri 1.6.7 (v1) og 2.0.0-beta.19 (v2).
OpenCVE

Remote-origin iframes kunne få tilgang til Tauri IPC uten eksplisitt allowlisting. Tillot i teorien eksterne sider å kalle host-kommandoer.

Sikkerhetssjekkliste

Hver release må passere alle blokkerende punkt før den kan distribueres. CI bruker SJEKKLISTE fra src/lib/desktop-sikkerhet.ts som kilde.

Iframe / remote content

Ingen remote-origin iframes i Tauri-vindu

no-remote-iframe

Blokkerende

Remote iframes (http(s)://...) skal ikke lastes direkte i Tauri-vinduer. Disse eksponerte IPC uten eksplisitt allowlisting før patchen og øker angrepsflaten. Bruk OAuth/OIDC med external browser (shell.open) istedenfor embedded web-login.

📂 src/renderer/**/*.{ts,tsx,html}

Anti-pattern (CI rejecter)

<iframe src="https?://
OAuth/OIDC skjer i systemnettleser, ikke embedded

oauth-external-browser

Anbefalt

All innlogging (Vipps, BankID, Buypass, Google, Firebase) må gå via systemnettleseren + localhost-callback eller custom-scheme, aldri i et innebygd Tauri-vindu.

📂 src/renderer/auth/**/*.ts

IPC-kommandoer

dangerousRemoteDomainIpcAccess skal være tom/fraværende

dangerous-remote-ipc-none

Blokkerende

Feltet tillater IPC fra eksterne domener og skal aldri settes i produksjon. I capability-filer skal listen enten være fraværende eller eksplisitt tom.

📂 src-tauri/capabilities/*.json

Anti-pattern (CI rejecter)

dangerousRemoteDomainIpcAccess\s*:\s*\[\s*\{
shell-plugin tillater kun shell.open (ingen shell.execute)

shell-no-exec

Blokkerende

shell.execute gir vilkårlig kjøring av binærfiler. Vi tillater bare shell.open for å åpne eksterne lenker i brukerens standard nettleser.

📂 src-tauri/capabilities/shell.json

Anti-pattern (CI rejecter)

"shell:allow-execute"
Ingen #[tauri::command] eksponerer unsafe FFI direkte

no-unsafe-rust-ffi

Anbefalt

Kommandoer må validere alle inputs. Ingen pass-through av brukerinput til unsafe-blokk eller raw pointer dereferansering.

📂 src-tauri/src/**/*.rs

Dev-build logger alle IPC-kall for audit

log-ipc-in-dev

Informativ

I debug-mode logges kommandonavn, vindu-label, timestamp og inputs (uten sensitive data). Hjelper oss finne utilsiktet IPC-utvidelse.

📂 src-tauri/src/main.rs

Capabilities

Alle plugins og kommandoer listes eksplisitt per window

capabilities-explicit

Blokkerende

Capabilities skal være windows-scoped og aldri bruke wildcards som '*' eller 'main-*' for sensitive plugins (fs, shell, http). Hvert vindu har sin egen capability-fil med eksplisitt permissions-liste.

📂 src-tauri/capabilities/*.json

Anti-pattern (CI rejecter)

"permissions"\s*:\s*\[\s*"\*"

Content Security Policy

Streng Content Security Policy

csp-strict

Blokkerende

tauri.conf.json skal definere CSP med default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https://ketl-innsikt.web.app; connect-src 'self' https://api.ketl.no https://*.googleapis.com. Ingen 'unsafe-eval'.

📂 src-tauri/tauri.conf.json

Anti-pattern (CI rejecter)

'unsafe-eval'

Filsystem

Filsystem-tilgang begrenses til scopede directories

fs-scoped-only

Blokkerende

fs-plugin skal kun tillate forhåndsdefinerte scopes: $APPDATA/ketl, $DOWNLOAD for export. Ingen read-all eller write-all wildcards. Bruk pathSegments i capability i stedet for path-strings med ../.

📂 src-tauri/capabilities/filsystem.json

Updater

Updater krever signerte releases med ed25519-pubkey

updater-signed

Blokkerende

Tauri updater må ha pubkey-felt satt og signed releases. Ingen plaintext-HTTP endpoints for update-manifest. Bruk en allowlisted endpoint over HTTPS.

📂 src-tauri/tauri.conf.json (plugins.updater)

Versjon / oppgradering

Tauri-versjon skal være >= 1.6.7 (v1) eller >= 2.0.0-beta.19 (v2)

min-tauri-version

Blokkerende

CVE om remote iframe IPC-tilgang er patched i disse versjonene. CI blokkerer pull requests der Cargo.lock viser lavere versjon.

📂 src-tauri/Cargo.lock

Cross-links
Sikkerhetsmodellen kobler sammen flere produktområder.

Regulator-ready bundles — DORA-, AMLA-, NSM- og CSRD-pakker bygger på denne modellen.

Altinn II-cutoff — desktop-appen håndterer Maskinporten-tokens lokalt og må følge samme IPC-policy.

Service-issue som implementerer capabilities-konfigurasjonen ligger i ketl-service-repoet (TASK linket fra issue #83).

Kilder

  • OpenCVE — Tauri CVE-oversikt
  • Tauri v2 — Capabilities
  • Tauri v2 — Content Security Policy
ketl cloud
DataApperMCPPriser
AI-transparensPersonvernSikkerhet

© 2026 ketl cloud

build c372edd · 2026-05-11 14:18:12 UTC