Nuevos labs cada semana — Accede a todos desde 5€/mes

IDOR & Broken Access Control

Acceso a recursos de otros usuarios manipulando identificadores

Respuesta rápida

¿Qué es IDOR & Broken Access Control?

Un IDOR ocurre cuando la aplicación usa un identificador directo para acceder a recursos sin verificar permisos. Es la vulnerabilidad más reportada en bug bounty por su simplicidad e impacto directo.

Severidad

Alto

Frecuencia

Muy común

Payloads

10

Pasos

6

Severidad

Alto

Frecuencia

Muy común

Payloads

10

Broken Access Control (BAC) engloba cualquier fallo en la verificación de permisos. IDOR es el subtipo más común: manipular un ID en la URL, body o header para acceder a datos de otro usuario. Puede ser horizontal (mismo rol, otro usuario) o vertical (escalar a admin).

Acceso a datos de otros usuariosModificación de recursos ajenosEliminación de datos de otrosEscalación de privilegiosFiltración masiva de datos

Dónde buscar

IDs en URLs de API

/api/users/{id}/profile, /api/orders/{id} — cualquier endpoint con un identificador en la ruta.

IDs en el body JSON

POST/PUT requests con {"userId": "123"} o {"orderId": "456"} en el cuerpo.

Descargas de archivos

/download?file=invoice_123.pdf — cambia el número para acceder a facturas de otros.

Endpoints de eliminación

DELETE /api/posts/{id} — si puedes borrar recursos de otros, es critical.

UUIDs 'secretos'

Los UUIDs no son secretos — muchas apps los exponen en listas públicas, perfiles o URLs compartidas.

Metodología

1

Crear dos cuentas de prueba

Cuenta A (atacante) y Cuenta B (víctima). Necesitas ambas para confirmar el IDOR.

2

Realizar acción con Cuenta A

Captura el request con Burp/DevTools. Identifica el ID del recurso en URL, body o headers.

3

Sustituir el ID

Cambia el ID de Cuenta A por el de Cuenta B. Envía el request.

4

Verificar acceso

Si recibes datos de Cuenta B → IDOR confirmado. Compara las respuestas byte a byte.

5

Probar variaciones

Cambia HTTP method (GET→PUT→DELETE), prueba ID+1, ID-1, 0, arrays ["id"], cambio de tipo string↔number.

6

Escalar el impacto

IDOR en GET = información. IDOR en PUT = modificación. IDOR en DELETE = destrucción. Combina con otros bugs.

Caso real

IDOR en API de newsletter — Enumeración de suscriptores

$500+
1

Descubrimiento del endpoint

La UI muestra un botón 'Ver suscriptores' deshabilitado para usuarios normales, pero la API no tiene restricción.

2

Identificar el parámetro

El endpoint /api/newsletter/subscribers acepta un seriesUrn público (visible en la URL de la newsletter).

3

Consultar sin autorización

GET /api/newsletter/subscribers?urn={PUBLIC_URN} devuelve la lista completa de suscriptores.

4

Datos expuestos

Nombres completos, empresas, cargos, URLs de perfil de todos los suscriptores.

Lección: La UI puede ocultar un botón, pero si la API no valida permisos, el IDOR existe. Siempre prueba los endpoints directamente, ignorando restricciones de la interfaz.

Payloads

ID numérico +1

/api/v1/users/124/profile  (tu ID es 123)

UUID swap

/api/v1/orders/a1b2c3d4-... → /api/v1/orders/e5f6g7h8-...

ID en body

PUT /api/settings  {"userId": "OTRO_ID", "notifications": false}

ID como query param

GET /api/invoices?user_id=OTRO_ID

ID en header

X-User-Id: OTRO_ID

Payloads avanzados(requiere cuenta)

Cambio de HTTP method

GET /api/users/123 → PUT /api/users/123 → DELETE /api/users/123

Mass Assignment + IDOR

PUT /api/users/OTRO_ID  {"role": "admin", "email": "attacker@evil.com"}

Array wrapping bypass

{"id": ["OTRO_ID"]}  o  {"id": {"$eq": "OTRO_ID"}}

Encoding bypass

Base64(id), hex(id), URL-encode doble: %2531%2532%2533

Wildcard/glob

GET /api/users/*/profile  o  GET /api/users/../admin/settings

Contenido exclusivo

Crea tu cuenta gratis para acceder a payloads avanzados, scripts y técnicas de bypass

Crear cuenta gratis

Herramientas

Autorize (Burp Extension)

Compara automáticamente requests con y sin autorización para detectar IDORs.

Burp → Extender → Autorize

IDOR con ffuf

Fuzzing de IDs para descubrir recursos accesibles sin autorización.

ffuf -u 'https://target.com/api/users/FUZZ/profile' -w ids.txt -mc 200

Match & Replace (Burp)

Automatiza la sustitución de IDs en todos los requests para testing masivo.

Proxy → Options → Match & Replace → Reemplazar tu ID por otro

Tips

Los UUIDs no son secretos

Muchas apps exponen UUIDs en respuestas públicas: listas de usuarios, perfiles, URLs de share. No asumas que UUID = seguro.

Prueba siempre DELETE

Los IDORs en operaciones destructivas son más críticos y a menudo menos protegidos que los GET.

IDOR horizontal vs vertical

Horizontal: acceder a datos de otro user del mismo rol. Vertical: acceder a funciones de admin siendo user normal.

Encadena IDORs

IDOR en perfil (leak email) + IDOR en reset password = Account Takeover completo.

Practica IDOR & Broken Access Control con labs reales

Aplica estas técnicas en entornos seguros basados en reportes reales de bug bounty.