MCP threat model

Threat model and security posture

This is our AI agent threat model, written down. Plenty of vendors point at other people's MCP incidents. Do that, and you owe the reader your own security posture first. This page is ours, including the parts that aren't finished.

Every threat we assume, and what stops it

Threat model: five assumed adversaries, five named controls Five threat actors descend toward the DataShield control plane; each attack path is intercepted by a specific control gate before reaching the core. Injected agent scope ceiling contained Stolen token mid-session revocation contained Malicious MCP server tokenized data - nothing raw to read contained Compromised admin config governance + security floors contained Log tamperer hash chain + signed checkpoints contained DataShield control plane every assumed threat maps to a named mechanism - 1:1

Assume the threat, name the control, show what stops it. The prose version is below.

The AI agent threat model

We assume the worst. Attackers prompt-inject agents. They steal tokens. MCP servers turn hostile, or attackers poison them. They compromise admins. Logs are a target, because logs are the evidence.

Here is each threat, next to the thing that holds it in check:

  • Injected agent → a scope ceiling bounds what any agent can do, no matter what it was talked into. Authority tiers gate the risky tools. The blast radius is the token, not the account.
  • Stolen token → the scope ceiling caps it when we issue it. Once you spot the theft, mid-session revocation kills it on the next call.
  • Malicious MCP server → we tokenize governed datasets at ingest. So a hostile tool reads tokens, not identifiers. To detokenize, you need separate, privileged authorization.
  • Compromised admin → config changes go through propose/approve governance, with security floors no one can waive. Break-glass access stays scoped. It auto-revokes. It lands in the tamper-evident chain.
  • Log tampering → the hash chain has signed checkpoints. Any change shows up, and the report names which kind it was. Verify it yourself

Key management

In self-hosted and dedicated single-tenant setups, you hold the keys:

  • Tokenization keys (HMAC): yours, held in your environment. It is a secret you set, or a machine key on your instance, not in a KMS today. Rotation re-keys every token, so we plan it with you instead of pretending it is free. A leaked key can unmask deterministic tokens. So key custody is a top deployment topic, not a footnote.
  • Audit signing keys (Ed25519): held in a key directory on your instance that only the service reads. Keys rotate by kid. Checks fail closed on an unknown key. Auth has a KMS/HSM custody seam built in. The hardware side has not shipped.
  • Erasure: GDPR crypto-shred works by destroying the per-subject key. Key backups must follow the same custody rules, or erasure is just theater. So we write down the backup path when we deploy.

Signing-as-a-service (rolling out): audit signing already runs through one custody choke point, with kid-rotated keys and fail-closed checks. We are rolling out KMS/HSM-held, non-exportable signing keys across the platform, so no service in the stack ever holds private key material.

Crypto-shredding: GDPR erasure without breaking the audit chain An erasure request destroys the per-subject encryption key in the key vault, making raw values unrecoverable, while the hash-chained audit trail continues unbroken and still verifies. subject: S-4821 name email dob raw values unrecoverable KEY VAULT per-subject key erasure request erasure event appended Erasure destroys the key, not the evidence. AUDIT CHAIN actor_id HMAC-committed - chain still verifies Ed25519 checkpoint verify_chain → VALID

MCP security best practices, applied to our own servers

Every MCP surface we run takes an Auth-issued MCP tool token (RFC 9068). Each token binds to scope ceilings and authority tiers. We rate-limit and meter calls per agent, then audit them into the chain. Services bind to localhost behind a TLS-terminating reverse proxy. Transport is streamable HTTP. No stdio servers run on production hosts.

Vulnerability disclosure

Report vulnerabilities to support@myorg.ai. The machine-readable contact lives in /.well-known/security.txt (RFC 9116). We commit to a reply within 2 business days, and a real answer within 10. Safe-harbor: we will not meet good-faith research with legal action. That covers your own deployment, or our published demo surfaces.

Honest status

You've seen the proof

Ready for a number? Scope your deployment and we'll price it against your own economics.

Get your quote →