Lobe Chat SSRF漏洞分析:原生Web Fetch模块的安全风险
漏洞详情
漏洞概述
当客户端向tRPC端点tools.search.crawlPages发送任意URL数组和impl: ["naive"]参数时,服务器会直接向这些URL发出出站HTTP请求。该功能缺乏防御逻辑来限制或验证对内部网络(127.0.0.1、localhost、私有范围)或元数据端点(169.254.169.254)的请求。
攻击流程
攻击流程如下:客户端输入(urls、impls)→ tRPC路由器中的服务调用 → 服务将URL传递给Crawler.crawl → Crawler优先使用用户指定的impls(naive) → naive实现直接执行服务器端fetch(url)(SSRF) → 服务器收集来自内部资源的响应。
在开发环境中,可以使用lobe-auth-dev-backend-api: 1头绕过身份验证(生产环境需要有效的token)。在PoC中,攻击者成功利用此方法从服务器端检索到localhost:8889的内部API。
受影响的版本
- 受影响版本:<= 1.136.1
- 修复版本:1.136.2
漏洞验证
PoC描述
在开发模式下,我们使用身份验证绕过头lobe-auth-dev-backend-api: 1进行了单个tRPC调用。由于tRPC要求body采用{"json": { ... }}格式,我们将urls和impls: ["naive"]放在json内部,诱导服务器请求内部URL(http://localhost:8889/internal-api)。
响应遵循tRPC的包装结构,因此内部API的实际body内容包含在result.data.json.results[0].data.content中作为字符串(JSON字符串)。我们使用jq进行后处理以提高可读性。
curl示例
|
|
影响分析
由于服务器执行对内部网络、localhost和元数据端点的出站请求,攻击者可以滥用服务器的网络位置访问内部资源(内部API、管理端口、云元数据等)。
这可能导致内部系统信息暴露、认证令牌/密钥泄露(如IMDSv1/v2)、内部管理界面被滥用,并为进一步的横向移动提供立足点。
通过利用用户指定的impls强制使用未经过滤的naive实现,可以绕过SSRF防御措施,例如阻止私有/元数据IP、DNS重新验证/重新解析和重定向限制。
技术细节
漏洞代码位置
参考信息
- GHSA-fgx4-p8xf-qhp9
- lobehub/lobe-chat@8d59583
- https://nvd.nist.gov/vuln/detail/CVE-2025-62505
安全指标
CVSS评分
- 总体评分:3.0(低危)
- 攻击向量:网络
- 攻击复杂度:高
- 所需权限:高
- 用户交互:无
- 范围:已更改
- 机密性:低
- 完整性:无
- 可用性:无
弱点分类
- CWE-918:服务器端请求伪造(SSRF)
- Web服务器从上游组件接收URL或类似请求并检索此URL的内容,但未能充分确保请求被发送到预期目的地。