DocsAdministerSecurity posture

Security posture

The short version: Memnox is a control that other controls depend on, so it is built to be inspectable rather than to be trusted.

What it never stores

Not stored

Provider OAuth tokens and refresh grants

The integration provider

Raw tool-call arguments

Nothing, matched in-process, then discarded

Card details

The payment provider

Model credentials for extraction

Your configuration, your account (BYOK)

The argument one deserves expanding. A rule can match on the contents of a call, command: ["*rm -rf*"], and the raw payload is the one thing a control plane should not collect. So @memnox/local-gate evaluates it in-process, inside the MCP firewall or the editor hook, and the runtime is told the tool, the target, and the rule ids that matched. The SDK strips arguments before any request leaves the machine.

What it does store

Source events with their permalinks, decisions with their approvers, audit events with their hashes, people with their resolved identities, and the configuration you set. Each table is classified in the data inventory, including whether it is encrypted at rest.

Authentication

Caller

A person, in a browser

Google sign-in → httpOnly session cookie + CSRF cookie

A person, via IdP

OIDC or SAML → same session

A machine

Bearer token, role-scoped

An agent

Agent token, or opt-in mTLS client certificate

Agent tokens are stored at ~/.memnox/config.json, mode 0600. The environment wins when set, which is how CI passes one.

An unknown token is blocked and audited as critical. Fail closed.

Inbound verification

Every webhook route verifies over raw bytes, before parsing, and every shared-token comparison is constant-time.

Route

Integration events, from every toolkit

Standard Webhooks HMAC-SHA256 over id, timestamp and raw body, with a replay window

GitHub App deliveries

GitHub's x-hub-signature-256 with the App's webhook secret

Meeting and document relays

An admin bearer token

Payment provider events

The provider's own signature

Rate limiting applies per workspace on every inbound route. See Webhooks and signatures.

Where models are, and are not

Path

Policy evaluation

None

Risk classification and scoring

None

Guards and advisors

None

Code graph edges used in decisions

None, only AST-extracted edges cross over

The security baseline in memnox context

None, a versioned lookup table

Decision extraction

An LLM, BYOK, output requires human approval

That table is the security argument for the whole product. Everything that decides is deterministic; the one thing that guesses cannot act.

Fail-closed, and the one exception

Unknown identity, unreadable state or ambiguous input blocks.

Advisors are the exception in the other direction: an advisor that cannot run raises nothing, because a broken advisor must not stop work. Provenance is the exception to that, an unreadable taint store means the session is treated as tainted.

Break-glass leaves a mark

An admin override requires a reason, is audited as critical, and opens an incident. Irreversible actions (project.delete, database.drop) refuse break-glass with a 403 and audit the attempt.

Tamper evidence and its limit

The audit chain detects edits to a log you control. It does not stop an operator with database access from rewriting the whole chain.

If you need a stronger property, ship every decision to a sink outside the same trust boundary, an S3 bucket with object lock, or a Kafka topic your security team owns.

Reporting a vulnerability

The runtime repository carries a SECURITY.md with the disclosure process. Please use it rather than a public issue.