~/write-ups/api-idor-lab

API Lab: IDOR en recurso privado

Analisis de un fallo de autorizacion horizontal en una API REST de laboratorio.

target:: API Lab EASY date:: 2026.07.02 apiidorweb

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