ilter分析寻找未授权接口
HttpRequestContextFilter 获取请求头信息,
AuthFilter 获取uri,token,权限控制
ParamCheckerFilter 处理参数,过滤恶意字符
AuthFilter,
请求头如果存在jwt秘钥,那么就进入下个filter,
如果配置了nacos.core.auth.enable.userAgentAuthWhite=true,那么利用伪造userAgent就进入下个filter,
然后获取uri从map中匹配是否存在相应路径,如果map中没有匹配到路径,那么就进行进入下个filter,
如果在map中匹配到路径,就会根据Secured注解去判断是否需要获取token去验证身份,
如果没有Secured注解,就直接进入下一个filter,
如果Secured注解需要验证,就会获取ip和accessToken,
然后用jwt秘钥解密,解密失败则报错退出,
解密正确则进入下一个filter,
ParamCheckerFilter,
会通过Extractor注解去得到需要被检测的参数,
然后使用checkParamInfoList去检测参数是否符合要求,
如
或者
那么需要满足以下三个条件,就能找到未授权sql注入:
1.查找没有被Secured注解的路由,
2.Extractor注解时,是否存在一些参数没有被获取检测,
3.参数执行相应的sql语句,就可能存在sql注入,
但是后面发现都是预编译处理sql的,因此未授权sql注入这条路就利用不了了,
这里刚好存在接口/nacos/v1/ns/instance/statuses?key=DEFAULT_GROUP@@1',
并且Extractor注解也并没有获取key,因此key就绕过了检测,不过key带入进去后,并没有执行相应的sql语句,因此此接口也利用不了,
以下是一些存在信息的未授权接口,
http://192.168.91.1:8848/nacos/v1/console/namespaceshttp://192.168.91.1:8848/nacos/v1/console/namespaces?show=all&namespaceId=http://192.168.91.1:8848/nacos/v2/ns/operator/switcheshttp://192.168.91.1:8848/nacos/v2/ns/operator/metrics?onlyStatus=falsehttp://192.168.91.1:8848/nacos/v1/ns/health/checkers更改日志级别http://192.168.91.1:8848/nacos/v1/ns/ops/log Put logName=naming-push&logLevel=INFO
CVE-2021-29442 可能被利用
设置了nacos.config.derby.ops.enabled=true,
那么就可以调用derby的sql语句,不过只能使用select开头的语句,
利用此接口进行条件竞争文件上传,然后使用select加载恶意包达到命令执行,
总结新版漏洞利用方式
1.新版本依然是默认没有开启鉴权,需要用户开启,不开启则存在未授权
2.如果设置了nacos.core.auth.enable.userAgentAuthWhite=true,可以有useragent绕过权限认证
3.可以利用CVE-2021-29442后台getshell,条件是使用derby数据库,设置了nacos.config.derby.ops.enabled=true
4.存在一些无关紧要的未授权接口
原文始发于微信公众号(船山信安):Nacos2.4.3新版漏洞利用方式总结
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论