Skip to content

Gateway Security Model ​

MultiModel Dev OS v4.2 Gateway Foundation established safe defaults, mock runtime boundaries, and bounded observability. v4.3 Sprint A extends this model with formal Execution Contracts and Security Boundaries (src/gateway/contracts/execution-request.js, execution-result.js, credential-ref.js, provider-endpoint.js). Outbound execution remains contract-only in Sprint A: network requests do not run, credentials are not read, and no live sockets are opened.

Safe Defaults ​

Gateway configuration defaults are intentionally conservative:

  • bind host: 127.0.0.1
  • remote binding disabled
  • prompt redaction enabled
  • local-only auth mode
  • bounded request size
  • bounded request timeout
  • bounded stream idle timeout
  • bounded provider timeout
  • conservative retry limit
  • fallback disabled
  • private provider networks disallowed

These defaults are validated by unit tests and the strict verification pipeline.

Secret Boundaries ​

Gateway diagnostics and normalized errors must not include:

  • API keys
  • authorization headers
  • raw credential values
  • sensitive environment values
  • full prompt bodies by default

Provider credentials are not bundled and are not loaded by gateway modules.

Provider URL Safety ​

Provider hosts are treated as security-sensitive. Metadata validation rejects unsafe protocols, embedded credentials, and local/private remote targets until a future explicit approval path exists.

This is metadata validation and future SSRF preparation. Runtime SSRF protections must be reviewed again before live provider execution is added.

Runtime Registry Safety ​

v4.2 Sprint B validates provider and local endpoint metadata without making requests:

  • remote providers require https:
  • embedded URL credentials are rejected
  • localhost/private-network targets are rejected for non-local providers
  • local endpoints must use approved local hosts
  • credential fields store environment variable names only
  • credential values are never read from the environment
  • routing presets are loaded but not executed

Routing Safety ​

Sprint C route planning is dry-run only. It uses static registry metadata and caller-supplied estimates to select a recommended candidate. It does not send prompts, load API keys, call provider endpoints, run health probes, execute fallback attempts, or write routing logs.

Resilience Simulation Boundary ​

Sprint D resilience planning is also non-executing:

  • failure records are caller-supplied
  • retry and backoff values are planned only
  • timeout budgets do not start timers
  • fallback transitions are selected as metadata only
  • circuit-breaker state is not persisted
  • rate-limit and quota metadata is not fetched from providers

Resilience explanations must not include prompt bodies, credential values, authorization headers, or local absolute paths.

Local Runtime Boundary ​

Sprint E adds a real local HTTP server with a mock provider only.

Security boundaries:

  • default bind host is loopback
  • remote binding is disabled by default
  • non-local binding requires bearer-token authentication
  • forwarded headers are not trusted
  • wildcard CORS is not enabled
  • provider credential environment variables are not read
  • external provider URLs are not contacted
  • request bodies are bounded
  • timeout timers are bounded and cleared
  • no request logs, PID files, or runtime state files are written

Route explanations must not include prompt bodies, credential values, authorization headers, or absolute local machine paths.

Client Configuration Boundary ​

Sprint F client plans are preview-only:

  • generated paths are workspace-relative
  • token values are represented by environment placeholders
  • diagnostics redact endpoint credentials
  • no global editor or shell configuration is written
  • no third-party client executable is invoked

Observability Boundary ​

Sprint G observability is bounded and local:

  • no telemetry upload
  • no analytics SDK
  • no filesystem logs
  • no prompt or completion retention by default
  • no authorization header retention
  • no bearer-token retention
  • no external provider health probes
  • no live pricing lookups

Optional observability endpoints inherit the local runtime authentication boundary and are disabled unless explicitly configured.

Skill OS Integration ​

Skill OS remains the control plane:

  • permissions are declarative metadata
  • guardrails are advisory metadata
  • workflows may reference Skill OS metadata
  • validation can inspect unsafe shapes

The gateway does not enforce permissions at runtime and does not make advisory guardrails block live commands.

Sprint H Threat Review ​

ThreatCurrent mitigationResidual riskEvidenceFuture action
Remote bind exposureLoopback default; non-local binding requires explicit auth config.Misconfiguration can still expose the local gateway.Runtime config tests and release-readiness verifier.Add operator-facing warnings before any CLI startup command exists.
Unauthenticated accessLocalhost-only mode by default; bearer-token auth for non-local config.Local malware can still access localhost services.Auth unit/integration tests.Consider opt-in token requirement even on loopback for sensitive workspaces.
Bearer-token disclosureAuthorization headers are redacted and not stored in observability.User-applied client configs could leak tokens outside this project.Redaction tests and client preview tests.Keep generated configs placeholder-only.
Oversized or malformed requestsBounded request size; malformed JSON and content length rejected.Slow request attacks still depend on Node server behavior and configured timeouts.Body-reader tests and runtime verifier.Add connection-count limits before production use.
Stream exhaustionStream idle and total timeouts; server cleanup on stop.High concurrency is not production-hardened.SSE tests and runtime smoke.Add concurrency caps before external provider execution.
SSRF through provider URLsRegistry URL validation rejects unsafe protocols, embedded credentials, and local/private remote targets.No live provider calls exist yet; future adapters must revalidate.Registry verifier and security docs.Re-audit before adding real provider clients.
Prompt/completion leakageObservability omits prompt/completion content by default and redacts content-like fields.User-supplied metadata may need review when new fields are added.Observability tests and release-readiness verifier.Keep metadata allowlists narrow.
Unsafe client configurationGenerated plans are preview-only, workspace-relative, and token-placeholder based.Users can manually paste unsafe config into tools.Client verifier and compatibility docs.Add explicit apply approval if a write API is ever introduced.
Mock-provider confusionDocs and /v1/models expose executable mock models only.Users may assume external provider support from roadmap language.Compatibility docs and docs-claim scan.Keep known limitations linked from gateway docs.
Package and supply-chain riskZero runtime dependencies and prepublish guard remain active.Dev dependency issues can still affect maintainers.npm audit --omit=dev, npm ls --omit=dev, verify package checks.Continue release-lane audit before stable v4.2.

Future Runtime Requirements ​

Before a gateway runtime is release-ready, it should include:

  • localhost-first binding checks
  • explicit authentication for non-local access
  • provider URL validation
  • request-size limits
  • timeout controls
  • retry ceilings
  • prompt and secret redaction
  • audit logs without prompt bodies by default
  • tests for credential leaks and unsafe provider targets

Released under the MIT License.