Sentinel [BUG] 使用来源白名单功能时,没有设置orgin的客户端请求会立即通过,功能失效。

ff29svar  于 2个月前  发布在  其他
关注(0)|答案(3)|浏览(30)

一、详细说明:
使用来源白名单功能时,没有设置orgin的客户端请求会立即通过,功能失效。
二、漏洞证明(在这里写POC):
github上最新的代码:
https://github.com/alibaba/Sentinel/blob/master/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleChecker.java

三、修复方案:
应去掉StringUtil.isEmpty(requester)的判断,否则白名单功能失效,产生非法访问的漏洞。

5jdjgkvh

5jdjgkvh1#

version:1.8.6,have already solved.

version:1.8.7 There is also this bug.

mwkjh3gx

mwkjh3gx2#

这部分代码看起来当初是 bydesign 的,不过从当前的需求出发,感觉为这个规则增加一个严格模式,在严格模式下没有设置 orgin 的客户端请求会被拒绝,默认模式下保持原有行为,这样会不会更合适一些,欢迎加入讨论或提交优化的 PR。
PS:我们考虑在 2.0 中和安全能力一起重构这部分功能。

qlvxas9a

qlvxas9a3#

一、详细说明: 使用来源白名单功能时,没有设置orgin的客户端请求会立即通过,功能失效。 二、漏洞证明(在这里写POC): github上最新的代码: https://github.com/alibaba/Sentinel/blob/master/sentinel-core/src/main/java/com/alibaba/csp/sentinel/slots/block/authority/AuthorityRuleChecker.java

三、修复方案: 应去掉StringUtil.isEmpty(requester)的判断,否则白名单功能失效,产生非法访问的漏洞。

一个解决方案是:在实现 RequestOriginParser#parseOrigin 方法是默认返回一个来源(如:defaultOrigin),而不是返回为空字符串。

当然直接放行 origin 为空的请求感觉确实有点怪怪的。

相关问题