OpenMetaData-CVE-2024-28848-权限绕过及RCE
权限绕过是我的弱项,做的分析并不多。而且shiro那一堆权限绕过历史漏洞我还没看过,未来一段时间打算注重这个方面的学习。
这里写篇文章记录下。
漏洞复现
1 |
|
其实就一条get请求。base64是touch /tmp/success
漏洞分析
从payload来看,此处用了一个trick ,之前看星球里有讨论过叫Path Variables
;aaa=bbb 如果出现在路由里,tomcat会把这段当成变量来处理。等同于?aaa=bbb
而openMetaData用的是jetty + glassfish, 也有tomcat的这个特性,虽然我直接搜没搜到,可能藏在官方文档的深处,我不想翻了。
所以上述路由实际上是/api/v1/events/subscriptions/validation/condition/{expression}
那么具体逻辑是如何的?
openMetaData的鉴权用的是jwt,鉴权逻辑在JwtFilter里。
可以看到假如url里有EXCLUDED_ENDPOINTS就会直接放行,
有很多直接放行的Endpoints,随便挑一个就能绕过。
但是此处还有一个要求,我们不能直接发送;v1/system/config ,必须把它url编码为
;v1%2Fsystem%2Fconfig这种才可以。所以服务器这边获取UrlInfo.getPath必须进行url解码才可以
可以看到decode默认为true。那么权限绕过就OK了。
RCE部分就是常规的Spel注入了,我尝试了把base64换成直接输入命令但是好像路由会报错,所以就编个码吧。
总结:
Path Variables的trick
filter权限绕过
OpenMetaData-CVE-2024-28848-权限绕过及RCE
http://example.com/2024/08/19/OpenMetaData-CVE-2024-28848-权限绕过及RCE/