invoice = invoices.find(params.id)
return invoiceThe lookup trusts a client-controlled identifier after confirming only that the caller is logged in.
This sample penetration testing report uses fictional systems to demonstrate the Balhence reporting format. Each finding explains impact, prerequisites, reproduction steps, evidence, severity reasoning, and a practical fix. It is a synthetic application example for evaluating report quality, not a client report or a compliance certificate.
Choose the summary, technical evidence, suggested fix, or illustrative re-test. Each view answers a different question.
A standard user in one controlled tenant can retrieve an invoice belonging to another controlled tenant by changing an object identifier. The server confirms authentication but does not enforce object ownership.
GET /api/v1/invoices/{id}GET /api/v1/invoices/inv_test_b HTTP/1.1
Host: app.example.test
Authorization: Bearer <tenant_a_test_session>
Accept: application/json
{
"id": "inv_test_b",
"tenant_id": "ten_test_b",
"status": "paid",
"total": 42000
}
user.a@tenant-a.example.test.inv_test_b, owned by controlled Tenant B.invoice = invoices.find(params.id)
return invoiceThe lookup trusts a client-controlled identifier after confirming only that the caller is logged in.
invoice = currentTenant.invoices.find(params.id)
authorize(user, "read", invoice)
return invoiceResolve the object inside the authorized tenant boundary and enforce permission at the data-access layer.
Tenant A session retrieved controlled Tenant B invoice.
Object lookup constrained to the authenticated tenant.
Original request and adjacent controlled variants denied.
| Test | Expected | Observed | Status |
|---|---|---|---|
| Original cross-tenant read | Denied | 404 | Fixed |
| Same-tenant read | Allowed | 200 | Pass |
| Cross-tenant export | Denied | 404 | Fixed |
| Unrelated billing routes | Out of re-test scope | Not tested | Limited |
The PDF includes the test scope, methods, findings, supporting evidence, and terms for re-testing fixes.
Tell us what needs testing and who will read the results. We'll agree on coverage, the handover, and any re-test before proposing the work.
The sample illustrates the format. Coverage, framework mapping, and re-test terms are agreed for your actual systems; this fictional application example is not an AI or compliance assessment.
What a good pentest report includes | Tell us about your project