Background
During a private bug bounty programme engagement on a major cloud-hosted SaaS platform, we identified what appeared to be a blind SSRF in a document import feature. Individually it earned a medium severity. What turned it into a $25,000 critical was discovering the internal API endpoint it reached was vulnerable to IDOR.
Disclosure: Coordinated disclosure completed. Vendor has patched. Programme details anonymised per NDA.
Discovery
Phase 1 — Finding the SSRF
The application offered a “Import from URL” feature for importing documents. We tested with a Burp Collaborator URL:
| |
Collaborator received a DNS lookup and HTTP GET — confirming server-side request forgery.
Phase 2 — Probing Internal Services
We pivoted to enumerate internal services via common RFC 1918 ranges and cloud metadata endpoints:
| |
The internal service on port 8080 responded. We began mapping its API:
| |
The IDOR
http://localhost:8080/api/internal/files/{fileId} returned file metadata:
| |
The fileId parameter was a short, non-random alphanumeric string. We enumerated adjacent IDs:
| |
Within minutes we were reading file metadata belonging to completely different tenants — confirming full horizontal privilege escalation.
Impact Assessment
| Capability | Impact |
|---|---|
| Read file names & metadata of any tenant | High — information disclosure |
| Retrieve pre-signed S3 download URLs | Critical — full file content access |
| Enumerate all tenant file IDs | High — no rate limiting |
| No authentication on internal API | Critical — auth bypass |
Root Cause
| |
The internal API assumed that anything reaching it had already been authenticated at the perimeter. The SSRF allowed bypassing that assumption entirely.
Remediation
- SSRF: Validate and allowlist URL schemes and hosts. Block RFC 1918 ranges and cloud metadata IPs.
- IDOR: Enforce tenant-scoped authorisation on internal API endpoints.
- File IDs: Use UUIDs (v4) — not sequential/enumerable IDs.
- Network: Internal services should still require service-to-service authentication.
