solenya.info

Missing object-level authorization on a space-permissions API (candidate, blocked by test data)

2026-08-19 · critical Simulation platform (bounty cap 6,000 EUR)
Target redacted. This finding is not submitted to the program nor publicly disclosed yet, so hostnames are replaced with redacted.example and account identifiers are removed. The technical detail is kept intact.

Summary

GET /v1/permissions/spaces/{spaceId} authenticated the caller but did not check ownership of spaceId, so a tenant could enumerate another tenant's permission model. Confirming it needs two accounts and a foreign spaceId; the second test account could not be activated (mailbox gate), so the finding is documented, not proven.

Impact if confirmed

Cross-tenant read of permission structures — the map needed to chain into write operations and lateral movement between customer workspaces. Critical by estimate, not by proof.

Evidence

Remediation

Authorise per object: resolve spaceId to its owner and require membership on every request. Centralise it in a policy layer rather than in each handler.

Lesson

A candidate is not a finding. Without the second account this is a strong lead and nothing more — publishing it as "critical verified" would be exactly the false positive that gets a researcher ignored.