Pentest report example
How the threat-model findings materialize as pentest findings.
Output of a 2-day threat modeling workshop using STRIDE. The deliverable: data-flow diagram, attack paths, prioritized mitigations mapped to specific engineering sprints.
Fictional - representative
Cloudwrit’s production SaaS: marketing site, authenticated app, public API, background workers, object storage, primary Postgres, analytics pipeline, third-party integrations (Stripe, SendGrid, OpenAI). AWS-hosted, single-region (us-east-1), two availability zones.
Solid: synchronous. Dashed: webhooks.
| ID | Category | Threat | Target | Severity | Mitigation |
|---|---|---|---|---|---|
| T-01 | Spoofing | Session token theft via XSS in rich-text editor | User session | H | CSP tightening, HttpOnly cookies, output encoding audit |
| T-02 | Tampering | Tenant-ID forgery in API | Documents | C | Server-side tenant resolution (see F-01) |
| T-03 | Repudiation | Document edits with no audit log | Postgres | M | Append-only audit_log table; ship in Q2 |
| T-04 | Information disclosure | S3 presigned URL leaks | S3 | H | 24-hour max TTL on all presigned URLs (see F-06) |
| T-05 | Information disclosure | Prompt injection exfils workspace docs | AI summary | H | Sandbox LLM call; input isolation; output filter (see F-03) |
| T-06 | Denial of service | Unbounded AI summary API calls drain budget | OpenAI / Anthropic | M | Per-user and per-workspace quota; alert at 80 percent |
| T-07 | Elevation of privilege | Admin panel compromise yields all tenants | Admin | H | Mandatory MFA + IP allowlist (see F-05) |
| T-08 | Elevation of privilege | CI credential leak compromises AWS | AWS | C | OIDC federation, least-privilege policy (see F-02) |
| T-09 | Tampering | Webhook forgery (Stripe, SendGrid) | App | M | Verify all webhook signatures; allowlist source IPs where possible |
Path A: Attacker creates a paid Cloudwrit account ($49). Exploits T-02 (tenant forgery) against arbitrary tenant. Exfiltrates documents. No credentials needed beyond their own account. Cost to attacker: $49 and 2 hours. Impact: full tenant data leak.
Path B: Attacker compromises a developer’s laptop (phishing). Obtains GitHub session or AWS keys from local env. Uses T-08 (CI credentials or laptop-held AWS access) to reach prod AWS. From there, reads any bucket. Cost to attacker: phishing success. Impact: full AWS account compromise.
Path C: Attacker shares a malicious document via Cloudwrit sharing feature. Target user triggers AI summary. T-05 (prompt injection) exfiltrates other documents into the summary output, which attacker can read via the same share. Cost to attacker: one shared document. Impact: limited to target user’s workspace, but zero-click from target’s perspective.
The workshop identified two threats we deliberately chose not to mitigate this cycle:
Threat model is a living document. Next review: 2026-04-22 (quarterly). Trigger additional reviews on: new service category (e.g., we launch an API for third parties), change in customer tier (e.g., first enterprise customer), any Severity-H finding on a pentest. Owner: CTO. Facilitator: NexcurAI on retainer.
How the threat-model findings materialize as pentest findings.
The framework this workshop sits inside.
Threat-modeling workshops, pentests, incident response.