zoukankan      html  css  js  c++  java
  • 【原创】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("xacxedx00x05tx00rebeyond",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

  • 相关阅读:
    图片处理帮助类
    网站前端的优化
    状态码大全
    服务端性能监控工具Nmon使用方法
    jmeter测试报告解析
    jmeter聚合报告
    jmeter跨线程组调用参数
    jmeter生成测试报告
    Jmeter获取cookie
    monkey的使用方法和常见命令
  • 原文地址:https://www.cnblogs.com/rebeyond/p/9040810.html
Copyright © 2011-2022 走看看