Penetration test report

Release 4.12.0

Commit
a91f3c2 · main
Pipeline
GitHub Actions #2183
Target
staging.acme.dev
Profile
web-app+api
Duration
6m 38s

Passed policy: block on high or above

Release allowed to deploy. Public certificate renewed until Nov 27, 2026.

View certificate

Critical

0

Same as last run

High

0

Same as last run

Medium

2

Same as last run

Low

3

-1 since last run

Fixed in this run

1

Retested and confirmed

Checks run

412

+6 since last run

Findings

A signed-in user in one organization received a 403 for another organization’s invoice, but the response time and error body differ from a non-existent ID, which reveals whether an invoice exists.

Request

GET /api/v2/invoices/inv_8f21c0
Host: staging.acme.dev
Authorization: Bearer ‹user B, org 2›

Response

HTTP/1.1 403 Forbidden
{"error":"invoice belongs to another org"}

(non-existent ID → 404 "not found")

How to fix

Return the same 404 for “not yours” and “doesn’t exist”, and scope the lookup by organization in the query rather than checking ownership afterwards.