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

审计指标

高危 (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)
}

修复建议:

  1. 对 X-Forwarded-Prefix 头进行更严格的验证,拒绝包含 '..' 的路径
  2. 使用 path.Clean 后检查结果是否包含 '..'
  3. 限制 X-Forwarded-Prefix 只能包含合法的路径前缀
  4. 考虑在反向代理层面验证此请求头

概念验证 (PoC):

通过设置 X-Forwarded-Prefix 请求头实现路径遍历/开放重定向

复现步骤:

  1. 向目标服务器发送请求,设置请求头 X-Forwarded-Prefix: ..
  2. 服务器调用 redirectTrailingSlash 函数处理路径重定向
  3. path.Clean('..') 返回 '..',绕过 prefix != '.' 检查
  4. 重定向路径变为 ../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-ForX-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

修复建议:

  1. 升级 Gin 到 1.7.7 或更高版本
  2. 在服务直接暴露给客户端时,禁用或严格限制对 X-Forwarded-ForX-Real-IP 的信任
  3. 仅在可信反向代理后使用转发头,并在代理层覆盖/清洗客户端传入的转发头
  4. 不要直接基于未校验的 c.ClientIP() 结果做敏感访问控制;如需做 IP 白名单,应结合可信代理配置和真实连接来源校验

概念验证 (PoC):

通过伪造 X-Forwarded-For 请求头,使应用中 c.ClientIP() 返回攻击者指定的 IP。

复现步骤:

  1. Gin 应用路由中输出或使用 c.ClientIP()
  2. 发送带有伪造 X-Forwarded-For 的请求
  3. 观察应用获取到的客户端 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
}

修复建议:

  1. 在 SaveUploadedFile 函数中添加路径清理逻辑,拒绝包含 '..' 的路径
  2. 使用 filepath.Base() 或 filepath.Clean() 清理路径
  3. 限制文件只能写入特定目录
  4. 更新官方示例代码,展示安全的使用方式

概念验证 (PoC):

通过上传文件名包含路径遍历的文件实现任意文件写入

复现步骤:

  1. 构造一个文件上传请求,文件名设置为 ../../etc/cron.d/malicious
  2. 服务器调用 c.SaveUploadedFile(file, file.Filename)
  3. 文件被写入 /etc/cron.d/malicious
  4. 如果 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. 高优先级: 在 1 周内修复 8 个高危漏洞,其中包括 CVE-2020-28483
  2. 中优先级: 在 2-4 周内修复 7 个中危漏洞
  3. 低优先级: 在日常维护中处理 1 个低危漏洞

本报告由 DeepAudit - AI 驱动的安全分析系统生成