【原创】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

原文地址:https://www.cnblogs.com/rebeyond/p/9040810.html

时间: 2024-11-08 22:01:33

【原创】Spring Data Redis <=2.0.3反序列化漏洞的相关文章

Spring Data Redis与Jedis的选择(转)

说明:内容可能有点旧,需要在业务上做权衡. Redis的客户端有两种实现方式,一是可以直接调用Jedis来实现,二是可以使用Spring Data Redis,通过Spring的封装来调用.应该使用哪一个呢?基于当前版本Spring Data Redis 1.0.1和Jedis 2.0.0,分析如下: Spring Data Redis 1.0.1 优点 1.对具体Redis客户端做了封装,客户端可在Jedis,Jredis,Rjc等Java客户端中做出选择和切换 . 2.用template对调

Spring Data Redis学习

本文是从为知笔记上复制过来的,懒得调整格式了,为知笔记版本是带格式的.点这里 为知笔记版本 Spring Data Redis 学习 Version 1.8.4.Release 前言 1.新功能 1.1.Spring Data Redis 1.8 新特性 1.2.Spring Data Redis 1.7 新特性 1.3.Spring Data Redis 1.6 新特性 1.4.Spring Data Redis 1.5 新特性 介绍 2.为什么选择Spring Data Redis? 3.要

Spring Data Redis 管理Redis 之1

redis是一款非常流行的Nosql,提供的功能非常强大,本节不再赘述. 本文简单介绍Spring Data框架提供的spring_data_redis模块,所提供的强大功能.虽然,spring_data_redis不具体负责与redis通信,但提供了丰富的外围功能. 主要包含以下内容 搭建测试环境 序列工具 认识RedisConnectionFactory&RedisTemplate 1.搭建测试环境 1.1 pom.xml <?xml version="1.0" en

Spring Data Redis简介以及项目Demo,RedisTemplate和 Serializer详解

一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis,走了不少弯路,所以总结一条我认为不错的学习路径给大家: 1.<The Little Redis Book> 是一本开源PDF,只有29页的英文文档,看完后对Redis的基本概念应该差不多熟悉了,剩下的可以去Redis官网熟悉相关的命令. 2.<Redis设计与实现> 如果想继续深入,推

spring mvc Spring Data Redis RedisTemplate [转]

一.概念简介: Redis: Redis是一款开源的Key-Value数据库,运行在内存中,由ANSI C编写,详细的信息在Redis官网上面有,因为我自己通过google等各种渠道去学习Redis,走了不少弯路,所以总结一条我认为不错的学习路径给大家: 1.<The Little Redis Book> 是一本开源PDF,只有29页的英文文档,看完后对Redis的基本概念应该差不多熟悉了,剩下的可以去Redis官网熟悉相关的命令. 2.<Redis设计与实现> 如果想继续深入,推

Spring Data Redis入门示例:数据序列化 (四)

概述 RedisTemplate默认使用的是基于JDK的序列化器,所以存储在Redis的数据如果不经过相应的反序列化,看到的结果是这个样子的: 可以看到,出现了乱码,在程序层面上,不会影响程序的运行,但当出现数据错误,对数据进行排查时,就无从下手了. 序列化器 在Spring Data Redis中,用户自定义类型和存储数据之间的转换(反之亦然)由org.springframework.data.redis.serializer包下的类进行处理. 这个包包含两种类型的序列化程序,它们负责序列化过

使用Spring Data Redis操作Redis(一)

Spring-Data-Redis项目(简称SDR)对Redis的Key-Value数据存储操作提供了更高层次的抽象,类似于Spring Framework对JDBC支持一样. 项目主页:http://projects.spring.io/spring-data-redis/ 项目文档:http://docs.spring.io/spring-data/redis/docs/1.5.0.RELEASE/reference/html/ 本文主要介绍Spring Data Redis的实际使用. 1

Spring Data Redis 让 NoSQL 快如闪电(2)

[编者按]本文作者为 Xinyu Liu,文章的第一部分重点概述了 Redis 方方面面的特性.在第二部分,将介绍详细的用例.文章系国内 ITOM 管理平台 OneAPM 编译呈现. 把 Redis 当作数据库的用例 现在我们来看看在服务器端 Java 企业版系统中把 Redis 当作数据库的各种用法吧.无论用例的简繁,Redis 都能帮助用户优化性能.处理能力和延迟,让常规 Java 企业版技术栈望而却步. 1. 全局唯一增量计数器 我们先从一个相对简单的用例开始吧:一个增量计数器,可显示某网

使用Spring Data Redis操作Redis(集群版)

继上一篇文章http://www.cnblogs.com/EasonJim/p/7804545.html使用Spring Data Redis操作Redis用的是单机版,如果是集群版的集成其实差别不大.主要思路如下: 1.先建立连接工厂,这个连接工厂是用来设置IP,端口,账号密码等.(在这一步时,传递一个集群的地址列表,不再是单独一个去指定) 2.通过连接工厂建立Session. 3.然后在代码上注入Session进行使用. 简要实现步骤,操作的方法和单机版的类似: 一.使用spring-dat