Purpose
Produce a structured threat model (assets, trust boundaries, STRIDE abuse cases, prioritized threats) that security-auditor and delivery-planner can consume.
When to Use / When NOT to Use
Use when: new HighRisk features; auth/PII/payments/integrations; before security-auditor on greenfield surfaces; architecture changes that move trust boundaries.
Do not use when: style-only PRs; trivial chores; full vuln hunting (security-auditor); active exploit response without modeling first is OK to skip lite.
Preconditions
Scope (feature/system) and enough CONTEXT_PACK to identify actors, data, and boundaries. If missing, ask before inventing assets.
Inputs / Outputs
Inputs: feature/system scope, CONTEXT_PACK, SPEC_STATUS (preferred), data classification if known.
Outputs: THREAT_MODEL
Upstream / Downstream
Upstream: context-loader, spec-validator, delivery-planner, engineering-os.
Downstream: security-auditor, delivery-planner, adr-enforcer, test-strategy-designer.
Core Principles
- Assets and trust boundaries before checklists.
- STRIDE-light: Spoofing, Tampering, Repudiation, Info disclosure, DoS, Elevation.
- Threats need actor + asset + abuse path.
- Prioritize by Likelihood × Impact; mark assumptions.
- Feed security-auditor — do not duplicate deep code audit.
- Redact secrets; never invent CVEs.
- Unknown boundaries → ProceedWithConditions, not fake completeness.
Process
Lite
Single feature / small API: list assets, 2–4 trust boundaries, top STRIDE threats, hand off.
Full
- Actors — users, admins, services, attackers, insiders.
- Assets — data, secrets, sessions, money, admin actions, reputation.
- Diagram (textual) — components and trust boundaries.
- STRIDE pass per boundary/asset.
- Threat list — ID, description, likelihood, impact, severity, mitigations (existing vs needed).
- Out of scope — explicitly list.
- Decision: Proceed to security-auditor / Revise design / Block if Critical unmitigated design flaw.
Evidence Requirements
Cite real modules/APIs from CONTEXT_PACK. Label assumptions. No invented endpoints.
Stop Conditions / Failure Modes
| Condition | Action |
|---|---|
| Cannot identify assets/boundaries | Ask; Block if HighRisk |
| Design has Critical unmitigated threat | Block until design change or accepted risk |
| Scope is pure UI copy | Refuse; not applicable |
Severity + Confidence
Threat severity uses portfolio standard. Critical = auth bypass / mass data exposure / RCE-class design flaws.
Output Contract
## THREAT_MODEL
Scope: ...
Actors: ...
Assets: ...
Trust boundaries: ...
Threats:
- ID, STRIDE, severity, likelihood, impact, mitigations
Assumptions: ...
Decision: Proceed | ProceedWithConditions | Revise | Block
Handoffs
security-auditor (primary), adr-enforcer (security architecture), test-strategy-designer (negative cases), delivery-planner (mitigation tasks).
Never
- Never invent vulnerabilities in code you did not reason about.
- Never print secrets.
- Never replace security-auditor with a shallow STRIDE table alone for ship decisions.
- Never skip assets/boundaries and jump to OWASP laundry lists.