点击上方“盛邦安全WebRAY”可以订阅
漏洞描述
Apache Dubbo是一款高性能、轻量级的开源java Rpc分布式服务框架。Dubbo提供面向接口的远程过程调用、集群容错和负载均衡、服务自动注册与发现这三大主要功能。(Apache Dubbo详细介绍:http://dubbo.apache.org/en-us/index.html)
![b04d0b22f8a975e1eed6b66bc27462df.png](https://i-blog.csdnimg.cn/blog_migrate/8dd3fc129b7aa9883a3b502341eacea0.jpeg)
当Apache Dubbo启用HTTP协议之后,攻击者提交一个消费者的远程调用的POST请求,Apache Dubbo存在一个不安全的反序列化漏洞,从而导致远程代码执行。
影响版本:
2.7.0 <= Apache Dubbo <= 2.7.4.1
2.6.0 <= Apache Dubbo <= 2.6.7
Apache Dubbo = 2.5.x
漏洞分析
从burp发包的报错响应包可以看出入口是javax.
servlet.http.HttpServlet.service(HttpServlet.java:790),在该处加入断点,调试跟踪函数的走向。
![000ac6b7b12cea014ef4f677ac800f9c.png](https://i-blog.csdnimg.cn/blog_migrate/e58c389f1b131f0d994c2c989700f63b.jpeg)
进入到org.apache.dubbo.remoting.http.servlet.
DispatcherServlet文件中,先判断handler对象是否为null,不为null继续调用handler.handle(request, response)。
![9962cb13373443d5383414325044645e.png](https://i-blog.csdnimg.cn/blog_migrate/70025d0f101564cfc95574291e4c9aae.jpeg)
进入到org.apache.dubbo.rpc.protocol.http.
HttpProtocol文件中,先判断请求方式是否是POST,从request对象中获取remoteAddr和remotePort,调用setRemoteAddress函数,然后进入skeleton.
handleRequest函数。
![02a872d08543044100e8071cc99a9728.png](https://i-blog.csdnimg.cn/blog_migrate/92c9f0ab037909f5ac8e5b520876c747.jpeg)
进入org.springframework.remoting.httpinvoker.
HttpInvokerServiceExporter文件,调用readRemoteInvocation函数。
![30c15650dac7907b169392ef2ec8d69c.png](https://i-blog.csdnimg.cn/blog_migrate/db241ebcabc075a89c26989c5cb15bb5.jpeg)
跟进 readRemoteInvocation函数,其调用RemoteInvocation.readRemoteInvocation函数。
![d264ace23c66af88a34465f925f995c6.png](https://i-blog.csdnimg.cn/blog_migrate/b640b38befe8dd1c56f072efe15c336b.jpeg)
跟进RemoteInvocation.readRemoteInvocation函数,其调用doReadRemoteInvocation函数。
![03af9f49992094e693fa2abb1d836004.png](https://i-blog.csdnimg.cn/blog_migrate/1fa11de575205b421f9e8e04acc952ed.jpeg)
进入org.springframework.remoting.rmi.
RemoteInvocationSerializingExporter文件,调用readObject函数。
![697c2cfdacbf71c51392fe3a1904cac2.png](https://i-blog.csdnimg.cn/blog_migrate/486ed8cc989b95eac97875d483c7ee7b.jpeg)
其中ois为post请求的data数据,传入ois的数据没有安全过滤和处理,直接执行了readObject方法导致RCE产生。
![c876679b4e7c9618c875c32556ec7d2a.png](https://i-blog.csdnimg.cn/blog_migrate/f686edec35c013b7c05f7f43c10c3340.jpeg)
修复建议
升级Apache Dubbo到2.7.5版本。
![6c81d0fdf6e1dc325cf6d75a612e96ac.gif](https://i-blog.csdnimg.cn/blog_migrate/c05a26d37db8c94528203c340790da61.gif)
![6c81d0fdf6e1dc325cf6d75a612e96ac.gif](https://i-blog.csdnimg.cn/blog_migrate/c05a26d37db8c94528203c340790da61.gif)
![140b6aefed3b425dc1ddcbff01ecc7c7.png](https://i-blog.csdnimg.cn/blog_migrate/7cf42128103d2ac63a69f1b5467818ba.jpeg)
![3a657e6ab14f659a289a0e45a87c1470.png](https://i-blog.csdnimg.cn/blog_migrate/d3bcde84fc0f01b75017c3f4fed7bb95.jpeg)
![1595e585eb95c5f5f5cab867db532980.png](https://i-blog.csdnimg.cn/blog_migrate/3f91b59ff24c1088a6b16d1bcb959b9f.jpeg)