Un usuario autenticado podría consultar el pedido de otro cliente cambiando un ID en la barra de direcciones
Este endpoint busca un pedido directamente por el ID en la URL y lo devuelve sin verificar la identidad de quien lo solicita. Cualquier usuario con cuenta puede introducir el ID de otro cliente y acceder a su nombre, dirección y artículos comprados. Los IDs son secuenciales, por lo que no es necesario adivinarlos.
// app/api/orders/[id]/route.ts export async function GET(request, { params }) { const order = await db.order.findUnique({ where: { id: params.id }, }); return Response.json(order);}Tres líneas a cada lado de la coincidencia, ofuscando previamente cualquier dato que parezca un secreto.
Cómo solucionarlo
- Identifica en el servidor quién está realizando la petición a partir de la sesión, nunca de parámetros en la URL o en el cuerpo.
- Añade el identificador de usuario a la propia consulta a la base de datos, para que no devuelva registros si el pedido no le pertenece.
- Responde con un código 404 (No encontrado) en lugar de 403 (Prohibido), para no confirmar la existencia de registros de otros clientes.
- Vuelve a ejecutar el análisis para validar que el hallazgo se ha resuelto con evidencia técnica.
Detalle técnico
Vulnerabilidad de autorización a nivel de objeto (IDOR / BOLA). El controlador realiza una búsqueda por clave primaria con un identificador suministrado por el cliente sin predicado de propiedad.
Regla authz/idor-route-param, activada en un controlador de ruta que alcanza una llamada a datos con parámetro de URL sin restricción de inquilino o propietario en la consulta.