CVE-2023-49299
根据漏洞修改建议:升级至大于3.1.8版本,确定3.1.8存在漏洞
在github中查看具体修改了哪一部分(fix switch condition (#15228) (#15336) · apache/dolphinscheduler@61d9795 · GitHub)
第220行 content = content.replace(“${” + paramName + “}”, value);
此处替换字符串 content 中的 {paramName} 字符串为指定的 value 值。这种方式通常用于模板替换或动态字符串构建,其中 ${paramName} 是一个占位符,表示需要被替换的变量。
如果这里注入的参数没有进行有效的校验,之后系统又执行了这里的内容可能就会有RCE漏洞。
查看setTaskParams的调用情况。
发现在当前文件中有调用。
再去看content的情况。
发现了SwitchTaskUtils.evaluate方法。
查看声明。
查看前面关于engine的定义确认这里会执行js代码。
梳理一下,在content中通过 输入–setTaskParams–SwitchTaskUtils.evaluate 最后实现代码执行。
总结:如果可以在js中调用java.lang.Runtime.getRuntime().exec 应该就可以实现RCE。
漏洞验证
(这一部分没有成功)
1尝试根据官方文档(DolphinScheduler | DolphinsScheduler Documentation (apache.org))搭建一个docker镜像
官方提供的zookeeper好像有问题,zookeeper镜像无法正常启动。
查看了其他镜像的zoo.cfg文件
设置的好像没有问题。。
遇到的问题:zookeeper无法启动
尝试解决
- 查看镜像挂载目录修改对应zoo.cfg文件 –未成功
- 修改docker-compose.yml –未成功
- 搭建zookeeper后,利用官方文档中的docker+本地zookeeper+本地sql (未完成)
- 尝试使用官方standalone版本(DolphinScheduler | DolphinsScheduler Documentation (apache.org))–未成功
发现该版本无法使用漏洞功能(需要租户),这部分不确定。
功能点使用逻辑:用户-输入代码-系统调用租户(linux用户)-执行代码
查看数据库中的响应内容,tenant租户为空,新建的用户也找不到。