Skip to content

Sample report · fictional organization · for illustration

Resources

Sample penetration test report

This is what you receive at the end of an engagement: a report written for both the board and the engineers who fix things. Every name, host, address and finding below belongs to Example Corp, a fictional organization. No client data is shown.

01 · SC-EXC-2026-09

Engagement overview

Prepared for

Example Corp (example.corp)

External and web application penetration test

Prepared by Shadow Corp · Report SC-EXC-2026-09

Sample
Engagement
External network + web application penetration test (grey box)
Testing period
7–18 September 2026Retest: 6–8 October 2026
Approach
Grey box: three low-privilege test accounts across two tenants; no source code access.
Classification
SAMPLE · fictional organization · for illustration
Scope summary
  • External perimeter: 203.0.113.0/27 and 198.51.100.40–198.51.100.47 (40 addresses).
  • Customer portal app.example.corp and REST API api.example.corp/v2.
  • Supporting services discovered in scope: monitor.example.corp, docs.example.corp.

Document control

  • v0.92026-09-22
    Draft for technical review
    Author
    Lead tester
  • v1.02026-09-25
    Final report issued
    Author
    Engagement lead
  • v1.12026-10-12
    Retest addendum: status of all findings updated
    Author
    Lead tester

02 · SC-EXC-2026-09

Executive summary

Example Corp asked us to find out whether an external attacker, or a paying customer acting in bad faith, could reach other customers’ billing data. Over two weeks we tested the internet-facing perimeter, the customer portal, and the API that powers it.

The answer was yes. Starting from an ordinary customer account, we could download any other customer’s invoices by changing a number in a request. Separately, a forgotten monitoring dashboard still used its default password, and a flaw in the PDF generator let us borrow the server’s own cloud credentials and read the invoice archive. None of these required advanced tooling; together they formed a direct path to the data the business most needs to protect.

Example Corp’s engineering team fixed the critical and high-risk issues within 11 days. Our retest in October confirmed those fixes hold. Two medium-risk issues remain open with an agreed plan, and the overall risk has dropped from high to medium.

Overall risk

HighMedium after retest

High (before remediation) · Medium (after retest)

Findings by severity

  • Critical1
  • High2
  • Medium3
  • Low2
  • Informational2

Total: 10 findings

Key business impact

  • Cross-tenant access to invoices, including names, addresses, tax IDs and partial payment details of every customer (about 4,800 tenants).
  • Read access to the cloud storage bucket holding seven years of archived invoices, via temporary credentials of the PDF rendering service.
  • Likely regulatory exposure under data protection law and contractual breach of customer confidentiality clauses.

Top three recommendations

  1. 01

    Enforce object ownership on every API call

    Check that the requested invoice belongs to the caller’s tenant in a shared authorization layer, not per endpoint, and add tests that prove it.

  2. 02

    Remove default credentials and close stray services

    Put internal dashboards behind SSO and the VPN, rotate any secret they exposed, and keep an owned inventory of every internet-facing host.

  3. 03

    Isolate the PDF renderer from the cloud control plane

    Require IMDSv2 with a hop limit of 1, block link-local egress, and narrow the renderer role to the one bucket prefix it writes.

03 · SC-EXC-2026-09

Attack narrative

How the findings chained together, from public reconnaissance to the invoice archive. Times are tester local time; each step maps to MITRE ATT&CK and to the evidence that supports it.

  1. Reconnaissance

    Mapped the attack surface from public sources

    Certificate transparency and passive DNS returned 23 hostnames under example.corp, including monitor.example.corp, which is not linked from any public page.

    Evidence: EV-R-01

  2. Reconnaissance

    Scanned the in-scope perimeter

    Service discovery across 40 in-scope addresses found 11 live hosts and 17 exposed services. Verbose API errors revealed framework versions and an internal hostname.

    Evidence: EV-R-02 · SC-2026-007

  3. Initial access

    Logged in to the monitoring dashboard with the vendor default

    The admin account on monitor.example.corp accepted the documented default password. Data source settings exposed a staging API key and the billing replica hostname.

    Evidence: EV-002-a · SC-2026-002

  4. Exploitation

    Read and modified another tenant’s invoices

    With tenant A’s ordinary account, changing the invoice ID in the export API returned tenant B’s invoice; a PATCH changed its billing e-mail.

    Evidence: EV-001-a, EV-001-b · SC-2026-001

  5. Credential access

    Turned the PDF renderer against the cloud metadata service

    A crafted logo URL made the renderer fetch its own instance role credentials and print them in the generated PDF.

    Evidence: EV-003-a · SC-2026-003

  6. Discovery

    Enumerated cloud storage with the borrowed role

    After re-triggering the render for fresh temporary credentials, we used them from the tester workstation to list the invoice archive bucket. No other buckets were accessible.

    Evidence: EV-003-b

  7. Objective

    Demonstrated access to the invoice archive

    Retrieved only the canary object agreed in the rules of engagement. Engagement contacts were notified the same morning under the critical-finding procedure.

    Evidence: EV-003-b

