Apache Dubbo是一款高性能Java RPC框架,在其历史版本中存在多个反序列化漏洞,可能导致远程代码执行(RCE)。这些漏洞通常出现在Dubbo的协议处理、序列化/反序列化过程中。
# 搭建漏洞测试环境
git clone https://github.com/apache/dubbo.git
cd dubbo
git checkout <有漏洞的版本>
mvn clean install
org.apache.dubbo.common.serialize
包中的序列化实现org.apache.dubbo.remoting
中的协议处理代码ObjectInput
和ObjectOutput
接口的实现重点关注:
- Hessian2ObjectInput
- Hessian2ObjectOutput
- DecodeableRpcInvocation
- DubboCodec
// 示例:Hessian2反序列化POC
public class DubboPOC {
public static void main(String[] args) throws Exception {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
Hessian2Output out = new Hessian2Output(bos);
// 构造恶意对象
out.writeObject(new恶意对象());
out.flush();
byte[] data = bos.toByteArray();
// 发送给Dubbo服务...
}
}
使用IDEA或Eclipse进行调试:
1. 在DubboCodec.decodeBody()
方法设置断点
2. 跟踪反序列化过程
3. 观察恶意payload如何被解析执行
xml
<dubbo:protocol name="dubbo" serialization="fastjson" />
java
public class SafeSerializationFilter implements SerializationFilter {
@Override
public boolean canSerialize(Class<?> clazz) {
// 只允许特定类序列化
return allowedClasses.contains(clazz.getName());
}
}
telnet
等Serialization
接口的实现类ObjectInput
/ObjectOutput
的包装流程SerializationOptimizer
实现ExchangeCodec
和DubboCodec
的解码过程通过以上方法可以系统性地分析Dubbo反序列化漏洞,发现潜在的安全风险。