Files
OmniRoute/docs
diegosouzapw 21f8dc4b3c fix(security): close semgrep MCP findings (CSWSH, log injection, copilot exposure, error sanitization)
semgrep's post-tool-cli-scan flagged five concrete issues; each fix is
narrow and keeps existing behaviour for legitimate callers.

src/server/ws/liveServer.ts
  WebSocket upgrades did not check the Origin header (CWE-1385: CSWSH).
  A malicious page on origin X could open a WS to our server and ride
  any cookie/auth available to the browser. Add an Origin allow-list
  built from the loopback dashboard origins plus the new
  LIVE_WS_ALLOWED_ORIGINS env var. Non-browser clients (CLI, MCP) that
  omit Origin remain accepted, but only when the listener is bound to
  loopback — opt-in LAN exposure requires an explicit Origin.

src/app/api/v1/relay/chat/completions/route.ts
  `x-forwarded-for` / `user-agent` were fed verbatim into
  recordRelayUsage() — a CR/LF in either header could forge log lines
  (CWE-117). Add sanitizeForensicHeader() to strip control chars and
  cap to 256 chars, plus migrate every error branch to buildErrorBody()
  (Hard Rule #12).

src/app/api/copilot/chat/route.ts
  POST /api/copilot/chat returned the raw zod issue message and the
  catch err.message in the JSON body. Route both through
  buildErrorBody() so sanitizeErrorMessage() strips stack traces and
  absolute paths before serialization (Hard Rule #12).

src/server/authz/routeGuard.ts (+ tests/unit/authz/routeGuard.test.ts)
  /api/copilot/* drives the Copilot LLM and runs without auth by
  default. Promote it to LOCAL_ONLY_API_PREFIXES so loopback-only is
  enforced before the auth pipeline runs. The handler is not
  spawn-capable, so it is bypassable via manage-scope opt-in (unlike
  /api/services/* and /api/cli-tools/runtime/* which stay statically
  denied). Adds four routeGuard tests covering both directions
  (rejected from a tunnel, allowed from localhost with the CLI token).

Also: docs/reference/ENVIRONMENT.md + .env.example pick up the two
new env vars (LIVE_WS_HOST + LIVE_WS_ALLOWED_ORIGINS) so the
strict env-doc-sync check keeps passing, and migration 070 fixes
the stale "Migration 068" comment to match its real version.
2026-05-26 10:07:03 -03:00
..
2026-05-23 01:46:59 -03:00
2026-05-24 18:05:58 -03:00
2026-05-23 01:46:59 -03:00
2026-05-23 01:46:59 -03:00
2026-05-24 18:05:58 -03:00
2026-05-23 01:46:59 -03:00
2026-05-23 01:46:59 -03:00
2026-05-24 18:05:58 -03:00
2026-05-23 01:46:59 -03:00
2026-05-24 18:05:58 -03:00
2026-05-23 01:46:59 -03:00
2026-05-24 20:40:48 -03:00

title, version, lastUpdated
title version lastUpdated
OmniRoute Documentation 3.8.2 2026-05-13

OmniRoute Documentation

Navigable index of the OmniRoute documentation set. Topics are grouped by intent so you can find what you need quickly.

Looking for the project overview, install steps, or release notes? See the root README.md, CHANGELOG.md, and CONTRIBUTING.md.


architecture/

How the system is put together — read these to understand the runtime, code layout, and resilience model.

guides/

Task-focused walkthroughs for operators and end users.

reference/

Lookup material — API surface, environment variables, CLI flags, provider catalog.

frameworks/

Pluggable subsystems exposed to clients, agents, and operators.

routing/

Combo routing, scoring, and replay.

security/

Guardrails, compliance, stealth, and the mandatory patterns for handling public credentials and error messages.

  • GUARDRAILS.md — PII, prompt injection, vision guardrails.
  • COMPLIANCE.md — audit trails and compliance.
  • STEALTH_GUIDE.md — TLS / fingerprint stealth.
  • PUBLIC_CREDS.mdmandatory pattern for embedding public upstream OAuth client_id/secret + Firebase Web keys without tripping secret scanners.
  • ERROR_SANITIZATION.mdmandatory pattern for routing every error response through sanitizeErrorMessage to prevent stack-trace exposure.

compression/

Prompt compression engines, rules, and language packs.

ops/

Release, deployment, proxies, tunnels, coverage.

diagrams/

Mermaid sources and exported SVG/PNG diagrams referenced from the docs above. Populated incrementally — see diagrams/README.md.

i18n/

Translated mirrors of the documentation in 40 locales. See i18n/README.md for the supported language list.

screenshots/

Static screenshots used by the dashboard and the README. Not part of the doc body.


Auto-generated artifacts

  • reference/PROVIDER_REFERENCE.md is generated by scripts/gen-provider-reference.ts from src/shared/constants/providers.ts. Do not edit by hand.
  • The dashboard sidebar (/docs UI) is generated by scripts/generate-docs-index.mjs, which walks the subfolders above.