一、Java 序列化与反序列化

Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存、文件、数据库中,ObjectOutputStream类的 writeObject() 方法可以实现序列化。

Java 反序列化是指把字节序列恢复为 Java 对象的过程,ObjectInputStream 类的 readObject() 方法用于反序列化。

java defaultReadObject 反序列化漏洞 java反序列化漏洞有哪些_Java

序列化与反序列化是让 Java 对象脱离 Java 运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。主要应用在以下场景:

HTTP: 多平台之间的通信,管理等

RMI:是 Java 的一组拥护开发分布式应用程序的 API,实现了不同操作系统之间程序的方法调用。值得注意的是,RMI 的传输 100% 基于反序列化,Java RMI 的默认端口是 1099 端口。

JMX: JMX 是一套标准的代理和服务,用户可以在任何 Java 应用程序中使用这些代理和服务实现管理,中间件软件 WebLogic 的管理页面就是基于 JMX 开发的,而 JBoss 则整个系统都基于 JMX 构架。

2016年Spring RMI反序列化漏洞今年比较出名的:Jackson,FastJson
Java 十分受开发者喜爱的一点是其拥有完善的第三方类库,和满足各种需求的框架;但正因为很多第三方类库引用广泛,如果其中某些组件出现安全问题,那么受影响范围将极为广泛。

二、Java反序列化漏洞与Weblogic反序列化漏洞介绍
1.Java反序列化漏洞历史
最为出名的大概应该是:15年的Apache Commons Collections 反序列化远程命令执行漏洞,其当初影响范围包括:WebSphere、JBoss、Jenkins、WebLogic 和 OpenNMSd等。

Apache Commons Collections 3和4,Groovy,Spring,只要目标应用的Class Path中包含这些库,可让readObject()实现任意命令执行。影响比较广泛的就是Apache Commons Collections这个库,中间件基本都会涉及使用此库。

  • Weblogic Java反序列化漏洞介绍
    因为weblogic底层也使用Apache Commons Collections库,WebLogic 存在Java反序列化漏洞无疑的。不过在漏洞修复这方面,Oracle一直未完全修复完。以下是基于Weblogic t3协议引起远程代码执行的反序列化漏洞统计:

  • CVE-2015-4852
    CVE-2016-0638
    CVE-2016-3510
    CVE-2017-3248
    CVE-2018-2628
    CVE-2019-2890