Client-Side Role Bypass + Missing Server RBAC
Plataforma de ranking de hackers donde el rol del usuario se controla desde el cliente. Modificando la respuesta del servidor con Burp Suite (Match & Replace) se puede escalar a admin y cambiar la contrasena del super-hacker
Learn to find this bug
A real HackerOne hack, reproduced for you to practice.
Create your account and practice real bugs that got paid. Download the environment, find it and learn the exact technique — your path to your first bounty.
hunters training
labs from real hacks
completions
paid out for these bugs
Access to all labs · no commitment · cancel anytime
Hackers who solved it· 8
Objectives
Achievement you'll earn
Solve this lab to unlock this shareable achievement
Client-Side Role Bypass + Missing Server RBAC
Community writeups
Despliegue
# Opcion 1: autodeploy
./autodeploy.sh
# Opcion 2: manual
docker compose up --build
# Acceder
http://localhost:1700
Compatible con macOS, Linux y Windows (Docker Desktop / WSL).
Para parar:
./autodeploy.sh destroy
# o: docker compose down -v
Contenido del Lab
La aplicacion
CyberRank es una plataforma de ranking de hackers con leaderboard, panel de administracion y un super-hacker panel secreto.
La vulnerabilidad
El servidor envia role: user en las respuestas de autenticacion y el frontend muestra/oculta secciones basandose en ese valor. Sin embargo, los endpoints de admin (/api/admin/*) no verifican el rol del usuario en el servidor, confiando unicamente en el cliente.
Cadena de ataque
1. Registrarse → role: user
2. Burp → Match & Replace: role.*user → role.*admin
3. Refrescar → Panel admin visible
4. GET /api/admin/users → Lista usuarios (funciona sin ser admin!)
5. Cambiar contrasena de thebesthacker
6. Login como thebesthacker → Flag
Solucion interactiva
Accede a /writeup dentro de la aplicacion para una guia paso a paso con botones interactivos.
Remediacion
- Validar roles en el SERVIDOR, nunca confiar en el cliente
- Implementar middleware de autorizacion en cada endpoint admin
- No exponer el rol en las respuestas del API si no es necesario
- Principio de menor privilegio en cada endpoint