浅析反序列化漏洞【网络安全】

SOFARPC简介

​ SOFARPC 是一个高性能、高扩展性、生产级的 Java RPC 框架。

​ 2024年1月24日,启明星辰VSRC监测到SOFARPC中修复了一个反序列化漏洞(CVE-2024-23636),该漏洞的CVSSv3评分为9.8。由于SOFARPC 默认使用 SOFA Hessian 协议来反序列化接收到的数据,而 SOFA Hessian 协议使用黑名单机制来限制危险类的反序列化。SOFARPC 版本5.12.0之前,威胁者可通过Gadget链(只依赖于JDK,不依赖任何第三方组件)绕过SOFA Hessian黑名单保护机制,导致远程代码执行。

序列化分析

​ sofa-rpc默认使用 SOFA Hessian 协议来反序列化接收到的数据,所以,下载源码去看对应的实现。

​ 对应的代码在com.alipay.sofa.rpc.codec.sofahessian这个包下面

com/alipay/sofa/rpc/codec/sofahessian/SofaHessianSerializer.java# encode()

在这里插入图片描述

这里先对传入obj获取对应的serializer,若果没有获取到,就使用默认Hessian进行序列化。

com/alipay/sofa/rpc/codec/sofahessian/SofaHessianSerializer.java# decode()

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

对应两种反序列方式,可以看到就是hessian序列化和反序列化外面套了一成。

在这里插入图片描述

尝试一下,直接调用它的序列化,反序列化方法是能可以命令执行的。

因为直接调用它的序列化和反序列函数,是没用过黑名单的。

具体的流程就是非常短的一条链子

HashMap.equals
    UIDefault.equals
            Hashtable.equals
                UIDefault.get
                    UIDefault.getFromHashtable
                    SwingLazyValue.createValue

简单说就是UIDefault它里面没有equals方法,调用它的父类的equals,然后触发UIDefault.get。完成了 only jdk的调用。

在这里插入图片描述

这是tostring的方式。

exp构造分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值