Threat Model

Define the attacker model and defense scope precisely.


Attacker Model: Who Are We Defending Against?

Assumptions:

  • Attacker controls the package registry: Can publish malicious versions of npm packages.
  • Attacker can MITM network traffic: Can intercept downloads (mitigated by HTTPS).
  • Attacker does NOT have the private key: The signing key is secure.
  • Attacker does NOT have access to the CI environment: GitHub Actions secrets are protected.

In-Scope Threats

ThreatAttack VectorDefense Mechanism
Supply chain driftServer silently adds exec toolmcptrust diff detects schema change
Lockfile tamperingAttacker modifies mcp-lock.json to add unauthorized toolsEd25519 signature verification
Bundle corruptionAttacker modifies approval.zip in transitSignature verification on lockfile inside bundle
Registry substitutionnpm serves different tarball than expectedmcptrust artifact verify --deep checks SHA-256
Provenance spoofingFake attestation claims package came from trusted CImcptrust artifact provenance verifies Sigstore attestation

Out-of-Scope Threats

ThreatWhy Out of ScopeMitigation (Outside MCPTrust)
Malicious implementationWe verify interface, not codeCode review, sandboxing
Runtime prompt injectionAgent-tool conversation is opaqueOutput filtering, guardrails
Key compromisePrivate key is assumption-secureHSMs, key rotation, Sigstore (no keys)
MCP protocol exploitsTrust the protocolUpstream MCP security
Compromised CIIf CI is owned, attacker can signRBAC, branch protection, SOC2

Defense-in-Depth Recommendations

MCPTrust is One Layer. Complete your security posture with:

  • ✅ Use MCPTrust for supply chain verification
  • ✅ Sandbox MCP servers (Docker, nsjail, Firecracker)
  • ✅ Apply network policies (block outbound from servers)
  • ✅ Implement output filtering on agent responses
  • ✅ Monitor with SIEM (mcptrust supports JSONL logging)