Revisión de código generado por IA: autorización entre clientes
Sigue un hallazgo ilustrativo de IDOR desde un endpoint autenticado hasta su consulta de datos, con una corrección acotada y pruebas de aislamiento.

Una revisión de código puede confirmar que un endpoint exige iniciar sesión y aun así pasar por alto quién tiene permiso para leer el resultado. En un producto que atiende a varias organizaciones, una sesión válida no concede acceso a los registros de otro cliente.
Este ejemplo desarrolla el hallazgo representativo de autorización de nuestra página de revisiones de código. Los nombres y el alcance son ilustrativos. No es el informe de un incidente de cliente ni evidencia de que este defecto sea exclusivo del código generado por IA.
El cambio parece pequeño
Una pantalla de proyecto incorpora la descarga de un registro de análisis. El controlador exige un usuario autenticado. El servicio busca el registro por su identificador y lo devuelve al navegador.
La pantalla ya comprueba la pertenencia al proyecto, por lo que la descarga parece heredar esa protección. Sin embargo, el nuevo endpoint puede invocarse directamente. Si acepta cualquier ID sin comprobar el acceso del usuario, la protección de la pantalla no cubre la descarga.
OWASP denomina referencia directa insegura a objetos, o IDOR, a esta clase de falta de autorización sobre un objeto. Usar identificadores difíciles de adivinar no reemplaza ese control.
Sigue los datos más allá del controlador
Recorre la operación completa: usuario autenticado, proyecto solicitado, consulta del registro y respuesta. Determina dónde se comprueba la pertenencia al proyecto y si el registro queda limitado a ese proyecto autorizado.
Una consulta ilustrativa como findOne({ id: recordId }) no expresa a qué proyecto tiene acceso el usuario. Agregar un ID de proyecto enviado por el navegador tampoco basta: el servidor debe establecer que el usuario tiene el permiso requerido en ese proyecto.
Después inspecciona las otras operaciones que usan esa consulta. El mismo registro puede tener rutas de modificación, eliminación y exportación. Una consulta compartida puede extender el defecto a varias operaciones; cada consecuencia alcanzable necesita evidencia antes de incorporarse al hallazgo.
Escribe un hallazgo comprobable
En este ejemplo, el informe identificaría:
- La ruta de descarga y la consulta que aceptan un registro fuera del proyecto autorizado.
- Una reproducción local con dos proyectos de prueba y un usuario que pertenece a uno solo.
- Los campos devueltos y cualquier modificación o eliminación confirmada en rutas relacionadas.
- El alcance inspeccionado y las operaciones que no se evaluaron.
La severidad depende del impacto demostrado y de los datos expuestos. No corresponde atribuir un número elevado de endpoints, un impacto sobre clientes o una calificación crítica sin evidencia que lo sostenga.
Corrige la regla de propiedad donde se decide el acceso
Resuelve los permisos del usuario en el servidor y limita la operación al proyecto autorizado. Comprueba también el permiso requerido para la acción: alguien con acceso de lectura puede descargar sin tener derecho a eliminar.
Mantén la regla consistente en las entradas afectadas. Si un trabajo en segundo plano realiza la exportación, revisa qué contexto autorizado recibe; no supongas que el control HTTP cubre automáticamente todas las operaciones posteriores.
Usa datos locales desechables para comprobar que la descarga permitida sigue funcionando, que se rechaza un registro de otro proyecto y que una modificación denegada deja intacto su destino. Estas pruebas respaldan la corrección concreta; no demuestran que toda la aplicación haya sido auditada.
Entrega una corrección acotada
Una entrega útil conecta el defecto con la regla de acceso corregida y su evidencia. Cuando se incluye la implementación, el pull request debe permitir evaluar esa corrección sin mezclar cambios arquitectónicos ajenos.
Ese es el nivel de investigación que buscamos delimitar en nuestro servicio de revisión y auditoría de código con IA. Para ver dónde encaja la revisión durante la entrega, explora el flujo de agentes del roadmap al pull request.