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, 逆向工具, 重排序