ketl cloud
HjemMCPMCP sikkerhet

MCP hardening-playbook

Model Context Protocol (MCP) har flere usikre defaults: STDIO- transport spawner arbitrære prosesser, konfigfiler blir ofte behandlet som betrodd input, og marketplace-distribusjon mangler signering. Denne siden dokumenterer hvordan ketl cloud håndterer disse angrepsflatene — både i vår egen MCP-hub og som råd til brukere som installerer tredjeparts-servere.

10

blokkerende krav

Totalt antall punkt

17

Kategorier

7

Truselbilde — kort oppsummert

En MCP-server er i praksis en lokal prosess som kjøres med brukerens rettigheter. Hvis konfigfilene redigeres av en agent, et plugin eller en delt prosjektfil, kan angriperen få full kodekjøring på maskinen. Marketplace-distribusjon uten signering forsterker supply-chain-risiko. Antagelsen som må unngås: “en MCP-server er trygg bare fordi den står i en katalog”.

Sikkerhetssjekkliste

Hver release + distribusjonsflow passeres opp mot denne lista. Kilde: MCP_SJEKKLISTE i src/lib/mcp-sikkerhet.ts — samme modul som brukes i UI-advarsler og automatiserte tester.

Installasjonskilde

Hvor pakken kommer fra og om den er signert/verifisert før installasjon.

Installer MCP-servere kun fra verifiserte kilder

verified-source-only

Blokkerende

En MCP-server er en fullverdig prosess som kjører lokalt med brukerens rettigheter. Uverifiserte servere fra tilfeldige GitHub-repos eller marketplaces er i praksis 'run arbitrary code' — samme tillitsnivå som å installere en npm-pakke eller et browser-extension. Ketl cloud viser 'verified'-badge kun for servere vi signerer selv eller som er merket av Anthropic/Cloudflare.

Handling

Bruk 'verified'-badge i UI. Vis eksplisitt varseldialog før installasjon av ukjente servere.

