大数跨境
0
0

Spring框架的反序列化远程代码执行漏洞分析

Spring框架的反序列化远程代码执行漏洞分析 安全狗
2016-01-25
1
导读:漏洞介绍国外的研究人员zero thoughts发现了一个Spring框架的反序列化远程代码执行漏洞。spr

漏洞介绍
国外的研究人员zero thoughts发现了一个Spring框架的反序列化远程代码执行漏洞。

spring-tx.jar包中的org.springframework.transaction.jta.JtaTransactionManager类存在JNDI反序列化问题。只要创建一个JtaTransactionManager 对象让userTransactionName指向我们注册的RMI链接(如rmi://x.x.x.x:1099/Object)然后将对象发送到有漏洞的服务器,即可执行远程命令。具体细节可以分析漏洞作者的POC代码。

 漏洞发现者的博客
http://zerothoughts.tumblr.com/post/137769010389/fun-with-jndi-remote-code-injection
http://zerothoughts.tumblr.com/post/137831000514/spring-framework-deserialization-rce


漏洞影响
受影响漏洞服务器主要需要满足如下条件:

1. CLASSPATH 中包含了 spring-tx.jar,spring-commons.jar,javax.transaction-api.jar
2. 存在反序列化接口如RMI, JMS, IIOP等
出现漏洞的关键jar包 spring-tx.jar,并不是spring最基本的包,默认并不使用,所以并不是所有使用了spring框架的应用都受影响,需要具体检查是否包含了spring-tx.jar包。


POC简要复现:
环境描述:
Java环境——这里使用的是JDK1.7版本
Maven环境——见下面的maven包 apache-maven-3.3.9-bin.zip
Spring漏洞利用POC——spring-jndi-master.zip

环境搭建:

1. Java环境安装,略

2. Maven安装
直接解压apache-maven-3.3.9-bin.zip ,添加环境变量,然后用mvn –v测试是否安装成功
如我的maven路径:C:\java\apache-maven-3.3.9

添加环境变量:





Mvn –v测试


服务器搭建:

Poc里面有两个文件夹server和client
Server用于搭建包含spring的服务器环境,client用于构建反序列化对象并发送给server

服务器搭建命令如下


首先进入server目录

然后用mvn install安装spring环境



Mvn就是开始安装的maven,server目录下有pom.xml文件。 Mvn install会根据里面的内容来下载安装spring等组件。 最后会将jar包放到target中。



java -cp "target/*" ExploitableServer 9999命令在9999端口起到有漏洞的服务器程序。

ExploitableServer.java比较简单,创建socket等待连接,读取对象。



这样便开启了一个连接



客户端攻击对象构建:

命令与上面相似:



进入目录,安装spring组件,调用代码向服务器发送指令。

Mvn install,客户端也需要安装spring的组件,来使得客户端的java代码能够构造spring对象。



java -cp "target/*" ExploitClient 127.0.0.1 9999 127.0.0.1

"target/* 指定spring路径
ExploitClient 为客户端的main程序

127.0.0.1  9999  127.0.0.1三个参数分别对应为



客户端包含三个文件



ExploitClient是主程序,包含序列化的过程,一些主要出现漏洞的类,以及数据的发送。



HttpFileHandler 主要是构建字节流

ExportObject 是功能代码,构建自己的java代码,服务器有权限就能执行。



执行结果:



自检与修复:
由于主要出现漏洞的地方在于Spring-tx.jar包的JtaTransactionManager类中。 可以检测项目中是否有使用spring-tx.jar包。如果有使用可以对JtaTransactionManager类进行重写。同时有防火墙的用户可以先对数据包中的JtaTransactionManager数据进行过滤,直到源码修复。

POC网络传输数据如下,可以先对使用了JtaTransactionManager的报文进行拦截。




【声明】内容源于网络
0
0
安全狗
安全狗-国内知名的互联网安全品牌,专注于(云)服务器安全
内容 1721
粉丝 0
认证用户
安全狗 厦门市服云信息科技有限公司 安全狗-国内知名的互联网安全品牌,专注于(云)服务器安全
总阅读1.3k
粉丝0
内容1.7k