【问题标题】:Grails-Spring Security loop hole: URL bypassing with [dot]Grails-Spring Security 漏洞:使用 [dot] 绕过 URL
【发布时间】:2023-03-10 13:18:01
【问题描述】:

我们已经使用 requestmap 实现了对 Controller 和操作的访问。 假设像www.example.com/car/list 这样的 URL 访问 ROLE_ADMIN。 但是如果我们尝试像www.example.com/adsf.car/list这样的URL,这个资源就可以绕过spring security

requestMap 看起来像这样:/car/** -> ROLE_ADMIN

如何防止上例中的 URL 绕过 sprint 安全检查?

我尝试将请求映射更改为 /car/* -> ROLE_ADMIN,但我们已阻止此类链接,我们无法更新所有链接的模式。

【问题讨论】:

  • 您的问题是,如何预防?你能分享一个例子吗?
  • 你能展示你的整个requestMap吗?
  • 您使用的是哪个插件?无法使用 BeAPI 进行复制。
  • 没有看到任何代码,我怀疑这不是实际的 Spring Security 问题,而是 Grails API 插件或 REST 处理程序之一的问题(?)。我不能在 BeAPI 插件(我维护)中复制它,因为通信和业务逻辑是分开的,所以这样的问题永远不会发生。
  • 您是说对/adsf.car/list 的请求与对/car/list 的请求返回的内容相同吗?模式 /car/** 不应该保护 /adsf.car/list

标签: spring grails spring-security request-mapping


【解决方案1】:

我们发现的一个解决方案是在 URLMappings 中添加约束。请求 url 中只允许字母、数字和 '_','/'。

没有以下限制,任何人都可以通过将 [dot] 添加到控制器或操作来绕过受 Spring Security requestMap 保护的 URL。

"/$controller/$action?"{
    constraints {
        controller(matches:/[A-Za-z0-9\-_]*/)
        action(matches:/[A-Za-z0-9\-_]*/)
    }
 }

注意:如果您使用 Spring 应用程序并使用请求映射来保护对资源的访问,请通过将 [dot] 添加到控制器和操作来检查它们是否受到安全保护

【讨论】:

  • 这绝对是一个错误,应该由 Grails 团队解决;因此,每个人都不应该受到这些限制。您应该将此问题作为问题提交给 Grails 团队和/或使用 Beapi 插件(github.com/orubel/Beapi-API-Framework),直到问题得到解决
猜你喜欢
  • 2016-06-24
  • 2013-04-13
  • 2012-05-01
  • 1970-01-01
  • 2013-10-13
  • 2013-09-20
  • 2016-02-16
  • 2021-08-15
  • 1970-01-01
相关资源
最近更新 更多