原创Spring Data Redis <=2.0.3反序列化漏洞

Posted rebeyond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创Spring Data Redis <=2.0.3反序列化漏洞相关的知识,希望对你有一定的参考价值。

Spring Data Redis隶属于Spring Data家族, 提供简单易用的方式来访问Redis缓存。

Spring Data Redis在往Redis里面写数据的时候,默认会先对数据进行序列化,然后把序列化之后的字节码写入Redis;然后当Spring Data Redis从Redis里取数据的时候,会取出字节码进行反序列化操作,在反序列化的过程中没有对目标类进行校验和过滤,可导致远程任意代码执行。

攻击路径:

1.首先准备反序列化payload,参考ysoserial系列。

2.把生成的payload写入Redis中:

redis.set("\\xac\\xed\\x00\\x05t\\x00\\brebeyond",Payload)

这样,名为rebeyond的key中就有了我们构造的payload。

最好选择Redis中已经存在的key,这样等Spring取数据的时候就可以触发代码执行。

3.等待Spring读取我们已经覆盖的key,示例如下:

 

4.Spring侧的机器成功弹出计算器:

 

调用栈如下:

 

其他:

This vulnerability is tested on jdk1.8.0_144+spring 5.0.3+spring data redis 2.0.3+ commons-collections4:4.0

Common-collections4 is not necessary.Some modifications to payload can be applied to <=jdk8u20 without Common-collections4. 

尝试把这个问题提给Spring,不过Spring认为Redis在内网,开发人员有必要保证Redis的安全,所以没有认可该问题,只是更新了他们的产品guidelines ,让用户确保自己的Redis用在安全网络中。下图是pivotal的答复。但是我觉得认为Redis在内网就是安全的有点太乐观,我觉得对于spring来讲更好的解决方案是把默认的序列号引擎由DefaultDeserializer 改为JsonDeserializer:)

 

[0] https://jira.spring.io/browse/DATAREDIS-780

[1] https://github.com/spring-projects/spring-data-redis/commit/1f6790b10099f26c23c46ae5a099ba1023f055b1

 

以上是关于原创Spring Data Redis <=2.0.3反序列化漏洞的主要内容,如果未能解决你的问题,请参考以下文章

spring-data-redis

Spring整合Redis(spring-data-redis)

spring-session-data-redis使用redis共享session

redis集群 与spring-data-redis 集成

spring boot -spring data-redis

spring-data-redis 怎么监听消息队列有消息来了