不完全的dolphinscheduler漏洞学习

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 –未成功

发现该版本无法使用漏洞功能(需要租户),这部分不确定。

功能点使用逻辑:用户-输入代码-系统调用租户(linux用户)-执行代码

查看数据库中的响应内容,tenant租户为空,新建的用户也找不到。

上一篇
下一篇