Broken Access Control
A mini course platform with hidden APIs, privilege escalation, IDOR, and a payment bypass.
Mission briefing
LearnHub is a course platform where students buy lessons and admins manage content. The SPA calls several JSON APIs and trusts some client-side state about payment. Map the surface as a normal student and see where role checks fall short.
Every task in this room is done. Your rank progress just moved forward.
Objectives
- Hit hidden admin APIs as a normal user
- Escalate your role to admin
- Bypass the client-side paid check
Task 1 Hidden Admin API Medium 10 pts
Scenario
LearnHub exposes JSON admin endpoints alongside student routes. You are logged in as an ordinary student with no elevated role. Discover and call hidden admin APIs to retrieve a sensitive key.
Your approach
- Log in as the demo student and browse dashboard network traffic.
- Fuzz or guess paths under the api admin namespace.
- Request admin keys or settings without an admin session.
- Copy the admin API key flag from the JSON response.
- Submit that flag.
Log in as user1/user123. Discover admin API paths and call them.
Open lab →Hint
Also try /labs/bac/api/admin/settings and /labs/bac/api/admin/users/all
Task 2 Privilege Escalation Medium 10 pts
Scenario
The student dashboard includes a form that updates your role label. The server applies whatever role value you POST without verifying eligibility. Promote yourself to admin and open the admin panel.
Your approach
- Locate the role update form or endpoint on the dashboard.
- POST role set to admin while authenticated as a student.
- Navigate to admin-only pages now visible in the UI.
- Read secret_flag from admin settings.
- Submit the admin panel flag.
Use the role update form on the dashboard to become admin.
Open lab →Hint
POST /labs/bac/update_role with role=admin
Task 3 Payment Bypass Medium 10 pts
Scenario
Paid course videos unlock only when an API reports paid status true. The front end trusts that JSON field from a user-specific endpoint. Watch premium content without completing checkout.
Your approach
- Open a locked course page and inspect paid-status API calls.
- Intercept the response and change paid from false to true.
- Reload the course page with the modified client state or repeat with a proxy.
- Confirm videos unlock and the lab shows a bypass flag.
- Submit the payment bypass flag.
The course page trusts paid status from the API response.
Open lab →Hint
Intercept /labs/bac/api/user/paid-status and change paid to true.