news 2026/4/30 7:18:30

Calibre-Web 存储型XSS漏洞分析 (CVE-2025-65858)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Calibre-Web 存储型XSS漏洞分析 (CVE-2025-65858)

Calibre-Web 存储型跨站脚本(XSS)漏洞分析 (CVE-2025-65858)

项目概述

Calibre-Web 是一个开源的、基于Web的Calibre电子书数据库管理工具,提供直观的界面供用户浏览、阅读和下载电子书。然而,在其版本0.6.25的用户管理组件中发现了一个严重的存储型跨站脚本(XSS)漏洞,允许经过身份验证的攻击者(需具备管理员权限)在用户名中注入恶意脚本,进而危及整个应用的安全。

功能特性

  • 用户管理:提供管理员创建、编辑和删除用户的功能。
  • 用户列表API:通过/ajax/listusers端点以JSON格式获取所有用户信息,用于前端展示。
  • 数据存储:用户信息,包括用户名,直接存储于后端数据库。

漏洞详情 (CVE-2025-65858)

核心问题

该漏洞的根本原因在于,应用程序在创建新用户时,对username字段的输入未进行严格的服务器端验证和消毒。同时,当/ajax/listusers端点返回包含恶意用户名的数据时,前端在渲染用户列表时未对数据进行HTML实体编码,导致注入的脚本在浏览器上下文中被执行。

影响范围

  • 确认受影响版本:Calibre-Web0.6.25
  • 可能受影响版本:所有使用相同用户管理和/ajax/listusers实现逻辑的早期版本。
  • 所需权限:攻击者需要拥有管理员权限才能创建新用户。

攻击向量

攻击者利用管理员权限,在创建新用户时,于Username字段中插入精心构造的XSS payload。该payload随后被存储在服务器上。当任何管理员(包括payload的创建者或其他管理员)访问用户列表页面时,前端会请求/ajax/listusers接口,该接口返回包含恶意payload的数据,导致浏览器解析并执行该payload。

安装指南 (用于本地测试与复现)

为了复现此漏洞,您需要搭建一个Calibre-Web0.6.25的测试环境。

  1. 克隆仓库并切换到受影响版本

    gitclone https://github.com/janeczku/calibre-web.gitcdcalibre-webgitcheckout0.6.25
  2. 安装依赖
    建议使用Python虚拟环境。

    python3 -m venv venvsourcevenv/bin/activate# 在Windows上使用 `venv\Scripts\activate`pipinstall-r requirements.txt
  3. 运行应用

    python cps.py

    应用默认会在http://localhost:8083启动。

  4. 登录后台

    • 访问http://localhost:8083
    • 使用默认管理员凭证登录:admin/admin123

使用说明 (漏洞复现步骤)

以下步骤演示了如何复现此存储型XSS漏洞。

前提条件

  • 已按照安装指南搭建并运行Calibre-Web0.6.25
  • 拥有管理员账户(如默认的admin)的访问权限。

复现步骤

1. 登录为管理员

使用管理员账户登录Calibre-Web。

2. 创建带有恶意Payload的用户
  • 导航至“管理”页面,点击“添加新用户”按钮。
  • Username字段中输入以下XSS payload:
    <img src=x onerror=alert('XSS')>
  • 填写其他必填字段(如密码、邮箱),然后提交表单。
3. 触发漏洞
  • 应用程序已将恶意用户名存储到数据库。
  • 现在,直接访问用户列表API端点:GET /ajax/listusers,或者通过前端页面(如再次查看用户列表)触发请求。
  • 浏览器会立即弹出一个包含“XSS”字样的警告框,证明JavaScript代码已成功执行。

核心代码分析

虽然我们无法直接访问Calibre-Web0.6.25的全部源代码,但可以推断出漏洞存在的关键代码位置。

1. 后端:用户创建处理 (假设代码)

POST /admin/user/new的处理逻辑中,应用程序从请求中获取username参数,并直接存储到数据库,未进行任何过滤或编码。

# 假设的代码: /cps/admin.py (或类似位置)fromflaskimportrequestfrom.modelsimportUserdefcreate_user():username=request.form['username']# 直接从表单获取,无任何验证password=request.form['password']# ... 其他字段new_user=User(username=username,password=password)# 直接存储原始值db.session.add(new_user)db.session.commit()# ... 重定向或返回响应

2. 后端:用户列表API (假设代码)

/ajax/listusers的处理逻辑中,应用程序从数据库查询所有用户,并将包含原始用户名的用户列表以JSON格式返回。

