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() 中存在未经验证的代码执行。

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

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


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

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