Trust portal

Sample report.

Every engagement ends with two documents and a call. Here are both, for a fictional company, with one finding written out in full. All names, hosts and data are invented.

Sample, public

Penetration test report

Sample Company Pvt Ltd

Report ID
DXCL-RPT-2026-SAMPLE
Version
1.0
Testing window
14 to 25 September 2026
Report date
28 September 2026
Prepared by
DrishtiX Cyber Labs testing team
Certificate
DCL-DEM0-2026-0001

1. Managerial summary

Overall risk: moderate. The web app and API are well built in most places, but one access control flaw let any logged-in customer read other customers’ invoices. That issue alone could have exposed personal and commercial data for every customer.

Two high-severity issues were fixed within a week of the report, and both fixes held when we checked them on 3 October 2026. The remaining medium and low items are scheduled in the team’s normal work.

Fix first

  1. Check ownership on every object the API returns (finding H-01).
  2. Limit login attempts and add a second factor for admin users (H-02).
  3. Stop returning stack traces from the API in production (M-02).
  • Critical0
  • High2
  • Medium3
  • Low2
  • Informational3

2. Scope and method

In scope
Web app at app.example.com and REST API at api.example.com, including two customer roles and the admin role.
Out of scope
The third-party payment provider, denial-of-service testing and social engineering.
Environment
Staging, with production-like data supplied by the client.
Approach
Automated attacks with best-of-market tools, then manual testing of every page and endpoint in scope.
Standards
OWASP Web Security Testing Guide, OWASP ASVS and the OWASP API Security Top 10.

3. Findings

All findings with severity and status after the fix check
IDFindingSeverityCVSS 3.1After fix check
H-01Broken object level authorisation on the invoices APIHigh6.5Fixed and verified
H-02No limit on login attempts for admin accountsHigh7.5Fixed and verified
M-01Session tokens stay valid after password changeMedium5.4Open, scheduled
M-02Stack traces returned by the API in production modeMedium5.3Fixed and verified
M-03File upload accepts SVG files with scriptsMedium5.4Open, scheduled
L-01Software versions shown in response headersLow3.7Accepted risk
L-02Password reset links valid for 72 hoursLow3.1Open, scheduled
I-01Content Security Policy could be stricterInformationalNoneOpen
I-02Cookies missing the SameSite attributeInformationalNoneFixed and verified
I-03Unused API version still reachableInformationalNoneOpen

Finding H-01

Broken object level authorisation on the invoices API

Severity
High
CVSS 3.1
6.5, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Endpoint
GET https://api.example.com/v1/invoices/{id}
References
OWASP API Security Top 10, API1 Broken Object Level Authorization; CWE-639

Summary

The API returns any invoice whose ID it is given, as long as the request carries a valid session. It does not check that the invoice belongs to the account making the request. Invoice IDs are sequential, so they are easy to guess.

Evidence

Logged in as customer A, we requested an invoice that belongs to customer B. Tokens are masked.

GET /v1/invoices/10482 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOi...[customer A, masked]

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

{"id":10482,"account":"customer-b","name":"[redacted]",
 "billing_address":"[redacted]","gstin":"[redacted]","total":48200}

Impact

Any logged-in customer could read every other customer’s invoices, including names, addresses and GST numbers. That is personal and commercial data, and its exposure would be a reportable breach under India’s DPDP Act.

Why we rate it High

The CVSS base score is 6.5, which CVSS calls Medium. We raise it to High because the data covers every customer, the IDs are guessable and exploiting it needs nothing more than a free account. The report always explains an adjustment like this.

Fix

  1. Check, on the server, that the requested invoice belongs to the account in the session, on every object lookup.
  2. Take the account ID from the session, never from the request.
  3. Add an automated test that requests another account’s invoice and expects a 404.

Fix check

Fixed and verified on 3 October 2026. The same request now returns 404 Not Found for invoices outside the caller’s account.

What happens after the report

  1. Day of report

    Both reports arrive by email and the certificate is issued.

  2. Walkthrough

    The testers take your developers through every finding live.

  3. Fixing

    We answer your developers’ questions while they fix.

  4. Fix check

    We re-test what you fixed and record it on the certificate.

This sample was written to show the format. Sample Company Pvt Ltd, example.com and all data on this page are fictional.

Tell us what you’re shipping.

A fundraise, an enterprise deal, an AI launch. Send a line about your product and we come back with a fixed-price scope within 48 hours.