DeepAudit 安全审计报告
报告信息
| 属性 | 内容 |
|---|---|
| 项目名称 | Gin-zip |
| 任务 ID | 93612012... |
| 生成时间 | 2026-07-07 08:42:12 |
| 任务状态 | COMPLETED |
| 耗时 | 6.1 分钟 |
执行摘要
安全评分: 0/100 [未通过] 严重 - 需要立即进行修复
漏洞发现概览
| 严重程度 | 数量 | 已验证 |
|---|---|---|
| 高危 (HIGH) | 8 | 1 |
| 中危 (MEDIUM) | 7 | 1 |
| 低危 (LOW) | 1 | 0 |
| 总计 | 16 | 2 |
审计指标
- 分析文件数: 104 / 104
- Agent 迭代次数: 64
- 工具调用次数: 61
- Token 消耗: 1,086,923
- 生成的 PoC: 2
高危 (High) 漏洞
HIGH-1: gin.go:473-483 - redirectFixedPath: 路径修正重定向逻辑
[未验证] | 类型: path_traversal
AI 置信度: 60%
漏洞描述:
gin.go:473-483 - redirectFixedPath: 路径修正重定向逻辑
HIGH-2: context.go:523-527 - FormFile: 文件上传处理
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
context.go:523-527 - FormFile: 文件上传处理
HIGH-3: Path Traversal in gin.go
[已验证] [含 PoC] | 类型:
path_traversal
AI 置信度: 95%
漏洞描述:
X-Forwarded-Prefix 头导致的开放重定向/路径遍历漏洞
Impact: 攻击者可以利用此漏洞实现开放重定向(钓鱼攻击)或路径遍历(访问受限资源)。在反向代理场景中,攻击者可以构造恶意重定向路径,诱导用户访问恶意网站或绕过路径限制。
漏洞代码:
func redirectTrailingSlash(c *Context) {
req := c.Request
p := req.URL.Path
if prefix := path.Clean(c.Request.Header.Get("X-Forwarded-Prefix")); prefix != "." {
p = prefix + "/" + req.URL.Path
}
req.URL.Path = p + "/"
if length := len(p); length > 1 && p[length-1] == '/' {
req.URL.Path = p[:length-1]
}
redirectRequest(c)
}
修复建议:
- 对 X-Forwarded-Prefix 头进行更严格的验证,拒绝包含 '..' 的路径
- 使用 path.Clean 后检查结果是否包含 '..'
- 限制 X-Forwarded-Prefix 只能包含合法的路径前缀
- 考虑在反向代理层面验证此请求头
概念验证 (PoC):
通过设置 X-Forwarded-Prefix 请求头实现路径遍历/开放重定向
复现步骤:
- 向目标服务器发送请求,设置请求头 X-Forwarded-Prefix: ..
- 服务器调用 redirectTrailingSlash 函数处理路径重定向
- path.Clean('..') 返回 '..',绕过 prefix != '.' 检查
- 重定向路径变为 ../original_path,实现路径遍历
PoC 代码:
curl -H 'X-Forwarded-Prefix: ..' http://target/api/test
curl -H 'X-Forwarded-Prefix: ../../etc' http://target/api/test
HIGH-4: binding/form_mapping.go:45-47 - TrySet: 设置结构体字段值,可能被用于覆盖敏感字段
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
binding/form_mapping.go:45-47 - TrySet: 设置结构体字段值,可能被用于覆盖敏感字段
HIGH-5: render/html.go - HTML渲染模板处理,可能存在XSS风险
[未验证] | 类型: xss
AI 置信度: 60%
漏洞描述:
render/html.go - HTML渲染模板处理,可能存在XSS风险
HIGH-6: render/json.go - JSON渲染,secureJsonPrefix配置
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
render/json.go - JSON渲染,secureJsonPrefix配置
HIGH-7: auth.go - 认证中间件实现
[未验证] | 类型: other
AI 置信度: 60%
漏洞描述:
auth.go - 认证中间件实现
HIGH-8: CVE-2020-28483 - Gin ClientIP 信任 X-Forwarded-For 导致 IP 伪造/HTTP 请求解释不一致风险
[已确认:版本命中 + 源码匹配] | 类型:
http_request_smuggling / header_spoofing
AI 置信度: 95%
漏洞描述:
Gin 1.6.0 命中 CVE-2020-28483 的受影响版本范围。该 CVE 常被归类到
CWE-444(HTTP 请求解释不一致),部分扫描器会描述为 HTTP Request
Smuggling 风险;在 Gin 中的具体表现是 ClientIP()
默认信任客户端可控的 X-Forwarded-For 和
X-Real-IP
请求头,攻击者可以伪造这些头部使应用获得错误的客户端 IP。
当业务代码基于 c.ClientIP()
做访问控制、限速、审计日志、风控判断或 IP
白名单校验时,攻击者可通过伪造请求头绕过相关安全策略。
Impact: 攻击者可以伪造客户端 IP,可能导致访问控制绕过、限速绕过、日志审计污染、风控策略失效。在直接暴露 Gin 服务或反向代理未清洗转发头的部署场景中风险较高。
漏洞代码:
func (c *Context) ClientIP() string {
if c.engine.ForwardedByClientIP {
clientIP := c.requestHeader("X-Forwarded-For")
clientIP = strings.TrimSpace(strings.Split(clientIP, ",")[0])
if clientIP == "" {
clientIP = strings.TrimSpace(c.requestHeader("X-Real-Ip"))
}
if clientIP != "" {
return clientIP
}
}
...
}
受影响版本:
github.com/gin-gonic/gin < 1.7.7
当前审计目标:gin-1.6.0
修复建议:
- 升级 Gin 到 1.7.7 或更高版本
- 在服务直接暴露给客户端时,禁用或严格限制对
X-Forwarded-For、X-Real-IP的信任 - 仅在可信反向代理后使用转发头,并在代理层覆盖/清洗客户端传入的转发头
- 不要直接基于未校验的
c.ClientIP()结果做敏感访问控制;如需做 IP 白名单,应结合可信代理配置和真实连接来源校验
概念验证 (PoC):
通过伪造 X-Forwarded-For 请求头,使应用中
c.ClientIP() 返回攻击者指定的 IP。
复现步骤:
- Gin 应用路由中输出或使用
c.ClientIP() - 发送带有伪造
X-Forwarded-For的请求 - 观察应用获取到的客户端 IP 是否变成伪造值
PoC 代码:
curl -H "X-Forwarded-For: 127.0.0.1" http://target/client-ip
curl -H "X-Forwarded-For: 10.0.0.1, 198.51.100.10" http://target/client-ip中危 (Medium) 漏洞
MEDIUM-1: Gin框架核心 - 请求处理入口
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
ServeHTTP是Gin框架的核心HTTP入口点,从对象池获取Context并调用handleHTTPRequest处理请求。所有HTTP请求都经过此方法。
MEDIUM-2: 自动请求绑定 - 用户输入处理
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
Bind方法根据Content-Type自动选择绑定器处理请求体,支持JSON/XML/Form/Protobuf/MsgPack/YAML等多种格式,是用户输入的主要入口点。
MEDIUM-3: 文件上传处理
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
FormFile和SaveUploadedFile方法处理文件上传,SaveUploadedFile的dst参数如果由用户控制可能导致路径遍历漏洞。
MEDIUM-4: 表单映射使用反射
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
mapFormByTag使用反射将表单数据映射到结构体字段,如果结构体字段标签配置不当可能导致意外的字段覆盖。
MEDIUM-5: secureJsonPrefix配置
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
默认secureJsonPrefix设置为'while(1);',用于防止JSON劫持,但用户可通过SecureJsonPrefix方法修改此值。
MEDIUM-6: HTML模板渲染
[未验证] | 类型: other
AI 置信度: 50%
漏洞描述:
HTML渲染支持模板,如果用户输入未正确转义直接传入模板可能导致XSS漏洞。Gin使用Go的html/template默认会转义,但需注意使用template.HTML等类型时的风险。
MEDIUM-7: Path Traversal in context.go
[已验证] [含 PoC] | 类型:
path_traversal
AI 置信度: 85%
漏洞描述:
SaveUploadedFile 函数缺乏路径验证导致任意文件写入
Impact: 攻击者可以通过路径遍历将文件写入任意位置。结合 cron、SSH authorized_keys 等机制,可实现远程代码执行或权限提升。虽然漏洞的最终触发取决于调用方,但官方示例代码直接使用用户输入作为路径,增加了漏洞被利用的风险。
漏洞代码:
func (c *Context) SaveUploadedFile(file *multipart.FileHeader, dst string) error {
src, err := file.Open()
if err != nil {
return err
}
defer src.Close()
out, err := os.Create(dst)
if err != nil {
return err
}
defer out.Close()
_, err = io.Copy(out, src)
return err
}
修复建议:
- 在 SaveUploadedFile 函数中添加路径清理逻辑,拒绝包含 '..' 的路径
- 使用 filepath.Base() 或 filepath.Clean() 清理路径
- 限制文件只能写入特定目录
- 更新官方示例代码,展示安全的使用方式
概念验证 (PoC):
通过上传文件名包含路径遍历的文件实现任意文件写入
复现步骤:
- 构造一个文件上传请求,文件名设置为 ../../etc/cron.d/malicious
- 服务器调用 c.SaveUploadedFile(file, file.Filename)
- 文件被写入 /etc/cron.d/malicious
- 如果 cron 执行该文件,可实现远程代码执行
PoC 代码:
curl -F 'avatar=@malicious.sh;filename=../../etc/cron.d/malicious' http://target/profile
低危 (Low) 漏洞
LOW-1: Xss in html.go
[未验证] | 类型: xss
AI 置信度: 95%
漏洞描述:
HTML 模板渲染可能被用户绕过转义
Impact: 无直接影响。这是框架的设计选择,开发者需要主动使用不安全类型才能绕过转义。
漏洞代码:
func (r HTML) Render(w http.ResponseWriter) error {
r.WriteContentType(w)
if r.Name == "" {
return r.Template.Execute(w, r.Data)
}
return r.Template.ExecuteTemplate(w, r.Name, r.Data)
}
修复建议:
开发者应避免在模板中使用 template.HTML 等类型标记用户输入为安全,除非经过严格的过滤和验证。
修复优先级建议
基于已发现的漏洞,我们建议按以下优先级进行修复:
- 高优先级: 在 1 周内修复 8 个高危漏洞,其中包括 CVE-2020-28483
- 中优先级: 在 2-4 周内修复 7 个中危漏洞
- 低优先级: 在日常维护中处理 1 个低危漏洞
本报告由 DeepAudit - AI 驱动的安全分析系统生成