author: xxx@360CERT
Apache Kafka 是开源的Apache流处理平台由 Apache编写采用scala与java。
该项目旨在于提供一个统一的、高吞吐量的、低延迟的实时数据处理平台
org.apache.kafka.connect.storage.FileOffsetBackingStore
这个class
拥有一个反序列化操作,在执行
FileOffsetBackingStore
对象的start
方法时候会触发并反序列恶意序列化对象,导致代码执行
因为Kafka
是一个开源的框架,如果用户在使用的过程中实现了类似实例化FileOffsetBackingStore
这个对象,并且传入参数受到控制的业务逻辑的话就会受到该漏洞的影响
Apache Kafka
0.10.0.0 -> 0.11.0.0(latest)
均受到影响
首先生成一个恶意的对象,这个对象在反序列化后就会执行恶意代码,此处采用ysoserial.payloads.Jdk7u21
这个开源框架中的方法,直接产生一个恶意对象
生成这个恶意对象后,将这个对象序列化,然后存储成一个文件,漏洞是FileOffsetBackingStore
这个只接受文件的class出的所以需要传入这个文件
可以看到我们将执行的命令是touch 360CERT
创建一个名为360CERT
的文件
接下来给即将实例化的FileOffsetBackingStore
对象做一些初始化设置,将要读取的文件路径传入
调用configure
方法后
会设置this.file
这个属性的值,为我们传入的文件
调用start
方法后
所以直接进入load
方法
可以看到这里将this.file
的值读取到is
中,这里就是我们构造的恶意序列化的对象
而接下来调用的readObject()
方法正好会分序列化这个对象
可以看到360CERT
这个文件已经被我们创建了