CVE-2025-61681CVE-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攻击。