GHSA-XFX2-PRG5-JQ3G:Gin-Gonic 中间件绕过:INSATutorat 中的授权失败

发布: (2026年3月1日 GMT+8 15:10)
3 分钟阅读
原文: Dev.to

Source: Dev.to

概览

漏洞编号: GHSA-XFX2-PRG5-JQ3G
CVSS 分数: 8.8
发布时间: 2026-03-01

在 INSATutorat 应用中,由于 Gin‑Gonic Web 框架的中间件实现不当,导致出现严重的授权绕过漏洞。负责保护管理路由的 AdminHandler 中间件在检测到未授权访问时未能终止请求生命周期。因此,已认证的非管理员用户可以绕过安全控制,在 /api/admin/* 下执行特权操作,可能导致数据丢失和未授权的系统管理。

TL;DR

INSATutorat 应用的管理中间件存在关键缺陷。虽然代码能够正确识别未授权用户,但未能停止请求处理链(缺少 c.Abort())。这使得任何已认证用户都能够成功调用管理 API 端点,而不受权限限制。

漏洞利用状态

POC

技术细节

  • CWE 编号: CWE-285
  • CVSS v3.1: 8.8
  • 攻击向量: 网络
  • 所需权限:
  • 影响: 高(机密性 & 完整性)
  • 平台: Go (Gin‑Gonic)

受影响系统

  • INSATutorat(Go 应用)– 已在提交 15ae47425aed337181f7a6c54a9d199c93b041eb 中修复

代码分析

提交: 15ae474

通过添加 c.Abort() 修复管理员中间件的授权绕过问题:

func AdminHandler() gin.HandlerFunc {
    return func(c *gin.Context) {
        userInterface, exists := c.Get("user")
        if !exists {
            _ = c.Error(apierrors.Unauthorized)
            c.Abort()
            return
        }

        user := userInterface.(*models.User)
        if !user.IsAdmin {
            _ = c.Error(apierrors.Forbidden)
            c.Abort()
            return
        }

        // Continue processing for authorized admin users
        c.Next()
    }
}

缓解策略

  • 立即修补中间件逻辑。
  • 审计所有 Gin 中间件,检查是否缺少 Abort() 调用。
  • 实施集成测试,断言未授权请求返回正确的 HTTP 状态码。

修复步骤

  1. 在源码中定位 middlewares/admin.go
  2. 在错误处理分支的每个 return 前插入 c.Abort()
  3. 重新构建并部署应用。
  4. 使用非管理员账户尝试访问 /api/admin/ 端点,以验证修复效果。

参考资料

0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...