MCP Fusion/Security and governance/Sicherheits-Pipeline

Sicherheits-Pipeline

Frag die KI über Vinkius

Alle Schichten zwischen einem Agenten und Ihren Daten, in Reihenfolge: Eingangs-Firewall, strenge Validierung, Tenant-Middleware, Presenters, die Redaction-Engine, der Egress-Limiter, die Prompt-Firewall und die Sandbox.

MCP Fusion erzwingt Sicherheit als eine Pipeline von Schichten, jede mit einer klaren Position im Request. Diese Seite ist die technische Landkarte: was läuft, in welcher Reihenfolge, mit welchen Zusagen.

Die Reihenfolge, durchgängig

1 contextFactory      tenant and identity resolution
2 rate limiter        sliding window, key from ctx
3 input firewall      LLM-as-Judge on the arguments
4 validate            strict Zod per action, unknown keys rejected
5 middleware chain    auth, audit, custom, precompiled and frozen
6 handler             your business logic
7 Presenter           schema shape → _select → redact → serialize
8 rules and UI        computed on the full object, never on the wire copy
9 egress guard        byte budget on the text response
10 audit + telemetry  every stage emits if a sink is configured

Schicht für Schicht

Rate limiter

rateLimit({ windowMs, limit, keyFn }) ist eine Middleware mit einem gleitenden Fenster über Zeitstempel-Listen. Zwei Aufrufe zählen: increment() zählt ohne Aufzeichnung, und record() protokolliert nur akzeptierte Requests, damit abgelehnter Traffic das eigene Fenster nicht aufbläht. keyFn(ctx) ist der Identitäts-Hook: begrenzen Sie pro Token, pro Tenant oder pro User. Der Store ist ein Interface; der In-Memory-Store ist als Single-Process dokumentiert, Produktion nutzt Ihr Redis oder KV hinter demselben Interface.

Eingangs-Firewall

inputFirewall({ judge }) läuft nach der Zod-Validierung, vor Ihrem Handler. Die Argumente werden in einen Judge-Prompt serialisiert (Backticks neutralisiert, damit kein Fence-Escape gelingt), und ein austauschbarer SemanticProbeAdapter gibt { safe, threats } zurück. Bei !safe wird der Handler nie aufgerufen: die Antwort ist ein selbstheilendes toolError('INPUT_REJECTED', ...). Diese Schicht gilt für injektionsartige Eingaben: „ignoriere vorherige Anweisungen“, Exfiltrations-Payloads, eingeschleuste Dateipfade.

Presenter-Redaktion (die Egress-Firewall)

.redactPII(paths, censor?) kompiliert fast-redact-Pfade zu einer einzigen Funktion, gecacht auf dem Presenter. Die Pipeline-Reihenfolge in Presenter.make() ist präzise: kürzen, validieren, _select anwenden, die Wire-Daten klonen, maskieren, als String serialisieren, dann UI-Blöcke und Regeln aus dem vollständigen unmaskierten Objekt rendern. Folgen:

  • der Modell-Text enthält nie maskierte Felder; [REDACTED] ist für per _select versteckte Schlüssel nicht einmal auf dem Wire
  • ui.table()-Blöcke behalten reale Werte (sie werden aus dem vollständigen Objekt im Speicher gebaut, und der Wire-Text ist bereits eingefroren)
  • wirft structuredClone oder der Redaktor, wirft die Pipeline ebenfalls: Data withheld to prevent PII leak. Redaktion ist an dieser Stelle fail-closed.

fast-redact ist ein optionales Peer. Wenn es nicht installiert ist, degradiert der Redaktor zu einem No-op mit einer Konsolenwarnung. Behandeln Sie es als erforderliche Abhängigkeit für Connectors, die personenbezogene Daten halten.

Prompt-Firewall

Die Regeln selbst sind Angriffsfläche: dynamische Regeln werden aus Daten erzeugt, und Daten kommen aus der Welt des Agenten. presenter.promptFirewall({ judge }) sendet die akkumulierten Systemregeln an einen Judge, bevor auch nur eine von ihnen das Modell erreicht. Die Strategie ist fail-closed und pro Regel: wenn der Judge den Batch markiert, aber einige Regeln benennt, werden die unbenannten ebenfalls blockiert. Der Konsens-Modus (alle Judges stimmen zu) hat kein Fail-open. Ein konfigurierter Firewall erzwingt den asynchronen Pfad: make() wirft, makeAsync() ist der Vertrag.

Sandbox

sandboxed() auf einem Tool kündigt Delegierung von Berechnung an: Der Agent sendet eine JS-Pfeilfunktion, SandboxEngine führt sie in einem frischen isolated-vm-Kontext aus, wobei die Daten als externe Kopie injiziert werden, und nur der Rückgabewert kommt zurück. Defaults: 5s Timeout, 128MB Isolate, 1MB Ausgabe-Limit, 64KB Code-Limit. process, require, fs, globalThis und Buffer existieren im Kontext nicht; die Guard, die offensichtliche Muster ablehnt, ist nur DX und ausdrücklich nicht die Grenze. Bei Abbruch verwirft die Engine die Isolate (oder gibt nur den Kontext frei, wenn andere Requests ihn teilen) und erzeugt sie beim nächsten Aufruf neu.

Kill switch und Halt

Der Not-Aus lebt in der Konsole, siehe Connector policy: der globale Halt und die Richtlinie pro Connector. Auf dem Edge liefern gehaltene Connectors keine Aufrufe mehr, ohne dass neu deployt werden muss.

Was das Framework nicht tut

Ehrlichkeit vor Marketing: die Audit-Middleware des Frameworks emittiert Ereignisse an Ihre Sink (SHA-256-Argument-Digeste, Statusklassifikation, keine Signatur, keine Kette). Die fälschungssichere signierte Audit-Kette ist eine Vinkius-Cloud-Hosting-Funktion: deployen Sie mit mcpfusion deploy, und die Plattform protokolliert sie für Sie. Dieselbe Aufteilung gilt für Rate-Limit-Stores: das Interface ist Ihres, der Edge betreibt es.

Nächste Schritte