# 假设的代码: /cps/admin.py (或类似位置)fromflaskimportjsonifyfrom.modelsimportUserdeflist_users_ajax():users=User.query.all()user_list=[]foruserinusers:# 直接从数据库取出用户名,未进行编码user_list.append({'id':user.id,'username':user.username})returnjsonify(user_list)

3. 前端:渲染用户列表 (假设代码)

前端JavaScript代码接收到/ajax/listusers返回的JSON数据后,使用innerHTML或其他不安全的方法将用户名插入到DOM中。

<!-- 假设的代码: /cps/templates/admin.html (或类似位置) --><script>fetch('/ajax/listusers').then(response=>response.json()).then(users=>{constuserListDiv=document.getElementById('user-list');users.forEach(user=>{// 漏洞点:直接将用户名字符串插入到HTML中,innerHTML会解析并执行其中的脚本userListDiv.innerHTML+='<div>'+user.username+'</div>';});});</script><divid="user-list"></div>

结论

CVE-2025-65858 是一个典型的存储型XSS漏洞,其根源在于对用户输入的不信任和对输出编码的缺失。此漏洞允许拥有管理员权限的攻击者将恶意负载持久化,进而危害其他管理员或应用自身的安全。修复方案应包括:在后端对用户名进行严格的输入验证,并在将数据输出到HTML上下文时进行严格的HTML实体编码。建议所有使用受影响版本的用户尽快升级或应用补丁。FINISHED
6HFtX5dABrKlqXeO5PUv/6LSj2QdUDGX+cmMlh0332NX4+31qteAH/vWua1xnBtr
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 21:32:41

MT5中文增强工具参数详解:Temperature与Top-P协同调优的黄金组合推荐表

MT5中文增强工具参数详解&#xff1a;Temperature与Top-P协同调优的黄金组合推荐表 1. 工具概述与核心价值 MT5中文增强工具是一个基于Streamlit和阿里达摩院mT5模型构建的本地化NLP工具。这个工具的核心功能是对输入的中文句子进行语义改写和数据增强&#xff0c;在保持原意…

作者头像 李华
网站建设 2026/4/18 21:29:07

学术写作的“隐形裁缝”:书匠策AI如何用智能技术重塑论文原创性

在学术写作的江湖里&#xff0c;查重率和AI生成痕迹就像两把悬在头顶的达摩克利斯之剑——稍有不慎&#xff0c;论文就可能被贴上“抄袭”或“机械感”的标签。但如今&#xff0c;一位名为书匠策AI的“学术裁缝”正悄然改变游戏规则&#xff1a;它不仅能精准降重&#xff0c;还…

作者头像 李华
网站建设 2026/4/18 21:29:21

当论文降重遇上“AI炼金术”:书匠策AI如何把机械文本变成学术金句

在学术写作的江湖里&#xff0c;查重系统就像一位铁面无私的判官&#xff0c;任何重复的表述都会被标红打入“冷宫”。但传统降重工具的“改词换句”就像用橡皮泥修补瓷器——表面看似修复&#xff0c;实则漏洞百出。直到书匠策AI的出现&#xff0c;它用“语义炼金术”重新定义…

作者头像 李华
网站建设 2026/4/18 21:27:47

Solid组件深度解析

# Solid存储&#xff1a;重新定义数据所有权与互操作性 1. Solid存储是什么 Solid存储不是一个具体的软件或硬件产品&#xff0c;而是一种数据存储和管理的架构理念。它的核心思想是将数据与应用分离&#xff0c;让个人能够完全控制自己的数据。 想象一下传统的数据存储方式&am…

作者头像 李华
网站建设 2026/4/18 21:27:35

内存性能优化实战:如何通过精准调优CAS Latency提升系统吞吐量

原理剖析&#xff1a;内存访问的“反应时间”——CAS Latency 要理解如何优化&#xff0c;首先得知道我们在优化什么。CAS Latency&#xff0c;简称CL值或tCL&#xff0c;是内存时序参数中最核心的一个。你可以把它想象成内存的“反应时间”。 当CPU需要从内存中读取数据时&a…

作者头像 李华
网站建设 2026/4/18 21:27:36

毕设开题报告的技术选型指南:从需求分析到架构设计的完整路径

最近在帮学弟学妹们看毕设开题报告&#xff0c;发现一个挺普遍的现象&#xff1a;大家都很热衷于在报告里罗列一堆“高大上”的技术名词&#xff0c;比如微服务、Redis缓存、Docker容器化、Kafka消息队列等等&#xff0c;但问起为什么选这个&#xff0c;往往回答是“看别人都这…

作者头像 李华