PortSwigger

Background

This lab uses GUIDs (globally unique identifiers) instead of sequential integers for user IDs. GUIDs are hard to guess — but if they are exposed anywhere (e.g., in blog post URLs, links, or public profiles), they offer no real protection. The vulnerability is still horizontal privilege escalation: any logged-in user can access another user’s account page if they know their GUID.



Step 1 - Log In and Explore

Log in with wiener:peter.
Your account page URL looks like:
/my-account?id=1e4c61464-4ee2-4e15-8d0e-9c75d76978be

That GUID is unpredictable, but the lab gives you another way to find carlos’s GUID.

Step 2 - Find Carlos’s GUID via a Blog Post

Navigate to the blog section. Find a post by carlos.
Click on carlos (the author name/link) - observe the URL in your browser or Burp:

/blogs?userId=48802904-9da5-444f-8397-e5bcfdd684d8

  • That userId parameter contains carlos’s GUID.

Step 3 - Access Carlos’s Account Page

Now visit your own account page but replace your GUID with carlos’s GUID:

GET /my-account?id=48802904-9da5-444f-8397-e5bcfdd684d8

The server responds with carlos’s account page, including his API key.

Step 4 - Extract the API Key

In the response, locate the API key:

Your API Key is: 4iALtvJSwMONO79DpZkiVLvqXG3exE5d
  • Copy this value.

Step 5 - Submit the API Key

Go back to the lab description page.
Enter the API key in the submission field (or on the “Submit solution” button if present).

Step 6 - Lab Solved

You’ll see: Congratulations, you solved the lab!



Why This Works

AssumptionReality
GUIDs are hard to guessTrue — but they are exposed in blog URLs
Hidden fields are safeThe API key is only hidden by obscurity
Unpredictable IDs prevent enumerationThey do, but off-platform disclosure breaks this

This is a classic case of security by obscurity failing because the “secret” ID is leaked elsewhere on the same application.