Skip to main content

CVE-2021-30181 Apache Dubbo cluster scriptEngine pre-auth 代码执行漏洞 GHSL-2021-042

概述

影响版本

[2.5.0, 2.6.9]、[2.7.0, 2.7.9]

复现分析

首先看一下 漏洞披露邮件 是这样描述的,Dubbo 支持 Script 路由配置,这些配置被加载到配置中心(Zookeeper, Nacos等)。customer 发起请求时将默认使用不安全的 ScriptEngine 解析,所以还是一个预授权的代码执行。

org.apache.dubbo.rpc.cluster.router.script.ScriptRouter#route() 中存在未经验证的代码执行。

image-20240204154259883

而在 org.apache.dubbo.rpc.cluster.directory.AbstractDirectorylist() 方法实现了对路由 Router 的管理,并实现了相应的逻辑。

image-20240204155545037

org.apache.dubbo.registry.integration.RegistryDirectoryAbstractDirectory 的继承,重写了 doList() 方法,实现对 router 的管理。

image-20240204161532135

image-20240204161642954

又实现了 NotifyListener 接口,所以一样是存在 notify() 在发生变动时能通知 consumer

image-20240204161617494

这个 payload 需要注意的是注册中心的 url 必须满足格式,具体要求可以在 org.apache.dubbo.registry.zookeeper.ZookeeperRegistry#toUrlsWithoutEmpty()org.apache.dubbo.common.utils.UrlUtils#isMatch() 这两个方法打断点自己调试,就不是很想赘述了。