ref:https://blog.spoock.com/2018/05/16/cve-2018-1259/

漏洞信息

看pivotal发布的漏洞信息如下

通过发布的漏洞信息可以知道,漏洞组件是在XMLBeam1.4.14或者是更早的版本,主要原因是没有限制XML文件外部实体引用。而Spring Data Commons的某些版本中使用了存在漏洞的XMLBeam组件。

环境搭建

下载demo环境

git clone https://github.com/spring-projects/spring-data-examples.git
cd spring-data-examples
git checkout ad2b77e

使用IDEA打开其中的web/projection项目,修改其中的pom.xml文件: 修改spring-data-commons的版本

<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>

添加spring-boot的依赖

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>

漏洞组件版本如下:

注释example.usersUserControllerClientTests.javaUserControllerIntegrationTests.java中的代码(主要是测试代码,对漏洞环境无影响)。

漏洞复现

使用IDEA启动程序。采用POST方法发送XML的数据:

成功地读取了文件。

漏洞分析

通过漏洞修复commit发现,对DefaultXMLFactoriesConfig.java进行了修改,如下:

  1. 配置了默认的feature

  2. 禁止实体引用、禁止合并多个XML文档。关于XInclude的用法可以参考XML包含机制

通过补丁分析,漏洞原因是在于XMLBeam漏洞版本中没有限制外部实体。

当我们发送Payload时,是由example.users.UserController中的@PostMapping(value = "/")来处理请求:

其中user.getFirstname()已经完成了参数解析并读取c:/windows/win.ini中的内容,所以我们发送的Payload在发送到Web应用之前已经由Spring Data Commons对发送的参数进行了解析并绑定到user对象上。而Spring Data Commons是利用XMLBeam解析XML文件,这样就导致了在Web应用响应请求时已经完成了XML的解析从而造成了XXE漏洞。

通过层层追踪,XML的解析最终是由org.xmlbeam.ProjectionInvocationHandler:invokeReadProjection()处理,

XML的解析是由Node dataNode = (Node)expression.evaluate(node, XPathConstants.NODE);完成,其中expression就有xpath表达式,node表示当前的document。最终解析完毕之后,data返回的就是win.ini的内容。

当我们更新XMLBeam的版本至1.4.15时,即设置了instance.setXIncludeAware(this.isXIncludeAware);instance.setExpandEntityReferences(this.isExpandEntityReferences);。分析invokeReadProjection()函数

可以看到expression中的xpath表达式保持不变,但是data此时的结果已经为空,说明通过设置禁止实体引用就导致了XXE漏洞失效。

其实整个XML的解析与参数整个请求参数的传递并没有关系只和DefaultXMLFactoriesConfig的配置有关,所以漏洞分析并不需要跟踪XML文件的解析过程,也不需要通过Spring Data Commons去追踪数据流,只需要了解这个漏洞的本质原因即可。

总结

这个XXE漏洞本质是因DefaultXMLFactoriesConfig.java配置不当而导致的,Spring Data Commons的某些版本中恰好使用了含有漏洞的XMLBeam组件。这也就引出了一个问题,在Java这种大量使用第三方包的情况下,如何避免因第三方包的漏洞导致自己的应用也受到危害呢?

ref:spring-data-XMLBean XXE复现分析的更多相关文章

  1. spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  2. 【spring boot 系列】spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  3. spring security 实践 + 源码分析

    前言 本文将从示例.原理.应用3个方面介绍 spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 Spring Security 是 ...

  4. Spring Data REST PATCH请求远程代码执行漏洞(CVE-2017-8046) 本地复现方法

      #1背景 Spring Data REST是Spring Data项目的一部分,可以轻松地在Spring Data存储库之上构建超媒体驱动的REST Web服务. 恶意的PATCH请求使用精心构造 ...

  5. CVE-2018-1273 Spring Data Commons 远程命令执行漏洞复现

    一.漏洞描述 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data Commons是Spring Data下所有子项目共享的基础框架.Spring Data ...

  6. Spring Data JPA应用 之查询分析

    在Spring Data JPA应用之常规CRUD操作初体验 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)尾附上了JpaRepository接口继承关系及方法,可以知道JpaRepos ...

  7. 转:使用 Spring Data JPA 简化 JPA 开发

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  8. 使用 Spring Data JPA 简化 JPA 开发

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  9. Spring IOC 容器源码分析系列文章导读

    1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...

随机推荐

  1. [吴恩达机器学习笔记]12支持向量机4核函数和标记点kernels and landmark

    12.支持向量机 觉得有用的话,欢迎一起讨论相互学习~Follow Me 12.4 核函数与标记点- Kernels and landmarks 问题引入 如果你有以下的训练集,然后想去拟合其能够分开 ...

  2. shell多进程的实现

    需求:多个脚本彼此互不干涉,同时运行,节省时间 菜鸟级实现: #!/bin/sh dir="/data/test" $dir/sbin/test1.sh >> $dir ...

  3. ZOJ 3782 G - Ternary Calculation 水

    LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3782 题意:给出3个数和两个符号(+-*/%) 思路:拿到题目还 ...

  4. 《JavaScript 实战》:Tween 算法及缓动效果

    Flash 做动画时会用到 Tween 类,利用它可以做很多动画效果,例如缓动.弹簧等等.我这里要教大家的是怎么利用 Flash 的 Tween 类的算法,来做js的Tween算法,并利用它做一些简单 ...

  5. 如何编写高质量的 jQuery 代码?

    想必大家对于jQuery这个最流行的javascript类库都不陌生,而且只要是前端开发人员肯定或多或少的使用或者接触过,在今天的这篇文章中,我们将介绍一些书写高质量jQuery代码的原则,我们不单单 ...

  6. Web 开发者不可不知的15条编码原则

    HTML 已经走过了近20的发展历程.从HTML4到XHTML,再到最近十分火热的HTML5,它几乎见证了整个互联网的发展.但是,即便到现在,有很多基础的概念和原则依然需要开发者高度注意.下面,向大家 ...

  7. Codeforces 765F Souvenirs

    time limit per test 3 seconds memory limit per test 512 megabytes input standard input output standa ...

  8. 51nod1149 Pi的递推式

    基准时间限制:1 秒 空间限制:131072 KB 分值: 640 F(x) = 1 (0 <= x < 4) F(x) = F(x - 1) + F(x - pi) (4 <= x ...

  9. 20155117王震宇 2006-2007-2 《Java程序设计》第一周学习总结

    20155117王震宇 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 尽量简单的总结一下本周学习内容 尽量不要抄书,浪费时间 看懂就过,看不懂,学习有心得的 ...

  10. html5手机Web单页应用实践--起点移动阅读

    一开始以hybrid形式做了一个android的小说阅读客户端,叫4G阅读.而后由于业务需求,要迅速实现纯手机html5 版的,所以就直接在原先客户端内内嵌的网页进行改版,快速实现以后在优化的过程中发 ...