快速结论:这是 RAGFlow Agent「Invoke」HTTP 组件缺少 SSRF 防护导致的安全问题,攻击者可让服务端请求内网或云实例元数据地址。优先做的是确认你的 RAGFlow 是否已包含修复代码,而不是修改本地配置。
适用环境:RAGFlow(PyPI / Docker 部署);受影响版本 <= 0.26.1;涉及组件 agent/component/invoke.py;Issue 未给出操作系统、Python、CUDA 或显卡信息。
最快修复方案:暂无确认的一步修复方案。修复已合入 main 分支(PR #15426、#16409),但截至 Issue 讨论时尚未发布带修复的正式版本;可优先尝试升级到包含这两个 PR 的版本或镜像。
注意事项:Issue 明确说明该漏洞在 main 已修复但未进入 tagged release,因此按版本号「升级」不一定能解决问题,需要核对所使用的镜像或源码是否包含 assert_url_is_safe 与 pin_dns 调用。二次修复(#16409)还额外改动了重试校验、重定向和代理 URL 校验,仅含第一次修复的版本防护可能不完整。
问题场景
在 RAGFlow 的 Agent 工作流中使用「Invoke」HTTP 组件时,组件会向调用方提供的 URL 发起出站 HTTP 请求,但未接入项目内的 SSRF 防护模块 common/ssrf_guard.py。任何已注册用户都可以创建或触发 Agent,使 RAGFlow 服务器去访问云实例元数据地址(如 169.254.169.254)、同 Docker 网络内的 Elasticsearch / MinIO / Redis / MySQL 等服务,或回环地址上的管理端。由于 URL 字段支持 {sys.query} 模板替换,已发布聊天 Agent 的终端用户也可能控制请求目标。
报错原文
ImportError: from Crypto.PublicKey import RSA
该 Issue 讨论的是 SSRF 安全问题,上述为排雷时需保留的核心报错形式,并非本 Issue 中出现的实际运行错误。
原因分析
最可能的原因是 agent/component/invoke.py 中的 _build_url() 与 _invoke() 直接用用户可控 URL 调用 requests.get/post/put,全程没有调用 assert_url_is_safe() 或 pin_dns()。相比之下,agent/tools/crawler.py、agent/tools/searxng.py、api/db/services/file_service.py、common/data_source/rss_connector.py、rag/app/naive.py 等同类出站请求点都已接入该防护,因此更可能是 Invoke 组件漏接入,而非防护模块本身失效。
环境排查
- 确认 RAGFlow 版本是否
<= 0.26.1,或是否使用了未包含修复的镜像标签。 - 检查
agent/component/invoke.py中_build_url()是否调用assert_url_is_safe(url),并保存解析出的 hostname/IP 供pin_dns使用。 - 检查每次
requests.*调用(含重试迭代)是否都被pin_dns包裹。 - 检查是否设置了
allow_redirects=False。 - 检查代理路径是否同样经
assert_url_is_safe校验并做 DNS 固定。 - 确认部署形态(Docker 网络暴露面),是否存在可从服务端访问的元数据地址、内网服务或回环管理端口。
解决步骤
- 先确认当前运行版本对应
agent/component/invoke.py是否为未修复版本:若文件内没有assert_url_is_safe调用,即属受影响状态。 - 可优先尝试改用包含修复的镜像或源码:修复由 PR #15426(为 Invoke 加入
assert_url_is_safe+pin_dns)与 PR #16409(每次重试重新校验 URL、在实例上保存固定 hostname/IP、强制allow_redirects=False、对代理 URL 也做校验与 DNS 固定)提供,两者均已在main分支合并。 - 由于 Issue 说明修复尚未进入正式发布版本,升级后需按上述排查项逐条核对代码,而不是只看版本号。
- 在无法立即升级的环境中,可能原因层面的缓解措施是限制 RAGFlow 服务器出网范围,禁止其访问云元数据地址与内网网段,并收紧 Agent 发布与注册权限;这些属于推断性缓解,未在 Issue 中验证。
验证方法
在 Invoke 组件中构造指向内网地址(如 http://127.0.0.1:9381 或 http://169.254.169.254/)的请求,修复后的版本应因 assert_url_is_safe 判定该地址非全局可达而拒绝执行;同时确认代码路径中每次 requests.* 均处于 pin_dns 上下文内,且重定向与代理分支同样被校验。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[bug]: Crashing Krea2 checkpoints after recent update (Anything but the smallest Q8_0 GGUF crashes, Even standard checkpoints)](https://www.chat-gpts.plus/wp-content/uploads/2026/10/9585-377c244f-768x403.jpg)
![[Bug]: Upgrade path missing column `tenant.tenant_ocr_id` - all tenant DB queries silently fail as "Tenant not found"](https://www.chat-gpts.plus/wp-content/uploads/2026/10/18754-1fe5f807-768x403.jpg)
![[Question]: Chunk method table is not supported by Infinity?](https://www.chat-gpts.plus/wp-content/uploads/2026/10/4782-52d937bc-768x403.jpg)