Skip to content
Back to skills

Ashrafiucse Design Threat Review

ASecurity

Threat-models a design BEFORE implementation — spec/PRD/data-model/route sketch in, THREAT-MODEL.md out with actor×asset inventory, data flows across trust boundaries, STRIDE sweep mapped to the repo's detection skills, per-persona abuse cases, and an audit contract (the actor×surface matrix + acceptance criteria) the future security-audit must disposition. Use when the user shares a design doc, spec, PRD, or architecture, or asks to threat-model a system before or during early build — before...

  • 78 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 23, 2026
securityrustawsgitsecurity

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 23, 2026

npx -y skills add jiayaoqijia/cryptoskill --skill ashrafiucse-design-threat-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Ashrafiucse Design Threat Review?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Ashrafiucse Design Threat Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jiayaoqijia-ashrafiucse-design-threat-review/badge)](https://www.skillsdirectory.com/skills/jiayaoqijia-ashrafiucse-design-threat-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: design-threat-review
description: Threat-models a design BEFORE implementation — spec/PRD/data-model/route sketch in, THREAT-MODEL.md out with actor×asset inventory, data flows across trust boundaries, STRIDE sweep mapped to the repo's detection skills, per-persona abuse cases, and an audit contract (the actor×surface matrix + acceptance criteria) the future security-audit must disposition. Use when the user shares a design doc, spec, PRD, or architecture, or asks to threat-model a system before or during early build — before the code exists to audit.
license: MIT
---

# Design Threat Review

Security decisions are cheapest before code exists. This skill runs at design
time and produces the ONE artifact that `../security-audit/SKILL.md` Phase 0/2
consumes at audit time — a shared actor×surface matrix plus acceptance
criteria. Design → implementation → audit: one artifact, no seams.

## Ground rules

- Input is prose/diagrams as readily as code — absence of code is the point.
- Output is ONE file: `THREAT-MODEL.md` in the project root (the only file you create).
- Every threat gets a code-phase detector (sibling skill) AND an acceptance
  criterion. A threat with no detector becomes a design-protected control —
  never leave a threat with neither.

## Step 0 — Gather inputs

Read whatever exists: spec/PRD, ERD/data model, route sketches, integration
list, personas. If thin, ask or record assumptions:

- Which account types/roles exist? Who grants them?
- What does each role SUBMIT that another role OPENS? (moderation surfaces)
- Where does money/entitlement change hands? What artifact marks "paid"?
- What PII/secrets exist, and where do they flow — including logs, emails,
  support tools, third parties?
- What calls INTO the system (webhooks, SSO, imports, postbacks)?

## Step 1 — Assets & actors

- **ASSETS**: content/IP, money & entitlements, PII, credentials/secrets,
  admin power, availability.
- **ACTORS**: anonymous, authenticated user, staff/moderator,
  admin/tenant-admin, service/webhook caller, third-party integration.
- Build the actor×asset power matrix: each cell = the actor's legitimate
  power over that asset. Illegitimate power is exactly what Step 3/4 hunt.

## Step 2 — Data flows & trust boundaries

Sketch the flows (e.g. student submits review → stored → pending queue →
staff opens detail view → approve → public page). Mark EVERY trust-boundary
crossing: browser↔app, app↔db, app↔third-party, queue/worker, email render,
admin origin. Each crossing becomes a coverage-matrix cell. Content that
crosses a boundary UNPURIFIED and is opened by a HIGHER-privilege actor is
the highest-priority cell class (see `../laravel-security/SKILL.md` Step 4
privilege-direction table and `../course-platform-security/SKILL.md` §6.5).

## Step 3 — Threat sweep (STRIDE → repo detection skills)

For each flow element, sweep STRIDE; tag each credible threat with the
sibling skill that must catch it in code:

| STRIDE | Ask at each boundary | Detector skill |
|---|---|---|
| Spoofing | can a weaker actor pose as a stronger one at this boundary? | `../auth-review/SKILL.md` |
| Tampering | does content cross unpurified and get rendered? (stored→rendered) | `../injection-flaws/SKILL.md` + framework skill (e.g. laravel Step 4) |
| Repudiation | do money/state transitions leave tamper-evident traces? | `../flow-security/SKILL.md` |
| Info disclosure | does a boundary leak gated/PII data (catalog, preview, logs)? | `../data-exposure/SKILL.md`, `../course-platform-security/SKILL.md` |
| DoS | can one cheap request cause expensive work? | `../config-hardening/SKILL.md`, `../graphql-security/SKILL.md` |
| Elevation | does unprivileged input reach privileged surfaces? | `../auth-review/SKILL.md` + course skill §6.5 |

Domain lenses: course/e-learning → the course skill's three personas;
payments/subscriptions → flow-security state machines (what fulfills an
entitlement, what can replay).

## Step 4 — Abuse cases per persona

For each actor, write the attacker version: what do they WANT (free content,
another user's data, a staff session, a refund) and which cell do they
abuse? Defaults that must not be argued away:

- Unprivileged→privileged content flows (moderation) default to
  **severity-if-missed: Critical** — the approval workflow itself is the
  delivery mechanism (MISSES.md 2026-09-23: student review → staff detail
  view → admin ATO).
- Preview/free-tier flows default to Critical-if-full-content.

## Step 5 — Write THREAT-MODEL.md (the audit contract)

1. Actor×asset power matrix (Step 1) and flows+boundaries (Step 2).
2. Threat list — one section per threat, same shape as security-audit Phase 3
   findings so the scorer and future audits parse both the same way
   (`T-NNN` ids; the spec anchor is the citable `file:line` evidence):

   ```markdown
   ### T-01: <threat title> — <severity-if-missed>
   - **Actor → Asset:** student → admin power
   - **Surface:** moderation detail view
   - **Spec anchor:** spec.md:17-19
   - **Detector skill:** ../laravel-security/SKILL.md Step 4 (privilege direction) + ../course-platform-security/SKILL.md §6.5
   - **Acceptance criterion:** <the control implementation MUST show, stated as a checkable fact>
   ```

   The acceptance criterion is checkable — e.g. "review body passes through
   e() before any formatting in EVERY staff view — list AND detail — or is
   stored purified" — never "input is handled safely".
3. The pre-seeded actor×surface coverage matrix, all cells ⬜ — the exact
   artifact `../security-audit/SKILL.md` Phase 0 loads and Phase 2 (gate v2)
   forces to disposition.
4. Handoff notes: acceptance criteria are the implementation's security
   requirements; the first audit reads THREAT-MODEL.md, runs the detector
   skills, and disposition-checks every threat row and every matrix cell.

## Reporting

End with a 3-line verbal summary: highest severity-if-missed threat, the
single acceptance criterion most likely to be skipped in implementation,
and the detector skill that will catch it later if it is.

Files in this skill

  • LICENSE1 KB
  • SKILL.md6 KB
  • SOURCE.md377 B
  • TRUST.auto.yaml2.2 KB
  • references/patterns.md1.9 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…