04 · SC-EXC-2026-09

Findings

10 findings in total. The five with the greatest impact are documented in full below; the full report details every finding the same way.

Findings register

  • SC-2026-001CriticalFixed · verified
    Broken object-level authorization in invoice export API
  • SC-2026-002HighFixed · verified
    Internet-exposed monitoring dashboard with default credentials
  • SC-2026-003HighFixed · verified
    Server-side request forgery in PDF renderer exposes cloud instance credentials
  • SC-2026-004MediumOpen
    No rate limiting or lockout on customer login
  • SC-2026-005MediumFixed · verified
    Reflected cross-site scripting in documentation search
  • SC-2026-006MediumOpen
    Session tokens remain valid after logout
  • SC-2026-007LowFixed · verified
    Verbose error messages disclose stack traces and internal hostnames
  • SC-2026-008LowRisk accepted
    Username enumeration through password reset responses
  • SC-2026-009InformationalClosed · no action
    Log4Shell (CVE-2021-44228) checks negative on all Java services
  • SC-2026-010InformationalOpen
    DMARC policy for example.corp set to monitoring only (p=none)
SC-2026-001CriticalCVSS 9.6Fixed · verified

Broken object-level authorization in invoice export API

Weakness
CWE-639 · Authorization Bypass Through User-Controlled Key
Affected assets
  • api.example.corp — GET /v2/invoices/{id}/export, PATCH /v2/invoices/{id}
  • app.example.corp (consumer of the API)
MITRE ATT&CK
  • T1190 · Exploit Public-Facing Application

Description

The invoice export endpoint accepts a sequential numeric invoice ID and returns the invoice as PDF or JSON. The API validates that the bearer token is genuine, but never checks that the invoice belongs to the tenant encoded in that token.

The same missing check applies to PATCH on the same resource, which lets the caller change the billing e-mail address of another tenant’s invoice. Because invoices are numbered sequentially, every record can be enumerated in minutes.

Impact

Any customer, including one on a free trial, can read every other customer’s invoices (names, postal addresses, tax IDs, line items, last four digits of payment cards) and redirect future invoice e-mails. Scope is changed because the flaw crosses the tenant boundary that the platform promises to enforce.

Steps to reproduce

Steps to reproduce

  1. 01Log in to app.example.corp as the test user of tenant A (tester-a@example.corp) and export one of tenant A’s own invoices; note its ID (e.g. 104 220).
  2. 02Replay the request with the invoice ID of a record belonging to tenant B (provided test tenant), keeping tenant A’s bearer token.
  3. 03Observe HTTP 200 with tenant B’s invoice in the response body.
  4. 04Send a PATCH with a new billing_email to the same tenant B invoice; observe HTTP 200 and the changed value when tenant B views the invoice.
  5. 05Stop. Per the rules of engagement, enumeration was limited to the two test tenants plus a count of reachable IDs (HEAD requests only).

Evidence

Evidence

Tenant A token retrieves tenant B invoiceEV-001-a
GET /v2/invoices/104221/export?format=json HTTP/2
Host: api.example.corp
Authorization: Bearer eyJhbGciOiJSUzI1NiIs…[REDACTED]
X-Tenant-Hint: tnt_0a91f   ← tenant A

HTTP/2 200 OK
Content-Type: application/json

{
  "invoice_id": 104221,
  "tenant_id": "tnt_7c3e2",      ← tenant B
  "bill_to": {
    "name": "[REDACTED]",
    "tax_id": "[REDACTED]",
    "address": "[REDACTED]"
  },
  "card_last4": "••••",
  "total": "1,240.00",
  "currency": "USD"
}
Cross-tenant write to billing e-mailEV-001-b
PATCH /v2/invoices/104221 HTTP/2
Host: api.example.corp
Authorization: Bearer eyJhbGciOiJSUzI1NiIs…[REDACTED]   ← tenant A
Content-Type: application/json

