漏洞标题:Chained Quiz 1.3.5 - 通过Cookie的未授权不安全直接对象引用
日期:2025-12-25
漏洞作者:Karuppiah Sabari Kumar (0xsabre)
厂商主页:https://wordpress.org/plugins/chained-quiz/
软件链接:https://downloads.wordpress.org/plugin/chained-quiz.1.3.3.zip
版本:<= 1.3.3
测试环境:WordPress / Linux
CVE:CVE-2025-10493
漏洞类型
不安全直接对象引用 / 授权不当
漏洞描述
Chained Quiz插件使用可预测的、自动递增的数据库ID存储每次测验尝试,并将该值直接暴露在客户端Cookie中,Cookie名称为:
`chained_completion_id<quiz_id>`
当通过admin-ajax.php提交或重新提交测验答案时,服务器仅基于此Cookie值更新测验尝试记录,而不会验证该尝试是否属于当前已认证的用户。
当插件使用默认设置时,利用此漏洞无需任何身份验证。
服务器直接使用Cookie中的completion_id检索测验尝试,并执行UPDATE查询,而不验证所有权。
因此,攻击者可以通过猜测或枚举有效的completion_id值,并重放答案提交,来劫持或篡改其他用户的测验尝试。
受影响组件
通过admin-ajax.php的测验提交和结果处理功能
概念验证
步骤1:受害者用户提交
用户完成测验。提交内容使用一个完成ID存储,并通过Cookie与用户的会话关联,例如:
`chained_completion_id1=2`
步骤2:攻击者拦截
攻击者完成相同的测验,并使用代理或浏览器开发者工具拦截自己的提交请求。
示例请求:
|
|
步骤3:篡改
攻击者修改Cookie值以匹配另一个用户的测验尝试,例如:
`chained_completion_id1=2`
攻击者还可以修改“answer”或“points”等参数来操纵测验响应或分数。
然后将修改后的请求发送到服务器。
步骤4:结果
服务器覆盖了受害者用户的测验提交,包括答案和分数,而没有验证完成ID的所有权。
影响
攻击者可以任意修改属于其他用户的测验答案、分数或结果。这导致测验数据的完整性受到破坏,并允许未经授权操纵已完成的测验尝试。在测验结果用于评估、排行榜或证书的环境中,这会破坏平台的信任,并影响任何依赖测验完成数据的下游集成。
CWE
- CWE-639: 通过用户控制密钥绕过授权
- CWE-285: 授权不当