Trust and security
How Assay is built to run safely, inside owner-declared scope, on your own infrastructure. The full references ship in the repository as the security model and threat model.
Safe-mode taxonomy: proof, not payload
Every technique carries a declared safety class, checked at load and again at dispatch against the grant's allowed classes. A misdeclaration is refused, not trusted.
passiveOn by defaultObservation only — banner, version, and configuration inference, with no change to the target's state.
active-safeOn within an allowing grantCrafted, non-destructive input that proves a condition by evidence, not effect: reads a planted canary, or makes the target call an operator-controlled out-of-band beacon to prove reachability. Never a shell, a write, persistence, exfiltration, or anything that could reduce availability.
active-intrusiveOff, interface-onlyState-changing or availability-impacting techniques. Interface-only in this build, not shipped in the standard artifact, and refused without a two-person-approved grant.
Intrusive capability is isolated
No working intrusive technique is authored in this repository, in any release. A guardrail test fails the build the moment a Go file appears in the restricted intrusive package, and a second test scans all shipping code for anything that grants a clearance outside the choke-point. An intrusive grant additionally requires a second, distinct approver — there is no single-admin path to it.
The guardrails are never paywalled and never sold around: scope enforcement, safe-mode classification, the audit log, blast-radius governance (concurrency and rate caps, an allowed-window scheduler, a target-health circuit breaker, and a global kill switch), and signed provenance all ship in the free tier.
Threat model, honestly
A threat model that only lists mitigations is not one. These are the assets Assay protects and the limits it does not pretend to close.
What Assay protects
- Your own target systems. The largest risk the product introduces is becoming the thing that harms what it was hired to test, so blast-radius governance is always on and cannot be turned off — an operator can only make it stricter.
- Engagement data — scope definitions and target lists, which reveal what you consider sensitive.
- Evidence bundles — each is proof that a specific exposure is exploitable, so each is treated as sensitive.
- The Ed25519 signing key — the root of trust for every grant, held in OpenBao Transit.
- The hash-chained audit log — the append-only record that every action ran within its declared scope and safety class.
Where the limits are
- A fully compromised host still cannot dispatch new validation without a valid signed grant, and ships no working destructive technique to run — but it can read data already at rest on that host. Encryption at rest is your infrastructure's job, not this layer's.
- A community adapter runs in the engine's process with no sandbox. Its declared class is enforced, but honest behavior within that class is a matter of code review before you install it, not a runtime boundary. Treat every adapter's source as a real question.
- Whoever holds the authz private key can forge grants that verify. OpenBao's own hardening — unseal discipline, narrow token scope, snapshot access control — is load-bearing for this model, not a separate concern.
Build integrity
Release images are cosign-signed, and each ships with a software bill of materials (SBOM) and SLSA build provenance, so you can verify what you run before you run it. Dependencies are pinned, and govulncheck, Trivy, and an SBOM scan run in the build pipeline. Images are mirror-able for an air-gapped install, and the product makes no runtime call to any vendor endpoint.
Reporting a vulnerability
Guardrail bypasses, choke-point escapes, and safe-mode misclassifications are treated as critical. Report a suspected vulnerability privately, never through a public issue, so a fix can ship before the details are public.
The security contact and the full disclosure policy ship with the source, in the repository's security policy (SECURITY.md).