{"billing_email": "canary+sc001@example.corp"}

HTTP/2 200 OK
{"invoice_id": 104221, "billing_email": "canary+sc001@example.corp"}

Tokens, secrets and personal data redacted. All hosts and data belong to a fictional organization.

Remediation

  • Resolve the invoice through the caller’s tenant: query by (tenant_id from the verified token, invoice_id) and return 404 when no row matches, so existence is not disclosed.
  • Move the ownership check into the shared authorization middleware (policy-as-code) so new endpoints inherit it by default instead of re-implementing it.
  • Replace sequential IDs in public URLs with random identifiers (UUIDv4 or similar). This slows enumeration but is defence in depth, not the fix.
  • Add automated negative tests (tenant A token against tenant B objects) for every object-returning route in CI.
  • Review API access logs for the last 12 months for tokens that accessed invoices of more than one tenant.

Retest result

Retest result

Fixed and verified on 2026-10-06. Cross-tenant GET and PATCH now return 404; IDs in export URLs are UUIDs. Log review by Example Corp found no evidence of prior abuse.

References

References

SC-2026-002HighCVSS 8.2Fixed · verified

Internet-exposed monitoring dashboard with default credentials

Weakness
CWE-1392 · Use of Default Credentials
Affected assets
  • monitor.example.corp (203.0.113.14, TCP/443)
MITRE ATT&CK
  • T1596.003 · Search Open Technical Databases: Digital Certificates
  • T1078.001 · Valid Accounts: Default Accounts
  • T1552 · Unsecured Credentials

Description

Certificate transparency logs listed monitor.example.corp, which is not linked from any public page. The host serves an open-source metrics dashboard whose administrator account still used the vendor’s documented default password.

Once logged in, the dashboard exposed its data source configuration, including the internal hostname of the billing database replica and a read-only API key for a staging tenant.

Impact

An unauthenticated attacker gains full control of the dashboard, can read operational metrics about every customer (volumes, error rates, tenant names), and harvests credentials that shortcut later attacks. The dashboard could also be used to plant misleading alerts.

Steps to reproduce

Steps to reproduce

  1. 01Query certificate transparency logs for *.example.corp and resolve the results; note monitor.example.corp → 203.0.113.14.
  2. 02Browse to https://monitor.example.corp/login and authenticate as admin with the vendor default password.
  3. 03Open Configuration → Data sources and view the saved connection settings.

Evidence

Evidence

Successful login with vendor defaultEV-002-a
POST /login HTTP/1.1
Host: monitor.example.corp
Content-Type: application/json

{"user":"admin","password":"[VENDOR DEFAULT — REDACTED]"}

HTTP/1.1 200 OK
Set-Cookie: session=[REDACTED]; Path=/; HttpOnly; Secure
{"message":"Logged in","redirectUrl":"/"}

Tokens, secrets and personal data redacted. All hosts and data belong to a fictional organization.

Remediation

  • Take the dashboard off the internet: serve it only through the corporate VPN or an identity-aware proxy with SSO and MFA.
  • Disable the local admin account (or set a unique 24+ character secret stored in the password manager) and enforce SSO for all users.
  • Rotate every credential stored in data source settings, starting with the staging API key and the replica connection string.
  • Add a recurring external attack surface check that flags new hosts in certificate transparency logs and any login page that accepts known defaults.

Retest result

Retest result

Fixed and verified on 2026-10-06. monitor.example.corp no longer resolves publicly; the host answers only on the VPN behind SSO. Rotated keys from EV-002 are rejected.

References

References

SC-2026-003HighCVSS 7.7Fixed · verified

Server-side request forgery in PDF renderer exposes cloud instance credentials

Weakness
CWE-918 · Server-Side Request Forgery (SSRF)
Affected assets
  • api.example.corp — POST /v2/reports/render
  • pdf-renderer service (cloud compute instance, private subnet)
MITRE ATT&CK
  • T1190 · Exploit Public-Facing Application
  • T1552.005 · Cloud Instance Metadata API
  • T1078.004 · Valid Accounts: Cloud Accounts
  • T1530 · Data from Cloud Storage

Description

Custom report templates accept an HTML logo URL. The headless browser that renders the PDF fetches that URL server-side without restricting destinations, so it can be pointed at internal addresses.

