Single tenant, no cross-customer amplification
The control plane in your data centre serves only you. Cross-tenant credential leakage does not exist as a threat class because there is no second tenant. It also simplifies the architecture materially.
Threat model & boundaries
A security document that lists only strengths is a negative signal to a CISO. This page is deliberately inverted: the risks we introduce first, the problems we solve second, and the questions we have no answer to at the end.
Threat #0
Private deployment changes the shape of this threat but does not remove it. Because the control plane runs inside your own network and is single-tenant, the SaaS-specific amplification of “one breach reaches every customer” does not exist — the blast radius is bounded by your own perimeter. Inside that perimeter, it is still one of the highest-privilege components you run.
The control plane in your data centre serves only you. Cross-tenant credential leakage does not exist as a threat class because there is no second tenant. It also simplifies the architecture materially.
Signing and wrapping keys never leave the hardware security module in plaintext. Holding root keys in your own KMS / HSM over PKCS#11 must be supported; a software-key mode is explicitly labelled as a lower assurance tier.
Is a zero-knowledge credential design possible — where the broker cannot read the plaintext even as it injects it? We do not have a satisfying answer yet.
Threat classes
Every row below is marked with its current status: Designed / Needs dedicated work / Explicitly cannot.
| Class | Key question | Where we stand | Status |
|---|---|---|---|
| Control plane compromised | the broker is breached = every credential it holds leaks | Single-tenant private deployment bounds the blast radius to your own perimeter (no cross-customer amplification); root keys held in your KMS / HSM; zero-knowledge credential design still unsolved. | Needs dedicated work |
| Clock drift defeats short TTLs | without external NTP, a 60–300s Tup may expire on issue | Detect cluster clock skew at startup and warn; define an explicit tolerance window; fail closed with an explicit error when skew exceeds the threshold — never silently allow. | Designed |
| Agent self-tampering | the agent rewrites its own gate scripts (publicly documented) | Any control the agent can edit is not a control. Only root-owned managed policy, or an out-of-process broker, survives. This is one reason the credential sits outside the agent process. | Designed |
| Prompt injection → authorized call | a hijacked agent makes a call it is entitled to make | We cannot stop it. We degrade the impact, record it, and make it revocable. See the next section. | Explicitly cannot |
| Rug pull (tool description changed) | approve-at-install with no re-verification is the norm, and the gap has been exploited (CVE-2025-54136) | Tool description pinning (TOFU) + forced re-authorization on change | Designed |
| Availability is security | we go down, every agent stops | Fail-open violates deny-by-default; fail-closed makes us a single point of failure. A break-glass mechanism has to be designed, not avoided. | Needs dedicated work |
| Unregistered agents | an agent not in the registry makes a call — now what? | Refusing impedes adoption; allowing leaves a hole. This is a policy question we have not settled. | Needs dedicated work |
Prompt injection
This sentence is worth stating precisely, because the market is full of the opposite over-promise. Prompt injection is a confused deputy problem: anything the agent reads may be attacker-authored instructions, and the agent holds real privilege. When a hijacked agent makes a call it was already entitled to make, no control sitting above the credential — dialogs, tool-description validation, intent classifiers — can determine in principle that the call should not happen.
The credential's scope is narrowed to this one specific operation and its lifetime is measured in seconds. What would have been “exfiltrate the entire private repository” degrades to “make one authorized call.”
The call is attributable to a named human + agent instance + task and written to a tamper-evident audit record. Afterwards you can actually establish what happened.
Consume CAEP / Shared Signals events from your IdP to kill an in-flight agent session within one token TTL; or use token-claims-change to narrow a running agent's privileges rather than only killing it.
Compliance
The standards below share one requirement: every privileged action must be attributable to a named, unique, non-shared identity, and the record must be tamper-evident and retained. A static API key structurally cannot satisfy that — and this gap holds today, without waiting for any new regulation.
| Standard | Clause | Evidence we provide |
|---|---|---|
| SOC 2 | CC6.1 / CC6.3 / CC6.5 / CC6.6 / CC7.2 | Every privileged action attributable to a named, unique, non-shared identity; logical access granted and revoked on least privilege. This is our core argument. |
| DORA | Chapter II — ICT risk management | Access control and traceability over ICT assets for financial entities. Financial services is currently the one segment with live obligations. |
| PCI DSS 4.0 | Req.7 / Req.8 / Req.10 | Unique IDs, no shared accounts, 12-month log retention. |
| ISO 27001:2022 | A.8.2 / A.8.15 | Management of privileged access rights; logging. |
| NIS2 | Art.21(2) | Access control as a baseline cybersecurity risk-management measure. |
Open questions
We keep this list on a public website because it is the biggest difference between us and a demo-driven product.