ZeroPathAI/ragflow-poc
GitHub: ZeroPathAI/ragflow-poc
描述一个用于复现 RAGFlow 未授权认证远程代码执行漏洞的 POC 工具及其测试方法。
Stars: 0 | Forks: 0
# RAGFlow eval() RCE via tag_feas
## 漏洞
RAGFlow 的检索流程会对存储在文档分片(`rag/nlp/search.py`,`_rank_feature_scores()`,约第 287 行)的 `tag_feas` 字段调用 `eval()`。`tag_feas` 字段本应保存一个标签名到分数的映射字典(例如 `{"security": 0.85}`),用于检索过程中的排名特征评分。然而,该字段的值在通过分片创建 API 传入时未经过任何验证,直接以纯字符串形式存储。当触发标签重排序代码路径时,`eval()` 会执行存储的字符串——这使得任何已认证用户都能以 RAGFlow 进程的权限(通常在 Docker 中为 root)实现远程代码执行。
本 POC 通过在 RAGFlow 容器内获取交互式反向 shell 来演示该漏洞。
**严重程度:** 危急
**CWE:** CWE-95(动态评估代码中的指令未正确中和)
**影响范围:** 使用 Infinity 作为 DOC_ENGINE 的 RAGFlow(Elasticsearch 不受影响——其 `rank_features` 字段类型在存储层强制要求数值)
## 测试环境搭建
如果你已经运行了使用 Infinity 作为 DOC_ENGINE 的 RAGFlow 实例,可以跳过本节,直接前往 [运行 POC](#running-the-poc)。
`setup/` 目录包含一个 Docker Compose 环境,用于启动带有所有必要配置的 RAGFlow。它包括:
- 使用 `DOC_ENGINE=infinity` 的 RAGFlow v0.24.0
- Infinity v0.7.0-dev5(向量/全文数据库)
- TEI 嵌入模型(bge-small-en-v1.5)
- TEI 重排序模型(ms-marco-TinyBERT-L-2-v2)
- MySQL、MinIO、Redis(支持服务)
**要求:** Docker 和 Docker Compose。
```
cd setup
./setup.sh
```
这会拉取镜像、启动所有服务、等待健康检查并注册测试用户。首次运行时(包含模型下载)需要几分钟。
设置完成后,会打印连接信息。测试用户凭据如下:
- **URL:** http://localhost:18080
- **邮箱:** `poc@test.local`
- **密码:** `ragflow123`
要清理所有资源(停止容器并移除卷):
```
./teardown.sh
```
## 运行 POC
运行 POC 需要 RAGFlow API 密钥。如果你使用的是上述测试环境:
1. 以 `poc@test.local` / `ragflow123` 登录 http://localhost:18080
2. 进入 **Settings > Model Providers > API tokens**
3. 点击 **Create new API token** 并复制密钥
然后运行:
```
pip install requests # only dependency
python3 poc/poc.py \
--base-url http://localhost:18080 \
--api-key \
--embedding-base http://tei:80/v1 \
--reranker-base tei-reranker:80 \
--infinity-url http://localhost:23820
```
`--embedding-base`、`--reranker-base` 和 `--infinity-url` 参数仅在测试环境中需要。若在已配置好模型的生产实例上运行,仅需 `--base-url` 和 `--api-key`。
请参阅 `poc/poc.py` 文件顶部的文档字符串,了解前置条件、各步骤的作用以及所有可用选项的完整说明。
标签:Critical, CWE-95, Docker, Elasticsearch, eval, Infinity, POC, RAG, RAGFlow, rank_features, Root权限, tag_feas, 代码执行, 动态代码评估, 反序列化, 向量数据库, 命令注入, 安全漏洞, 安全防御评估, 文档分块, 未授权, 检索增强生成, 检索管道, 版权保护, 编程工具, 认证绕过, 远程代码执行, 逆向Shell, 逆向工具, 重排序