Security

Trust

LineageLens is built so the most sensitive data — your prompts and source code — never leaves infrastructure you control.

The core guarantee

There is no LineageLens cloud. Every tier — Base, Lite, Plus, Max — runs entirely on your machine, your VPS, or your VPC. Prompts and code are stored only where you deploy. We cannot read your data because we never receive it.

Data in transit

  • The proxy enforces a TLS 1.2 minimum to upstream providers.
  • Request bodies are forwarded untouched — the proxy never rewrites your prompts.
  • Provenance records travel over your local network or your own backend’s TLS.

Data at rest

  • Base: local JSON, encrypted by your OS disk encryption (FileVault / BitLocker / LUKS).
  • Lite: SQLite inside a Docker volume — apply host-level encryption.
  • Plus / Max: your PostgreSQL — encryption at rest per your config. Integration secrets get field-level encryption.

Authentication & access

Plus/Max use JWT auth with refresh-token rotation, RBAC (admin/member), and a full audit log. Passwords are hashed with PBKDF2-SHA256 at 390,000 iterations. Max adds OIDC/SSO discovery for Okta, Auth0, and Azure AD.

We red-team our own product

An autonomous adversarial assessment ran 450+ test cases across 39 attack categories on all three tiers (Lite, Plus, Max), plus a line-by-line review of every proxy adapter (13 code issues found, all tracked). Overall resistance was 84.9%. We publish the full result — strengths and weak spots — because you self-host LineageLens and deserve to know exactly where it stands.

CategoryResistance
Authentication & tokens100%
Injection (SQL · Cypher · path)98%
Protocol & header attacks88%
Input validation87%
Availability & resilience83%
Authorization & isolation73%
Rate limiting & DoS60%

Withstood: JWT algorithm confusion, SQL & Cypher injection, path traversal, cross-workspace IDOR, webhook SSRF, integrity-chain tampering, HTTP method confusion, and oversized-payload DoS.

Open findings — disclosed & tracked

None of these allow access to another workspace’s data — they are operational hardening, fixable without architectural change.

  • [P1] Rate limiting ships off by default. Disabled in dev; enable it in production. Until then, login attempts aren’t throttled on Lite/Plus (Max already rate-limits).
  • [P2] Read-side workspace filter is cosmetic. The workspace_id query param is ignored on read endpoints — the JWT’s workspace is always enforced, so no cross-workspace reads — but the inconsistency is being fixed.
  • [P2] Ingest isn’t idempotent yet. A replayed request, or a reused client-supplied UUID, creates duplicate records instead of a conflict. Idempotency-Key support is planned.
  • [P2] Dashboard output-escaping. User-controlled fields are stored verbatim, so the dashboard must escape them on render. The API itself returns JSON, not HTML.
  • [P2] Connection-hold (slowloris). Run behind nginx/caddy with a header timeout; in-app enforcement is next.

Reporting a vulnerability

Security issues go to our private channel, not public GitHub issues — see SECURITY.md in the repository. We acknowledge reports promptly and coordinate disclosure.

Not yet SOC 2 / ISO 27001 validated. Treat LineageLens as developer-governance tooling until that work is complete — and pair its heuristic risk score with a dedicated SAST scanner.