🔴 严重 | CVE-2026-64829 — Question2Answer through 1.8.8 contains a session i...
🔴 【深度分析】严重安全漏洞:CVE-2026-64829
CVSS 评分: 严重(9.1)🔴 状态: Deferred 发布时间: 2026-07-22
🔍 技术细节速览
| 字段 | 值 |
|---|---|
| CVE ID | CVE-2026-64829 |
| CVSS 评分 | 9.1 🔴 |
| 严重程度 | 严重 |
| CVSS 向量 | CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X |
| CWE 分类 | CWE-613 |
| 发布时间 | 2026-07-22 |
| 最后更新 | 2026-07-23 |
| 状态 | Deferred |
| 数据来源 | disclosure@vulncheck.com |
CVSS 评分:9.1(严重)
CVSS 向量:CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
危害等级: 严重(Critical)
漏洞概述
CVE-2026-64829 是一个存在于 Question2Answer(Q2A) 论坛系统中的会话失效绕过漏洞。攻击者只需获取一个之前有效的“记住我”(remember-me)持久 Cookie,在目标用户执行忘记密码重置操作后,仍能继续以该用户身份保持认证访问。该漏洞源于密码重置流程中未正确清除用于持久会话的 sessioncode 字段,导致已签发的持久 Cookie 不会因密码重置而失效,违背了会话管理的安全原则。
影响范围: Question2Answer 至 1.8.8 版本(含)。
严重性: 攻击者可在无用户交互、无需任何权限的情况下,通过网络远程利用此漏洞,实现未授权持久访问受保护的账户,造成机密性和完整性的严重损失。
受影响组件与版本
| 组件 | 受影响版本范围 |
|---|---|
| Question2Answer (Q2A) | ≤ 1.8.8 |
- 所有使用
qa-include/app/users-edit.php中qa_finish_reset_user()函数的版本均受影响。 - 官方尚未发布修复补丁(漏洞状态为
Deferred),但预计将在高于 1.8.8 的版本中修复。
漏洞原理分析
正常密码更改流程(已修复)
在 Q2A 的“账户设置”页面中,用户正常修改密码时,会调用 qa-include/pages/account.php 中的处理逻辑。该逻辑在密码更新后显式执行以下操作:
qa_db_user_set( $userid, 'sessioncode', '' ); // 清空持久会话标识
通过将 sessioncode 字段置空,所有与该账户关联的 qa_session 持久 Cookie 立即失效,后续无法再用于认证。这是一个标准的安全设计,确保密码变更后旧会话立刻作废。
忘记密码重置流程(存在缺陷)
当用户通过“忘记密码”功能重置密码时,处理函数 qa_finish_reset_user() 位于 qa-include/app/users-edit.php 中。该函数会执行密码更新的数据库操作,但遗漏了对 sessioncode 字段的清理。具体表现为:
- 密码被更新(哈希已变更)
- 但
sessioncode字段仍保留重置前的值 - 数据库中持久 Cookie 的验证逻辑仅依赖
sessioncode与 Cookie 中存储的随机令牌匹配 - 由于
sessioncode未被重置,攻击者伪造或窃取的遗留 Cookie 依然能通过验证
攻击向量分析
- 攻击者前置条件: 通过某种方式(如之前的会话劫持、跨站脚本、社工等)获取了目标用户的“记住我”持久 Cookie(该 Cookie 通常包含
qa_session标识符)。 - 触发条件: 目标用户主动发起了一次“忘记密码”重置操作(可能由攻击者诱导,也可自然发生)。
- 利用过程: 密码重置完成后,攻击者使用之前获得的 Cookie 向服务器发送请求,服务器在未检查
sessioncode时效性的情况下直接通过验证,攻击者以原用户身份登录系统。
关键变量:
该漏洞不需要攻击者发起任何 Web 交互(UI:N),也不需要在目标系统上拥有任何账户或权限(PR:N),唯一难点在于需要预先获得一个有效的持久 Cookie(AC:H —— 攻击复杂度高,因为窃取 Cookie 本身通常需要额外漏洞或信息泄露)。然而一旦获得 Cookie,利用过程极为简单。
影响评估
| 评估维度 | 具体分析 |
|---|---|
| 攻击复杂度 | 高(AC:H)。需要预先获取有效持久 Cookie,这通常需要利用其他漏洞或社会工程。 |
| 所需权限 | 无(PR:N)。攻击者无需任何身份验证。 |
| 用户交互 | 无(UI:N)。被攻击用户可能主动执行密码重置,但攻击者无需诱导其点击恶意链接。 |
| 攻击向量 | 网络(AV:N)。可远程利用,无需物理接触。 |
| 影响后果 | 机密性:高(VC:H)—— 攻击者可读取目标用户的私信、个人资料等敏感信息。 完整性:高(VI:H)—— 攻击者可修改用户资料、发表帖子、甚至提升权限(如果目标为管理员)。 可用性:无影响(VA:N)。 |
| 实际威胁 | 尽管攻击链较长,但一旦满足条件,攻击者可获得持续的未授权访问,直到目标用户手动清除所有会话或管理员介入删除 Cookie。 |
修复建议
官方修复(等待补丁)
开发团队应修改 qa-include/app/users-edit.php 中的 qa_finish_reset_user() 函数,在与密码更新相同的数据库事务中,添加如下清空逻辑:
qa_db_user_set( $userid, 'sessioncode', '' );
同时建议在用户成功重置密码后,强制使所有活跃会话失效(包括普通 qa_session 和持久 Cookie),例如通过更新数据库中的会话令牌计数器。
临时缓解措施
在官方补丁发布前,管理员可采取以下措施降低风险:
- 禁用“记住我”功能(如允许配置):在
qa-config.php中设置持久 Cookie 有效期为零(define('QA_COOKIE_TIMEOUT', 0);)或移除相关选项。 - 启用验证码或邮件确认步骤:使密码重置操作更难被自动化触发,增加攻击者利用的难度。
- 监控异常登录:审查系统日志中是否有通过同一用户 Cookie 在不同 IP 地址重复登录的行为。
- 手动清理旧 Cookie(临时方案):在密码重置事件发生后,管理员可编写脚本来清空受影响用户的
sessioncode字段(例如UPDATE qa_users SET sessioncode='' WHERE userid IN (...))。
最终用户建议
- 非必要情况下,避免在公共或不可信设备上勾选“记住我”选项。
- 如怀疑 Cookie 泄露,立即在所有设备上 退出登录(这会通过正常流程清除后端会话),然后修改密码。
参考资料
- CVE 详情页:https://nvd.nist.gov/vuln/detail/CVE-2026-64829
- CWE-613(不充分的会话失效):https://cwe.mitre.org/data/definitions/613.html
- Question2Answer 官方仓库:https://github.com/q2a/question2answer
- 漏洞披露来源:disclosure@vulncheck.com
- 关联文件分析:
- 受影响的函数:
qa-include/app/users-edit.php中的qa_finish_reset_user() - 正确实现参考:
qa-include/pages/account.php中的密码修改流程
- 受影响的函数:
免责声明: 本文基于 NVD 提供的公开信息撰写,部分技术细节依据正常逻辑推断。实际漏洞利用方式可能随官方补丁版本变化。请勿将本文信息用于非法目的。