[HIGH] SSRF 漏洞:用户可控 URL 未验证即发起 HTTP 请求 #10

Closed
opened 2026-04-30 03:55:40 +08:00 by lan · 0 comments
Owner

漏洞描述

多个服务模块使用用户提供的 URL 直接发起 HTTP 请求,未对目标地址进行安全校验。

影响位置

1. internal/service/message_segment_image.go:41

u, err := url.Parse(urlStr)
// 未验证 host/scheme 即发起请求

用户提交的图片 URL 可能指向内网服务(如 http://169.254.169.254/latest/meta-data/ 获取云主机元数据)。

2. internal/pkg/openai/client.go:618-623

parsed, err := url.Parse(imageURL)
req, err := http.NewRequestWithContext(ctx, http.MethodGet, imageURL, nil)

OpenAI 客户端从用户提供的 imageURL 下载图片,未校验目标是否为可信域名。

风险

  • 读取云主机元数据(AWS/GCP/阿里云 metadata)
  • 扫描内网服务
  • 绕过防火墙发起内网请求

修复建议

  1. 验证 URL scheme 仅限 http://https://
  2. 拒绝私有 IP 地址段(10.x, 172.16-31.x, 192.168.x, 127.x, 169.254.x)
  3. DNS 解析后二次验证 IP(防 DNS Rebinding)
  4. 使用域名白名单或代理模式

严重程度

HIGH — 可直接用于内网渗透和数据窃取。

## 漏洞描述 多个服务模块使用用户提供的 URL 直接发起 HTTP 请求,未对目标地址进行安全校验。 ### 影响位置 **1. `internal/service/message_segment_image.go:41`** ```go u, err := url.Parse(urlStr) // 未验证 host/scheme 即发起请求 ``` 用户提交的图片 URL 可能指向内网服务(如 `http://169.254.169.254/latest/meta-data/` 获取云主机元数据)。 **2. `internal/pkg/openai/client.go:618-623`** ```go parsed, err := url.Parse(imageURL) req, err := http.NewRequestWithContext(ctx, http.MethodGet, imageURL, nil) ``` OpenAI 客户端从用户提供的 imageURL 下载图片,未校验目标是否为可信域名。 ## 风险 - 读取云主机元数据(AWS/GCP/阿里云 metadata) - 扫描内网服务 - 绕过防火墙发起内网请求 ## 修复建议 1. 验证 URL scheme 仅限 `http://` 和 `https://` 2. 拒绝私有 IP 地址段(10.x, 172.16-31.x, 192.168.x, 127.x, 169.254.x) 3. DNS 解析后二次验证 IP(防 DNS Rebinding) 4. 使用域名白名单或代理模式 ## 严重程度 **HIGH** — 可直接用于内网渗透和数据窃取。
lan closed this issue 2026-04-30 12:23:20 +08:00
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: carrot_bbs/backend#10