Threat model & known limits

Aarmos publishes what it defends against and where each guarantee ends. Everything here is intentional scope, not a to-do list.

In scope — what the gate enforces

  • Policy attenuation. Every child action is a subset of the parent — no child can grant itself more than the invite provided.
  • Tenant invariant. A receipt's tenant is bound in the policy hash; a mismatch fails offline verification.
  • Atomic metering. Call-ceilings and repeat-guards are decremented before dispatch; a crash mid-call cannot double-spend.
  • Workspace vault isolation. OAuth tokens and bearer profiles are stamped to the workspace that wrote them; a different active workspace cannot read, list, or delete them.
  • Connector egress. FQDN allow-lists and post-DNS-resolution SSRF checks prevent the L7 proxy from being turned into a metadata-service tunnel or an internal-network probe.

Out of scope — where the gate cannot help

  • OS-level egress. Aarmos enforces at L7 (application / middleware). A process on the same machine that opens its own socket bypasses the connector layer entirely. Full OS enforcement requires the tripwire daemon (roadmap Phase 3).
  • Compromised device. If the host is rooted or a browser extension has full page access, in-memory secrets are reachable regardless of the vault. The vault protects against opportunistic script access, not full host compromise.
  • Backend model provider. When BYO-LLM is used, prompt content leaves the device the moment it hits the provider's endpoint. Aarmos redacts before dispatch; it cannot un-send.

Boundary disclosures

  • The microsecond-scale gate is the policy check only. Network, model, and I/O latencies of the underlying tool call are not counted in that number.
  • AVAR receipts are verifiable forever only for as long as the signing key material remains checkable — anchor rotations are logged in the anchor chain, and the verifier is offline.
  • DoH-based DNS recheck. The MCP proxy re-resolves target hostnames via a public DoH resolver before fetch. A resolver outage falls back to the string-based guard, not through to an open proxy.

Reporting

Coordinated disclosure at security@aarmos.io. We fix P0 issues before shipping public copy about them; this page is updated in the same release.