文章总结: 本文分析了WordPress插件ChainedQuiz小于等于1.3.3版本的未授权IDOR漏洞。漏洞因使用可预测自增ID作Cookie且服务端缺权校验,致使攻击者无需登录即可篡改他人答题记录与成绩,严重威胁在线考试业务。修复建议包括使用不可预测令牌、更新操作前校验归属权以及及时升级官方补丁。 综合评分: 88 文章分类: 漏洞分析,WEB安全,漏洞POC,代码审计,安全开发
Chained Quiz ≤ 1.3.3 未授权 IDOR 漏洞技术分析
云梦DC
云梦安全
2025年12月26日 09:24 河南
2025 年 12 月,安全研究员 Karuppiah Sabari Kumar(0xsabre) 披露了 WordPress 插件 Chained Quiz 中的一处严重逻辑漏洞,并分配编号 CVE-2025-10493。
该漏洞属于未授权的不安全直接对象引用(IDOR),攻击者无需登录,即可通过篡改 Cookie,劫持并修改其他用户的答题记录与成绩。
一、漏洞基本信息
-
插件名称:Chained Quiz
-
影响版本:≤ 1.3.3(部分报告标注至 1.3.5)
-
漏洞类型:IDOR / Improper Authorization
-
攻击条件:未授权(Unauthenticated)
-
攻击入口:
admin-ajax.php -
CWE:
-
CWE-639:Authorization Bypass Through User-Controlled Key
-
CWE-285:Improper Authorization
二、漏洞本质一句话总结
插件使用“可预测的数据库 ID”作为用户身份凭证,并完全信任客户端 Cookie。
这是一个非常经典、但现实中极易出现的逻辑安全错误。
三、业务背景:Chained Quiz 如何记录答题?
在 Chained Quiz 中:
- 每一次用户答题
- 都会在数据库中生成一条记录
- 使用自增字段
completion_id标识本次答题结果
插件通过一个 Cookie 来“关联用户与答题记录”:
chained_completion_id<quiz_id>=<completion_id>
例如:
chained_completion_id1=2
📌 问题在于:
- 这个
completion_id是自增整数 - Cookie 由客户端完全控制
- 服务端未校验“这个答题记录是否属于当前用户”
四、漏洞复现流程(HTTP 级,可实测)
Step 1:正常用户完成一次答题
当用户完成 quiz 后,浏览器中会出现类似 Cookie:
chained_completion_id1=2
此值用于后续提交或更新答题状态。
Step 2:攻击者准备请求
攻击者:
- 不需要登录
- 不需要管理员权限
- 只需访问同一个 quiz
并拦截一次正常的答题提交请求(例如使用浏览器开发者工具)。
请求目标为:
POST /wp-admin/admin-ajax.php
Step 3:篡改 Cookie(关键)
攻击者将自己的 Cookie 修改为其他可能存在的 completion_id,例如:
chained_completion_id1=1
或:
chained_completion_id1=2
同时,还可以篡改请求参数中的:
answerpointsquestion_id
Step 4:发送请求并观察结果
服务器在处理请求时:
- 直接使用 Cookie 中的 completion_id
- 从数据库中取出对应记录
- 执行
UPDATE操作 - 完全不校验记录归属
📌 结果是:
他人的答题记录被覆盖、篡改或重写
五、为什么这是“未授权 IDOR”而不是普通逻辑 Bug?
这个漏洞满足 IDOR 的所有典型特征:
✅ 1️⃣ 对象标识符可预测
completion_id为自增整数- 可被枚举
✅ 2️⃣ 标识符完全由用户控制
- 存储在 Cookie 中
- 客户端可任意修改
✅ 3️⃣ 服务端缺乏鉴权校验
- 不校验用户身份
- 不校验 ownership
- 不校验 session 绑定关系
✅ 4️⃣ 攻击无需登录
- admin-ajax.php 前台可访问
- 默认配置即可触发
六、漏洞影响分析
在实际场景中,该漏洞可导致:
- 篡改他人答题内容
- 修改分数、成绩
- 污染排行榜
- 伪造通过记录
- 破坏证书、积分、评估系统可信度
⚠️ 如果 Chained Quiz 被用于:
- 在线考试
- 内部培训考核
- 教育平台评测
那么该漏洞属于业务完整性级别的高危漏洞。
七、从开发视角看:问题出在哪里?
❌ 错误设计 1:把数据库 ID 当“身份凭证”
数据库主键 ≠ 安全凭证 它必须永远假设是可猜的
❌ 错误设计 2:信任客户端 Cookie
Cookie 只是“存储介质”,不是“信任来源”。
❌ 错误设计 3:缺失最基本的授权校验
服务端至少应该校验:
- 当前用户是否存在
- completion_id 是否属于该用户
- 是否允许修改
八、修复与防御建议
对插件开发者:
- completion_id 不应直接暴露给客户端
- 使用不可预测的 token(UUID / HMAC)
- 每次 UPDATE 前校验 ownership
- 将用户 ID 与答题记录强绑定
对站点运维:
- 升级至官方修复版本(如已发布)
- 审计是否存在异常答题记录
- 谨慎在“考试/评测”场景使用未审计插件
九、一个通用安全结论
CVE-2025-10493 再次说明:
认证(Authentication)≠ 授权(Authorization) 有 Cookie ≠ 有权限
IDOR 往往不是技术难题, 而是**“少写了一行判断”**造成的系统级风险。
结语
Chained Quiz 的这个漏洞没有花哨技巧, 却能造成真实、直接、严重的业务破坏。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:云梦安全 云梦DC《Chained Quiz ≤ 1.3.3 未授权 IDOR 漏洞技术分析》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论