~/write-ups/api-idor-lab
API Lab: IDOR en recurso privado
Analisis de un fallo de autorizacion horizontal en una API REST de laboratorio.
Objetivo
El laboratorio simula una API de notas privadas. Dos usuarios pueden autenticarse, pero cada uno solo deberia leer sus propios recursos.
Mapeo de endpoints
Con Burp activo, la navegacion genera estas rutas:
GET /api/notes
GET /api/notes/1001
POST /api/notes
La lista devuelve IDs incrementales. Eso no es un bug por si solo, pero facilita probar autorizacion horizontal.
Prueba
Inicio sesion con user_a y guardo una nota. Luego inicio sesion con user_b y solicito el ID de user_a:
GET /api/notes/1001 HTTP/1.1
Host: lab.local
Cookie: session=user_b_session
La API responde 200 OK con el contenido de otro usuario.
Causa
El backend valida que la sesion exista, pero no comprueba que note.owner_id coincida con el usuario autenticado.
Fix esperado
La query o capa de servicio debe filtrar por recurso y propietario:
SELECT * FROM notes WHERE id = ? AND owner_id = ?;
Tambien conviene devolver el mismo tipo de respuesta para recurso inexistente y recurso ajeno, reduciendo enumeracion.
Resultado
Fallo confirmado: autorizacion horizontal ausente. Severidad dependiente del tipo de dato expuesto y facilidad de enumeracion.
- EOF -
<< back_to_index