The instance metadata service accepted unauthenticated (version 1) requests, so the rendered PDF contained the temporary credentials of the instance role. That role had read access to the entire invoice archive bucket, not only the prefix the renderer writes.

Impact

Any authenticated customer can obtain short-lived cloud credentials and read archived invoices for all tenants. Confidentiality impact crosses from the application into the cloud account, hence a changed scope.

Steps to reproduce

Steps to reproduce

  1. 01As tenant A, create a report template whose logo URL is http://169.254.169.254/latest/meta-data/iam/security-credentials/.
  2. 02Render the report; the PDF shows the role name pdf-renderer-prod.
  3. 03Repeat with the role name appended to the path; the PDF now shows AccessKeyId, SecretAccessKey and Token.
  4. 04From the tester workstation (198.51.100.23), use the credentials to list the invoice archive bucket and download the agreed canary object only.

Evidence

Evidence

Render request pointing at the metadata serviceEV-003-a
POST /v2/reports/render HTTP/2
Host: api.example.corp
Authorization: Bearer [REDACTED]
Content-Type: application/json

{"template":"custom","logo_url":"http://169.254.169.254/latest/meta-data/iam/security-credentials/pdf-renderer-prod"}

HTTP/2 200 OK
Content-Type: application/pdf
… text extracted from PDF:
"Code" : "Success",
"AccessKeyId" : "ASIA[REDACTED]",
"SecretAccessKey" : "[REDACTED]",
"Token" : "[REDACTED]",
"Expiration" : "2026-09-11T22:41:07Z"
Read of canary object with harvested credentialsEV-003-b
$ aws s3 ls s3://excorp-invoice-archive/ --summarize | tail -2
Total Objects: 1[REDACTED]
   Total Size: [REDACTED]
$ aws s3 cp s3://excorp-invoice-archive/_sc-canary/canary-2026.txt -
SC-2026 canary · placed by Example Corp for this engagement

Tokens, secrets and personal data redacted. All hosts and data belong to a fictional organization.

Remediation

  • Enforce IMDSv2 (session tokens) on every instance and set the response hop limit to 1 so containers cannot reach the metadata service.
  • Fetch remote assets only through an allow-list (customer-owned CDN domains) and resolve-then-validate the IP; deny link-local, loopback and RFC 1918 ranges, including after redirects.
  • Better still, make the renderer fetch nothing: upload logos once, store them, and render from local storage with network egress disabled.
  • Reduce the instance role to s3:PutObject on the renders/ prefix only, and alert on use of its credentials from outside the VPC.

Retest result

Retest result

Fixed and verified on 2026-10-07. IMDSv2 is enforced with hop limit 1; the renderer now has no outbound network access, and the role is limited to its own prefix.

References

References

SC-2026-004MediumCVSS 5.3Open

No rate limiting or lockout on customer login

Weakness
CWE-307 · Improper Restriction of Excessive Authentication Attempts
Affected assets
  • app.example.corp — POST /api/auth/login
MITRE ATT&CK
  • T1110.003 · Brute Force: Password Spraying
  • T1110.004 · Brute Force: Credential Stuffing

Description

The login endpoint accepted 2,000 consecutive failed attempts against the three test accounts from a single IP address in under four minutes, with no throttling, CAPTCHA, delay or account lockout. MFA is available but optional and enabled by about 9% of users.

Impact

Attackers can spray common passwords or replay leaked credential lists against the customer base at high speed. Each compromised account inherits that customer’s billing data and, until SC-2026-001 was fixed, a route to every other tenant.

Steps to reproduce

Steps to reproduce

  1. 01Send 2,000 POST requests to /api/auth/login for tester-c@example.corp with incorrect passwords from 198.51.100.23 (rate: ~9 requests/s).
  2. 02Observe HTTP 401 for every attempt, no 429 responses, and no lockout.
  3. 03Send the correct password; observe HTTP 200 and a valid session.

Evidence

Evidence

Attempt 2,000 of 2,000 still processed; correct password then acceptedEV-004-a
#1999  POST /api/auth/login  401  {"error":"invalid_credentials"}  112 ms
#2000  POST /api/auth/login  401  {"error":"invalid_credentials"}  109 ms
#2001  POST /api/auth/login  200  {"session":"[REDACTED]","mfa":false}
Responses: 401 × 2000 · 429 × 0 · lockouts: 0