📂 src/app/mcp/**

Install-instruksjoner pinner pakkeversjon + hash

hash-pin-install-instructions

Blokkerende

Alle 'Copy command'-blokker i /mcp-hub må referere eksakt versjon (ikke `@latest`) og inkludere SHA256/Sigstore-verifisering når tilgjengelig. Supply-chain angrep via yanked versjoner eller typo-squatting reduseres drastisk.

Handling

Oppdater `MCP_REGISTRY` til å inkludere `version` + `integrity`-felt; generer copy-command fra registeret istedenfor å hardkode.

Advar ved bruk av uoffisielle registries

warn-on-unofficial-registry

Anbefalt

Dersom brukeren skal konfigurere en server fra en tredjeparts registry (ikke PyPI/npm/Anthropic/ketl), skal UI vise en inline-advarsel. Gjelder særlig alpha/beta-katalogløsninger.

Handling

Render `<McpUnverifiedWarning />` i installer-card for ukjente kilder.

STDIO-konfigurasjon

Hvordan konfigfiler tolkes og prosesser spawnes — hovedangrepsflate per THN-rapport.

Behandle MCP-konfigfiler som untrusted input

treat-config-as-untrusted

Blokkerende

Konfigfiler (`claude_desktop_config.json`, `.cursor/mcp.json`, `.ketl/mcp.json`) kan redigeres av agenter, plugins eller delte prosjektfiler. Aldri kjør kommandoer fra konfig uten eksplisitt bruker-samtykke. Valider path-er, environment-variabler og argumenter mot en allowlist før prosess-start.

Handling

Implementer schema-validering + diff-preview før første start av hver ny server. Lagre trust-granting per `command+args`-par.

📂 service/ketl/mcp/client.py

Ingen shell-interpolation i spawn-kall

no-shell-interpolation

Blokkerende

`command` og `args` skal sendes som argv-array til `spawn` / `execFile`, aldri via `exec(shell_string)`. Injection av `;`, `&&`, backticks eller `$(...)` i args må blokkeres.

Handling

Bruk `spawn(cmd, args, { shell: false })`; reject arg-strenger med shell-metategn.

Pin interpreter-path (absolutt eller via PATH-allowlist)

pin-interpreter-path

Anbefalt

`python`/`node`/`uvx` skal slås opp mot en kjent allowlist av absolutte paths. Ellers kan en angriper som plasserer en binær i PATH høyere oppe hijacke kjøretid.

Handling

Resolve interpreter via `which` + allowlist; avvis hvis mismatch.

Supply-chain

Dependency-kjede, SBOM og release-signering fra publish til klient.

SBOM + dependency-scan per server før publisering

sbom-per-server

Blokkerende

For hver MCP-server ketl publiserer selv kjør `cyclonedx-py` / `cyclonedx-npm` og lagre SBOM i release-artefaktet. Grype/Trivy-scan skal være del av CI. Known-vulnerable transitive deps blokkerer publish.

Handling

Legg til SBOM-steget i `.github/workflows/mcp-publish.yml`.

Signer releases med Sigstore/cosign

sign-releases

Anbefalt

MCP-server-pakker ketl distribuerer skal være signert med keyless Sigstore. Klienter verifiserer signatur mot OIDC-identitet før første start. Mitigates post-publish tampering.

Handling

Integrer `cosign sign` + `cosign verify` i CI + klient-installer.

Sandbox og isolasjon

Prosess-isolasjon, FS- og nettverks-scoping på klient-siden.

Kjør MCP-servere i isolert sandbox

sandbox-by-default

Blokkerende

MCP-servere får egen prosess + begrenset FS-scope (readonly $HOME, writable kun $TMPDIR). På macOS bruk `sandbox-exec`; på Linux bruk bubblewrap/firejail; på Windows AppContainer. Tauri-versjonen av ketl kjører MCP-prosesser via plugin-spawn med scope-begrensninger.

Handling

Se service-issue om sandbox-spawn; web viser status i `/mcp/distribusjon` (hvilke servere støtter sandbox).

📂 service/ketl/mcp/sandbox.py

Nettverks-egress via allowlist per server

network-egress-allowlist

Anbefalt

Hver MCP-server deklarerer hvilke destinasjoner den trenger. Klient legger til iptables/pf-regel eller proxy-injeksjon. Ingen 0.0.0.0/0 som default.

Handling

Legg til `network_allowlist`-felt i `mcp.json`-manifest.

Autentisering

Klient↔server-autentisering for ikke-STDIO-transporter.

HTTP/SSE-MCP-servere krever autentisering

no-public-unauthed

Blokkerende

Aldri publiser en MCP-server over HTTP/SSE på åpent internett uten auth. Bruk OAuth 2.0 + PKCE, mTLS eller API-key med rotasjon. STDIO-servere kjører lokalt og trenger ikke auth, men tilgang til konfigfila gir full tilgang.

Handling

Ketl cloud sin MCP-server krever OAuth via `auth.ketl.no`; dokumenter dette i `/mcp`.

API-nøkler kan roteres uten downtime

rotate-api-keys

Anbefalt

MCP-server API-nøkler skal være revokerbare via dashboard og ha maks 90 dagers TTL. Rotasjon skal ikke kreve re-install i klient.

Handling

Bruk `key_id` i header; refresh-mekanisme via HTTP 401 + WWW-Authenticate: Bearer.

Observabilitet

Logging, audit-trail og deteksjon av unormal tool-invocation-oppførsel.

Alle tool-invocations logges + vises for bruker

log-tool-invocations

Anbefalt

Når LLM kaller en MCP-tool skal kall, args og resultat logges i revisjonsspor. Bruker ser live 'X tools invoked last 10 min' i UI. Mønstergjenkjenning flagger unormale flows (mange tools mot samme ressurs, off-hours-kall).

Handling

Rendre `mcp-activity-feed.tsx` i `/mcp`-hub når bruker har aktive servere.

Audit-trail eksport til SIEM

audit-trail-export

Informativ

For Enterprise-kunder tilbys syslog/JSON-export av MCP-kall til SIEM. Log-integritet via `tenant_id` + monotonic seq + signert block-hash (speiler ADR-12 audit-trail).

Handling

Se kunnskap/audit-trail for felles modell. MCP-kall blir nytt event-type.

Marketplace-UI (ketl-side)

UI-kontrakter ketl leverer: verified-badge, install-consent, drift-varsler.

'Verified' badge har eksplisitt publisher-krav

verified-badge-contract

Blokkerende

En server får 'verified'-status kun hvis (a) ketl har verifisert signatur mot Anthropic/Cloudflare eller (b) ketl har distribuert den selv. 'Community'-servere merkes alltid som ukjent kilde.

Handling

Publiser contract i `/kunnskap/mcp-sikkerhet` og renderskjema i `/mcp`-hub.

Install-flows viser consent-modal med full command

install-consent-modal

Blokkerende

Før bruker starter 'install', vises full `command + args + env`-preview slik at de kan revise hva som skal kjøres. Denne consent-modalen er ikke dismissible via 'Don't show again' for ukjente kilder.

Handling

Implementer `<McpInstallConsent />` — obligatorisk steg i installer-flow.

Ingen auto-restart ved konfig-endring utført av agent

no-autorun-on-config-change

Blokkerende

Hvis en agent eller plugin endrer MCP-konfigfila, skal endringen kreve eksplisitt brukerhandling før prosessen startes. Konkret: detect drift → vis diff → krev klikk.

Handling

Service-side: watch `mcp.json` inode-mtime, signer sist-godkjent konfig i settings.

Kilder

Anthropic MCP design vulnerability
The Hacker News · 2026-04
Les
MCP specification — security considerations
Anthropic · 2026-03
Les
OWASP Top 10 for LLM Applications
OWASP · 2025-11
Les
Sigstore — keyless signing
Sigstore · løpende
Les
Tilknyttet arbeid

ketl service (Tauri desktop) har egen hardening-side som inkluderer prosess-sandboxing for MCP-servere: /kunnskap/desktop-sikkerhet.

Audit-trail-modellen for tool-invocations deler skjema med record-plattformen: /kunnskap/audit-trail.

ketl cloud
DataApperMCPPriser
AI-transparensPersonvernSikkerhet

© 2026 ketl cloud

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