CVE-2025-59943phpMyFAQ是一款开源的FAQ(常见问题解答)Web应用程序,基于PHP和MySQL构建,为企业和组织提供知识管理和自助支持平台。CVE-2025-59943是phpMyFAQ中存在的一个高危安全漏洞,CVSS评分为8.1分。该漏洞源于用户注册流程中未对邮箱地址进行唯一性校验,导致攻击者可以使用相同的邮箱地址创建多个不同的账户。
由于邮箱地址在Web应用中通常被用作密码重置、通知发送和管理操作的身份标识符,这一缺陷将引发严重的账户歧义问题。在特定配置环境下,攻击者可以利用该漏洞实施权限提升或账户接管攻击。例如,攻击者可以通过注册与管理员相同邮箱的账户来干扰密码重置流程,或者利用邮箱唯一性缺失绕过基于邮箱的安全策略。该漏洞影响了phpMyFAQ 4.0-nightly-2025-10-03及以下所有版本,开发团队已在4.0.13版本中修复了此问题。该漏洞由GitHub安全顾问团队([email protected])发现并报告,于2025年10月3日正式披露。鉴于其网络可利用性且无需认证即可触发,属于高优先级修复的安全问题。
phpMyFAQ的用户注册模块在处理新用户注册请求时,仅对用户名进行了唯一性检查,但未对邮箱地址字段施加数据库级别的唯一约束(UNIQUE constraint)或应用层的重复检测逻辑。正常情况下,用户注册流程应包含以下步骤:
1. 用户通过注册页面提交用户名、邮箱和密码等注册信息。
2. 系统应验证邮箱格式的有效性,并检查该邮箱是否已存在于数据库中。
3. 若邮箱已存在,则拒绝注册并提示用户使用其他邮箱。
4. 若邮箱不存在,则将新用户信息插入数据库。
然而,在存在漏洞的版本中,第2步的邮箱唯一性检查被完全跳过或存在逻辑缺陷,导致系统允许任意数量的账户使用相同的邮箱地址进行注册。这一缺陷的根因在于数据库表结构中users表的email字段缺少UNIQUE索引,以及注册处理代码(如register.php或对应的控制器)中缺少重复邮箱检测逻辑。
攻击者利用此漏洞的方式如下:首先,攻击者正常访问phpMyFAQ的注册页面,提交包含目标邮箱地址的注册请求。由于系统未进行唯一性校验,注册请求将被成功处理并创建新账户。攻击者可以重复此过程,使用相同邮箱创建任意数量的账户。随后,攻击者可以利用这些重复账户干扰密码重置流程——当合法用户请求密码重置时,系统可能将重置链接发送给攻击者控制的账户,从而实现账户接管。在管理员邮箱被复制的情况下,攻击者甚至可能获得管理权限。