Apache Kafka readObject漏洞分析报告

华盟原创文章投稿奖励计划

http://p0.qhimg.com/t0133fd0bcae5557c94.jpg

作者:c1tas@360CERT

I.背景介绍


Apache Kafka 是开源的Apache流处理平台,由 Apache编写,采用scala与java。该项目旨在于提供一个统一的、高吞吐量的、低延迟的实时数据处理平台。

II.漏洞概述


Kafka 内部实现一个带有readObject方法的并且未带有任何校验的危险类,如果用户在使用该框架中,使用了该类的话,通过设置相关参数后实例化该类的时候会导致远程代码执行。

360CERT对此漏洞进行跟踪分析,考虑到实际生产环境这样的代码逻辑并不常见,根据影响,确认为中低危漏洞。

III.漏洞详情


A.简要技术细节

漏洞成因描述和简要技术细节(可参考官方安全公告technical details)

org.apache.kafka.connect.storage.FileOffsetBackingStore  这个 class 拥有一个反序列化操作,在执行

FileOffsetBackingStore 对象的start方法时候会触发并反序列恶意序列化对象,导致代码执行。

因为Kafka是一个开源的框架,如果用户在使用的过程中实现了类似实例化FileOffsetBackingStore这个对象,并且传入参数受到控制的业务逻辑的话就会受到该漏洞的影响。

B.影响版本

Apache Kafka

0.10.0.0 -> 0.11.0.0(latest)

均受到影响

IV.漏洞细节分析


首先生成一个恶意的对象,这个对象在反序列化后就会执行恶意代码,此处采用ysoserial.payloads.Jdk7u21这个开源框架中的方法,直接产生一个恶意对象

http://p6.qhimg.com/t01c75269aee84a4289.png

生成这个恶意对象后,将这个对象序列化,然后存储成一个文件,漏洞是FileOffsetBackingStore这个只接受文件的class出的所以需要传入这个文件。

可以看到我们将执行的命令是touch 360CERT创建一个名为360CERT的文件。

接下来给即将实例化的FileOffsetBackingStore对象做一些初始化设置,将要读取的文件路径传入。

http://p2.qhimg.com/t01abd65842b306ece8.png

调用configure方法后

http://p3.qhimg.com/t010d8432eaa375f283.png

会设置this.file这个属性的值,为我们传入的文件

调用start方法后

http://p9.qhimg.com/t01fda9e3d684cb68d0.png

http://p0.qhimg.com/t015bb32b6637328c5b.png

所以直接进入load方法

http://p5.qhimg.com/t019c64ab0614b308fa.png

可以看到这里将this.file的值读取到is中,这里就是我们构造的恶意序列化的对象

而接下来调用的readObject()方法正好会序列化这个对象

http://p9.qhimg.com/t01ca992929628b6d52.png

https://www.77169.net/wp-content/uploads/2017/08/t017a842bc660774ec0.png

可以看到360CERT这个文件已经被我们创建了。

V.时间线


2017-7-19oss-security发布安全公告

2017-7-19360CERT完成对漏洞的分析并形成报告

VI.参考来源


http://www.openwall.com/lists/oss-security/2017/07/19/1

 

本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4190.html

本文原创,作者:AlexFrankly,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/164714.html

发表评论