Security Audit

Our About page says our security audit process is documented. Here is the document: what was audited, what it found, and how every finding got closed.

Scope

In February 2026, Odysseus was subject to a formal internal multi-tenant security audit covering 268 Go source files and 383 TypeScript files across 14 components — the control plane, the node agent, the dashboard, and every subsystem that touches tenant boundaries.

What it found

184
Total findings
30
Critical
51
High
66
Medium
37
Low

Source: docs/core/07-security.md:11 and audit/EXECUTION_PLAN.md:4,6,15.

How it was remediated

All 184 findings were closed through a single master execution plan, organized as six gated waves — Wave 0 (Emergency) through Wave 5 (Verify) — each unlocking the next only once its own gate passed. Work within a wave runs in parallel across components; work across waves is sequential, so a Wave 3 fix could not start before Wave 2's gate closed. The plan is explicit that later-wave findings could not be worked early even by someone with spare time: “DO NOT read ahead… and start working on later-phase items that belong to a future wave” (audit/EXECUTION_PLAN.md:78).

How it was verified

Nine dedicated security test suites exercise the post-remediation posture, each named for the failure class it guards against:

SuiteFile
Authentication bypasspkg/api/auth_bypass_test.go
Compliance verificationpkg/api/compliance_verification_test.go
Container isolationpkg/api/container_isolation_test.go
Cross-tenant isolationpkg/api/cross_tenant_isolation_test.go
Infrastructure isolationpkg/api/infrastructure_isolation_test.go
Tenant isolation (general)pkg/api/isolation_test.go
Performance regressionpkg/api/performance_regression_test.go
Role escalationpkg/api/role_escalation_test.go
Tenant isolation (API-scoped)pkg/api/tenant_isolation_test.go

Findings you can trace, not just count

Every finding carries an ID — CRIT-01, HIGH-04, and so on, scoped per component — and that ID appears again as a comment at the line that fixes it, so the claim “this was fixed” is checkable rather than asserted. For example:

The execution plan cross-references these same IDs across components when one fix depends on another — for instance Consul CRIT-01 (remove legacy) -> Vault CRIT-03 (tenant paths) -> Vault CRIT-01 (API scoping) -> Agent CRIT-02 (tenant ownership) (audit/EXECUTION_PLAN.md:143-144) — so the dependency chain that motivated the wave ordering is itself part of the public record, not a claim we're asking you to take on faith.

Status

Complete. All 184 findings remediated across all six waves; every gate closed (audit/EXECUTION_PLAN.md:6). This is not an ongoing remediation effort we are describing optimistically — it finished, and what you are reading is the closed record of it.

For what the resulting controls actually do day to day, see Security. For how the audit trail itself proves it hasn't been tampered with after the fact, see Compliance.

How these numbers and claims were arrived at

  1. The finding counts and wave structure are quoted directly from audit/EXECUTION_PLAN.md and docs/core/07-security.md, checked on 21 August 2026 rather than carried forward from an earlier description. The nine test suite file names were confirmed to exist in pkg/api/ at that same check, not assumed from an internal document's description of them.
  2. The three finding-ID code citations above are a sample, not an exhaustive count — we picked ones that were easy to verify independently (grep -rn "SECURITY FIX" pkg/ finds many more) rather than claiming we counted every one.
  3. “All remediated” describes the audit's own finding set as of February 2026. It is not a claim that no security work has happened since, or that no vulnerability can exist going forward — see the Responsible Disclosure section on the Security page for how to report one.