CVE-2025-11443CVE-2025-11443 是 JhumanJ OpnForm 开源表单管理平台中存在的一项信息泄露漏洞。该漏洞影响 OpnForm 1.9.3 及之前版本,漏洞位于组件 Forgotten Password Handler(忘记密码处理器)中,具体涉及文件路径 /api/password/email。该漏洞允许远程攻击者通过分析密码重置接口对不同邮箱地址返回的响应差异,来判断系统中是否存在已注册的用户账户,从而实现用户枚举攻击。
该漏洞与 Laravel 框架已知问题 #46465 相关,属于密码重置流程中典型的信息泄露类型。Laravel 框架的密码重置机制在处理不存在的邮箱时与已存在邮箱时会返回不同的响应内容或状态码,攻击者可以利用这一差异进行用户枚举。虽然该漏洞本身不直接导致账户被入侵,但攻击者可以借此获取系统中有效的用户邮箱列表,为后续的钓鱼攻击、暴力破解或社会工程学攻击提供基础。
根据 CVSS 3.1 评分体系,该漏洞评分为 3.7 分,属于低危级别。攻击向量为网络(AV:N),攻击复杂度较高(AC:H),无需权限(PR:N),无需用户交互(UI:N),对机密性影响为低(C:L),对完整性和可用性无影响。该漏洞的利用代码已被公开披露,增加了被利用的风险。
该漏洞的核心原理在于 OpnForm 的密码重置 API 接口 /api/password/email 在处理用户提交的重置请求时,对于系统中已注册的邮箱地址和未注册的邮箱地址返回了不同的响应信息。
从技术层面分析,当用户通过 POST 请求向 /api/password/email 端点提交一个邮箱地址时,后端 Laravel 框架会检查该邮箱是否对应系统中的有效用户:
1. **当邮箱已注册时**:系统会触发密码重置邮件发送流程,并返回成功状态(如 200 OK 或包含成功消息的响应体)。
2. **当邮箱未注册时**:系统不会发送邮件,并可能返回不同的状态码或错误消息(如 404 Not Found 或包含"用户不存在"等信息的响应体)。
攻击者正是利用这种响应差异来枚举系统中的有效用户。具体利用方式如下:
- 攻击者准备一个候选邮箱列表(可通过其他途径获取或使用常见邮箱模式)
- 向 /api/password/email 端点逐个发送 POST 请求
- 分析每个请求的响应内容/状态码差异
- 根据差异判断哪些邮箱在系统中存在
- 将有效邮箱列表用于后续攻击活动
此漏洞与 Laravel issue #46465 描述的问题一致,是 Laravel 框架 PasswordBroker 中长期存在的设计缺陷。OpnForm 作为基于 Laravel 构建的应用,直接继承了此问题。由于 OpnForm 维护者认为该问题应由 Laravel 框架层面解决,因此未发布针对此漏洞的修复补丁。