Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 – 【CVE-2019-3799】 | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 – 【CVE-2019-3799】

申博_安全防护 申博 173次浏览 已收录 0个评论

申博网络安全巴士站

申博-网络安全巴士站是一个专注于网络安全、系统安全、互联网安全、信息安全,全新视界的互联网安全新媒体。

————————————-Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

破绽复现

GET /foo/default/master/..%252F..%252F..%252F..%252Fetc%252fpasswd HTTP/1.1
Host: localhost:8888

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

破绽剖析

Spring Cloud Config是Spirng Cloud下用于分布式配置治理的组件,分为Config-ServerConfig-Client两个脚色。 Config-Server卖力集合存储/治理配置文件,Config-Client则能够从Config-Server供应的HTTP接口猎取配置文件运用。2019年4月16日,Pivotal官方宣布平安公告,Spring Cloud Config Server 局部版本存在目次遍历破绽,据此能够猎取Server端服务器文件。

依据官方文档,能够经由过程以下要求GET /{name}/{profile}/{label}/{path} 来猎取配置文件,nameprofilelabel的寄义与通例情况下的endpoint雷同,而path是指文件名。以官方示例为情况,我们要求 https://github.com/spring-cloud-samples/config-repo/blob/master/test.json 这个文件并以文本情势返回 ,则我们需要向Spring Cloud Config Server发出以下要求:

GET http://127.0.0.1:8888/foo/label/master/test.json

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

依据要求花样能够在 org/springframework/cloud/config/server/resource/ResourceController.java:54 中找到对应的处置惩罚 @RequestMapping("/{name}/{profile}/{label}/**")

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

个中path值即为payload:..%2F..%2F..%2F..%2Fetc%2fpasswd

跟入retrieveorg/springframework/cloud/config/server/resource/ResourceController.java:104

synchronized String retrieve(ServletWebRequest request, String name, String profile,
            String label, String path, boolean resolvePlaceholders) throws IOException {
        name = resolveName(name);
        label = resolveLabel(label);
        Resource resource = this.resourceRepository.findOne(name, profile, label, path);
        ...
    }

这里会依据前面所传前提猎取到resource。文档中提到only the first one to match is returned,以是继承跟入findOne:

关于安卓的调试要领(二)

关于native层的调试-so 首先介绍一下什么是native层。接下来会介绍so层的patch,调试及基于so层简单的反调试和pass技巧。 native 一般指android的底层的,这个层的代码大部分由c/c++实现,具体的机制为JNI,齐为双向机制通过JNI,java代

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

能够看到这里locations的值为file:/tmp/config-repo-7168113927339570935/,这是Config-Server从后端拉取到配置文件时暂时寄存,一般情况下将会在该文件夹下举行文件的查找,好比test.json

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

不外我们传入的倒是..%2F..%2F..%2F..%2Fetc%2fpasswd,终究拼接出来的文件url即为:

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

返回后猎取到的resource即为/etc/passwd,挪用StreamUtils.copyToString(is, Charset.forName("UTF-8")读取到文件内容:

Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 - 【CVE-2019-3799】

破绽补丁

https://github.com/spring-cloud/spring-cloud-config/commit/3632fc6f64e567286c42c5a2f1b8142bfde505c2

主要在猎取到local后举行了推断:

if (!isInvalidPath(local) && !isInvalidEncodedPath(local)) {
    Resource file = this.resourceLoader.getResource(location)
            .createRelative(local);
    if (file.exists() && file.isReadable()) {
        return file;
    }
}

isInvalidPath用于检测个中是不是含有:/..WEB-INF等症结字样,isInvalidEncodedPath中在举行编解码后还是挪用isInvalidPath举行检测。

关于安卓的调试要领(二)

关于native层的调试-so 首先介绍一下什么是native层。接下来会介绍so层的patch,调试及基于so层简单的反调试和pass技巧。 native 一般指android的底层的,这个层的代码大部分由c/c++实现,具体的机制为JNI,齐为双向机制通过JNI,java代


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明Spring Cloud Config Server 途径穿越与恣意文件读取破绽剖析 – 【CVE-2019-3799】
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址