码迷,mamicode.com
首页 > 编程语言 > 详细

【CVE-2020-5405】spring-cloud-config-server路径穿越漏洞分析

时间:2020-03-10 21:53:44      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:文件内容   alt   攻击   根据   ima   存在   case   index   release   

0x00 产品简介

Spring Cloud Config是Spirng Cloud下用于分布式配置管理的组件,分为Config-ServerConfig-Client两个角色。其中Config-Server可以配置多种源获取配置,如从git,svn,native等。
 
0x01 漏洞简介
在配置仓库为本地native的情况下,攻击者可以获取config-server服务器上的任意带后缀文件
 
0x02 漏洞影响版本
2.2.x prior to 2.2.2
2.1.x prior to 2.1.7
 
0x03 漏洞等级
高危(官方评级)
 
0x04 漏洞分析
基础环境搭建,https://github.com/spring-cloud/spring-cloud-config/releases/tag/v2.1.1.RELEASE,拉取zip包解压,导入至idea
查看官方commit,分析漏洞位置
技术图片

 

其中第一个红框,https://github.com/spring-cloud/spring-cloud-config/commit/651f458919c40ef9a5e93e7d76bf98575910fad0

删除了resolveName和reolveLabel的代码,代码将(_)替换为/,很有可能是造成此次漏洞的原因

 技术图片技术图片

 

在下方测试代码进行了一定的增改,其中findOne函数里面的payload为上一次CVE-2019-3799的测试代码,对测试代码进行了增改想必是为了这一次漏洞做变更,重点留意到这里使用的是native本地仓库配置

技术图片

 

根据上述分析,尝试配置sping-cloud-config-server的仓库为本地仓库,在进行验证

配置configserver.yml,修改file:///后路径为本地仓库路径,其内容为https://github.com/spring-cloud-samples/config-repo/
技术图片

 

 根据resolveLabel和resolveName的变动,尝试下断点至@RequestMapping("/{name}/{profile}/{label}/**")

技术图片

 

 在跟踪至GenericResourceRepository findOne函数时

技术图片

 

 

对比github commit的变动,新增了一个对location的判断

技术图片

 

猜测this.service.getLocations中出现了问题,继续跟进

技术图片

 

 继续跟进getLocations,程序跳至org.springframework.cloud.config.server.environment.NativeEnvironmentRepository getLocations方法

技术图片

 

在addLableLocations属性为true时将label与location直接进行拼接,判断目录是否存在,存在则添加到output数组中,最后传进Locations对象中返回,很明显这里就是问题所在

技术图片

 

结合前面在retrieve方法中resolveLable将label中的(_)替换为/,基本可以摸清payload的构造

技术图片

 

 技术图片

 

 关键点说清楚了,经后续调试,构造payload如下:

payload

技术图片

 疑点1:按照测试的目录,应该是跳两层目录至根目录为什么这里用了三层跳?

看到FileUrlResource中先是用createRelcativeURL进行了处理

 技术图片

 

 继续跟进,发现使用URL来处理的

技术图片

 

跟进内部,发现是parseURL会去除第一个/../,所以实际跳目录的时候要多传入

技术图片

 

 疑点2:为什么会获取不到没有后缀的文件?

看到retrieve函数中在获取到文件内容后面的操作,“StringUtils.getFilenameExtension(resource.getFilename()).toLowerCase();”,尝试获取后缀,由于没有后缀返回null,空对象做toLowerCase操作出现异常,而后又由于没有做异常捕获,导致程序直接退出

技术图片

 

 后续官方在修补漏洞的时候也顺带把这个bug给修补了,https://github.com/spring-cloud/spring-cloud-config/commit/740153b5aa74d960116f28be9c755e3b7debd2a2

技术图片

【CVE-2020-5405】spring-cloud-config-server路径穿越漏洞分析

标签:文件内容   alt   攻击   根据   ima   存在   case   index   release   

原文地址:https://www.cnblogs.com/r00tuser/p/12458518.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!