2026-10-29 16:25:04
Dubbo反序列化漏洞(CVE-2019-17564)是由于HTTP协议处理用户POST数据时未对序列化内容进行过滤,导致恶意对象反序列化触发远程代码执行(RCE)。 以下为详细分析:
一、漏洞背景与影响范围2.7.0 ≤ Apache Dubbo ≤ 2.7.4
2.6.0 ≤ Apache Dubbo ≤ 2.6.7
Apache Dubbo 2.5.x
下载并启动Zookeeper(作为注册中心),启动成功后客户端显示“Welcome to ZooKeeper!”。
使用官方样例dubbo-samples-http,修改pom.xml将Dubbo版本改为漏洞版本(如2.7.3)。
添加Commons Collections4的Gadget链依赖。
修改spring/http-provider.xml中的IP和端口配置。
依次启动HttpProvider和HttpConsumer,确认服务正常运行。
使用ysoserial生成恶意序列化数据:
java -jar ysoserial.jar CommonsCollections4 calc > dubbo.ser通过Burp Suite发送POST请求,携带恶意序列化数据,成功触发计算器弹出。

请求处理流程:
DispatcherServlet#service():接收HTTP请求,调用handler.handle(request, response)。

handleRequest():根据URI获取处理对象skeletonMap,失败则报错;成功则调用handleRequest。

readRemoteInvocation():读取请求中的序列化数据,封装为ObjectInputStream对象ois。

doReadRemoteInvocation():直接调用ois.readObject()反序列化数据,未进行任何过滤。

漏洞触发条件:
用户输入未经验证直接反序列化。
存在可用的Gadget链(如Commons Collections4)。
升级到Dubbo最新版本(≥2.7.5或≥2.6.8),修复了未过滤序列化数据的逻辑。
新版本中,获取skeleton对象后调用JsonRpcBasicServer.handle()处理请求,替代原有的危险反序列化流程。
升级Dubbo至安全版本。
避免使用不安全的序列化协议(如Java原生序列化),改用JSON等安全格式。
部署Web应用防火墙(WAF)拦截恶意序列化数据。