Tokens, secrets and personal data redacted. All hosts and data belong to a fictional organization.

Remediation

  • Throttle by account and by source (for example 5 failures per account per 15 minutes, then exponential back-off) and return 429 with Retry-After.
  • Check new and changed passwords against known-breached password lists, as NIST SP 800-63B recommends.
  • Require MFA for administrator roles of each tenant and offer passkeys to everyone.
  • Alert the SOC on spikes of failed logins across many accounts from one ASN.

Retest result

Retest result

Open. Per-IP throttling is deployed (HTTP 429 after 30 requests/minute) but per-account limits are pending; spraying from distributed sources is still possible. Target date 2026-11-15.

References

References

SC-2026-007LowCVSS 3.7Fixed · verified

Verbose error messages disclose stack traces and internal hostnames

Weakness
CWE-209 · Generation of Error Message Containing Sensitive Information
Affected assets
  • api.example.corp (all /v2 routes)
  • docs.example.corp
MITRE ATT&CK
  • T1592.002 · Gather Victim Host Information: Software

Description

Malformed JSON bodies and unexpected parameter types produce unhandled exceptions whose full stack trace is returned to the client. The traces reveal framework and library versions, absolute file paths, and the internal hostname of the database replica.

Impact

No direct compromise, but the information reduces attacker effort: it confirmed the exact library versions and the internal hostname we later recognised in the dashboard data sources (SC-2026-002).

Steps to reproduce

Steps to reproduce

  1. 01Send POST /v2/reports/render with the body {"template": [] } (array where a string is expected).
  2. 02Observe HTTP 500 with a full stack trace in the response.

Evidence

Evidence

Unhandled exception returned to the clientEV-007-a
HTTP/2 500 Internal Server Error
Content-Type: application/json

{
  "error": "TypeError: template.trim is not a function",
  "stack": "at renderReport (/srv/app/[REDACTED]/render.js:88:31)\n at …",
  "db": "billing-replica-02.int.example.corp:5432",
  "version": "[REDACTED]"
}

Tokens, secrets and personal data redacted. All hosts and data belong to a fictional organization.

Remediation

  • Return a generic error body with a correlation ID (for example {"error":"internal_error","id":"…"}) and log the detail server-side only.
  • Run production with the framework’s debug and stack trace output disabled, and validate request bodies against a schema before they reach business logic.

Retest result

Retest result

Fixed and verified on 2026-10-08. Errors now return a generic body and a correlation ID; no stack traces observed across 120 malformed requests.

References

References

05 · SC-EXC-2026-09

Remediation roadmap

Agreed with Example Corp’s engineering leads in the read-out meeting. Priorities: P0 within 7 days, P1 within 30 days, P2 within 60 days, P3 in the normal hardening cycle.

  • SC-2026-001P0
    Tenant-scoped authorization layer and negative tests in CI
    Status
    Fixed · verified
    Owner
    API platform lead
    Effort
    M · 2 sprints
    Target
    2026-09-19
  • SC-2026-002P0
    Remove dashboard from internet, SSO + MFA, rotate exposed secrets
    Status
    Fixed · verified
    Owner
    Infrastructure / SRE
    Effort
    S · 2 days
    Target
    2026-09-15
  • SC-2026-003P0
    IMDSv2 + hop limit 1, no renderer egress, least-privilege role
    Status
    Fixed · verified
    Owner
    Cloud platform
    Effort
    S · 1 week
    Target
    2026-09-22
  • SC-2026-004P1
    Per-account throttling, breached-password checks, MFA for admins
    Status
    Open
    Owner
    Identity team
    Effort
    M · 3 weeks
    Target
    2026-11-15
  • SC-2026-005P1
    Output encoding and CSP on docs site
    Status
    Fixed · verified
    Owner
    Web team
    Effort
    S · 3 days
    Target
    2026-10-03
  • SC-2026-006P2
    Server-side session revocation on logout
    Status
    Open
    Owner
    Identity team
    Effort
    S · 1 week
    Target
    2026-11-30
  • SC-2026-007P3
    Generic error responses with correlation IDs
    Status
    Fixed · verified
    Owner
    API platform lead
    Effort
    XS · 1 day
    Target
    2026-10-03
  • SC-2026-008P3
    Uniform reset responses (accepted: monitored via SOC rule)
    Status
    Risk accepted
    Owner
    Product security
    Effort
    XS
    Target
    —
  • SC-2026-010P3
    Move DMARC to p=quarantine, then p=reject
    Status
    Open
    Owner
    IT / messaging
    Effort
    S · staged
    Target
    2026-12-15

