Back to home
Back to SOC 2 readiness
SOC 2 evidence document

Annual Risk Assessment

Documented threat model, risk register, and mitigations — reviewed quarterly.

Version 1.0 Last reviewed 2026-02-18Owner: Founder

Methodology

We use a lightweight STRIDE-per-asset framework: every persisted-data asset gets walked through Spoofing, Tampering, Repudiation, Information Disclosure, Denial of Service, and Elevation of Privilege threats. Each threat gets a likelihood (1-5) × impact (1-5) score; anything ≥ 12 requires a written mitigation.

Asset inventory

AssetClassificationEncryptionAccess
Cloud provider credentials (AWS / Azure / GCP / Snowflake / Databricks / DO)ConfidentialFernet AES-128 at restPer-tenant DB isolation; admin-only writes
Customer revenue data (Stripe-joined)ConfidentialTLS 1.3 in transit; MongoDB at restTenant-scoped via JWT
LLM API keys (OpenAI / Claude / Gemini)ConfidentialEmergent universal key (rotated)Server-side only; never exposed to client
Okta SSWS tokensConfidentialFernet AES-128 at restAdmin-only; symmetric for SCIM inbound
Webhook signing secrets (Jira / Linear / PostHog / Mixpanel)ConfidentialPlain-stored, HMAC-only useOperator-set; rotation endpoint exists
Trace events & cost eventsInternalMongoDB at restTenant-scoped reads
Algorithm-correctness test resultsPublicn/aPublic via /algorithm-correctness

Top 10 risks (Feb 2026)

#RiskL × IMitigationStatus
R1Tenant data leakage via shared MongoDB connection pool3 × 5 = 15Per-tenant DB names enforced in tenant_db_for_user(); admin-export endpoints require role checkMitigated
R2Webhook signature forgery4 × 4 = 16HMAC-SHA256 constant-time compare on every receiver; tested in test_webhook_adapters_feb18.pyMitigated
R3Cloud-cred vault key compromise2 × 5 = 10Fernet key in env (out-of-process); rotation playbook documented; per-tenant credentials make blast radius smallMitigated
R4LLM prompt injection in customer-supplied prompts3 × 3 = 9System-prompt allow-list; output never used in privileged operationsMitigated
R5Runaway AI agent costs ($$$$)3 × 4 = 12Agent Economics hard-cap pre-check API; rolling-median runaway detectionMitigated
R6Stripe webhook replay attack2 × 4 = 8Stripe signature header verified; idempotency keys on event IDsMitigated
R7Brute-force password attacks4 × 3 = 12Lockout after 5 attempts / 15 min; bcrypt 12 roundsMitigated
R8Insider data exfiltration2 × 5 = 10All admin reads logged to admin_audit_export; Code of Conduct §4Mitigated
R9Outage of upstream (MongoDB, OpenAI, Stripe)3 × 3 = 9Graceful fallback in qa_failover.py; status page (planned, A1.3)Partial — A1.3 planned May 2026
R10Algorithmic bias in cost attribution (Shapley overcounts a tenant)2 × 4 = 8Castro-2009 Monte-Carlo: provably fair (Σ contributions = total); 230+ tests in algorithm manifestMitigated

Review cadence

  • Quarterly — full re-score by Founder + Tech advisor
  • Monthly — incident-driven re-score for any risk that materialized
  • On every major release — new asset added → new STRIDE walk-through required before merge

Sign-off

Document approved Feb 18, 2026. Next review: May 18, 2026.

Linked SOC 2 controls
CC3.1
CC9.2

We value your privacy. Cookies help us improve your experience. Learn more

Install CARTIE AI

Add to your home screen for quick access and offline support