背景:
近日监测到Apache Dubbo存在反序列化漏洞(CVE-2019-17564),此漏洞可导致远程代码执行。Apache Dubbo是一款应用广泛的高性能轻量级的Java RPC分布式服务框架。鉴于漏洞危害较大,建议尽快更新软件。
情报通告:
威胁程度:
个人风险评级:低危
企业风险评级:中危
情报风险预警:对公司影响等级为中,对使用Apache Dubbo相应版本的企业均有被攻击的风险。
情报描述:
Apache Dubbo是一个分布式框架,致力于提供高性能透明化的RPC远程服务调用方案,以及SOA服务治理方案。Apache Dubbo在实际应用场景中主要负责解决分布式的相关需求。
Apache Dubbo支持多种协议,官方推荐使用 Dubbo 协议,CVE-2019-17564是属于Apache Dubbo HTTP协议中的一个反序列化漏洞,该漏洞的主要原因在于当Apache Dubbo启用HTTP协议之后,Apache Dubbo在接受来自消费者的远程调用请求的时候存在一个不安全的反序列化行为,最终导致了远程任意代码执行。
漏洞分析
漏洞的产生原因如下:
com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet.service方法主要负责将来自消费者的远程调用请求交给对应的handle完成处理。这里是交给spring的httpinvoker完成后续的处理。
往下跟进会看到该请求会交给handleRequest方法处理。在handleRequest方法内部主要是完成对对象的调用以及调用结果的返回。
通过进一步的跟进可以发现在
org.springframework.remoting.rmi.RemoteInvocationSerializingExporter.doReadRemoteInvocation方法中进行了不安全的反序列化。
由于这个不安全的反序列化行为,最终导致了远程任意代码执行。
Apache Dubbo官方针对该漏洞修复的主要方式是禁止消费者在POST请求中携带Java对象。
影响版本:
2.7.0 <= Apache Dubbo <= 2.7.4
2.6.0 <= Apache Dubbo <= 2.6.7
Apache Dubbo = 2.5.x
解决方案:
目前Apache Dubbo官方已针对这些漏洞发布安全更新,请尽快安装和应用更新:
https://github.com/apache/dubbo/releases/tag/dubbo-2.7.5