SC-2026-009 (Log4Shell checks negative) needs no action and is not listed.

06 · SC-EXC-2026-09

Retest results

Retest window: 6–8 October 2026. All critical and high-risk findings were fixed and verified. Of 10 findings, 5 are fixed and verified, 1 (the Log4Shell check) was closed with no action needed, 3 remain open with an owner and a date, and 1 is risk-accepted by Example Corp.

Fixed · verified
5/10
Closed · no action
1/10
Open (planned)
3/10
Risk accepted
1/10
  • SC-2026-001Critical
    Fixed · verified

    Fixed and verified on 2026-10-06. Cross-tenant GET and PATCH now return 404; IDs in export URLs are UUIDs. Log review by Example Corp found no evidence of prior abuse.

  • SC-2026-002High
    Fixed · verified

    Fixed and verified on 2026-10-06. monitor.example.corp no longer resolves publicly; the host answers only on the VPN behind SSO. Rotated keys from EV-002 are rejected.

  • SC-2026-003High
    Fixed · verified

    Fixed and verified on 2026-10-07. IMDSv2 is enforced with hop limit 1; the renderer now has no outbound network access, and the role is limited to its own prefix.

  • SC-2026-004Medium
    Open

    Open. Per-IP throttling is deployed (HTTP 429 after 30 requests/minute) but per-account limits are pending; spraying from distributed sources is still possible. Target date 2026-11-15.

  • SC-2026-007Low
    Fixed · verified

    Fixed and verified on 2026-10-08. Errors now return a generic body and a correlation ID; no stack traces observed across 120 malformed requests.

07 · SC-EXC-2026-09

Appendix

A. Scope and rules of engagement

A. Scope and rules of engagement

  • Testing window: Monday to Friday, 08:00–20:00 (client local time). Testing source: 198.51.100.23 only, announced in advance.
  • In scope: the address ranges and hosts listed on the cover, plus hosts discovered under example.corp after written confirmation from the client contact.
  • Out of scope: denial-of-service, social engineering, physical access, third-party SaaS providers, and other tenants’ data beyond what is needed to prove a finding.
  • Data handling: proof of access limited to provided test tenants and a client-placed canary object. Any real personal data observed was redacted in evidence and not retained.
  • Critical findings reported by phone and encrypted e-mail to the engagement contact within 4 hours of confirmation.
  • Stop conditions: service degradation, discovery of a previous compromise, or any client request to pause.

B. Tools

B. Tools

Burp Suite Professional
Interception, manual web and API testing, request replay
nmap
Host and service discovery on the in-scope ranges
Certificate transparency and passive DNS sources
Hostname discovery without touching the target
AWS CLI
Validating impact of harvested cloud credentials (read-only)
Custom scripts
Tenant-boundary test harness, controlled login rate tests

Automated output is never reported on its own: every finding is confirmed manually before it enters the report.

C. Severity rating methodology

C. Severity rating methodology

Severity follows the CVSS v3.1 base score bands defined by FIRST. Where business context changes the real-world risk, we say so in the finding and keep the base score unchanged, so results stay comparable between reports. CVSS v4.0 vectors can be supplied on request.

  • CriticalCVSS 9.0–10.0
    Direct, low-effort compromise of sensitive data or systems across trust boundaries. Fix immediately.
  • HighCVSS 7.0–8.9
    Significant compromise likely with modest effort or preconditions. Fix within days.
  • MediumCVSS 4.0–6.9
    Real weakness that needs chaining, user interaction or specific conditions. Plan within the quarter.
  • LowCVSS 0.1–3.9
    Limited impact on its own; often helps an attacker with other issues. Address in normal hardening.
  • InformationalCVSS N/A
    Observation, good practice or confirmed negative test. No score.

Sample report · fictional organization · for illustration

Example Corp, example.corp and every host, person, date and dataset in this document are fictional. IP addresses come from the ranges reserved for documentation (RFC 5737). Framework, CWE, ATT&CK and CVE references are real and public.

Your report

Get a report like this for your systems.

Tell us what you want tested. We agree on scope and rules of engagement on a short call and send a written proposal within one business day.