[xuxueli/xxl-job]客服端上 EmbedServer 存在安全漏洞

2023-12-11 865 views
9

漏洞:依赖xxl-job-core 的客服端在启动的HTTP Server (EmbedServer)的代码存在安全漏洞,如果这个httpserver的端口被拿到,然后请求路径如果是 /run ,请求内容是一个脚本代码,同时accessToken 不传递,也就是为null,后面的代码依然也能正常执行,导致恶意的脚本被注入到机器

有问题的代码就在,process 方法对accessToken的校验这里,如果accessToken是空的,后面代码就会被放行,然后发来的数据恰好是一个shell的脚本,那可能就会在本地被执行,也就是调用到

https://github.com/xuxueli/xxl-job/blob/72963e4716a74eacdcbdd2e999c433debf3afaa3/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java#L177 https://github.com/xuxueli/xxl-job/blob/72963e4716a74eacdcbdd2e999c433debf3afaa3/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java#L178 https://github.com/xuxueli/xxl-job/blob/72963e4716a74eacdcbdd2e999c433debf3afaa3/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java#L179 https://github.com/xuxueli/xxl-job/blob/72963e4716a74eacdcbdd2e999c433debf3afaa3/xxl-job-core/src/main/java/com/xxl/job/core/server/EmbedServer.java#L180

目前在我们的服务器上有利用这个漏洞来发起大量脚本攻击

也就是下面代码会被执行,导致被攻击了, TriggerParam triggerParam = GsonTool.fromJson(requestData, TriggerParam.class); return executorBiz.run(triggerParam);

我们主要是放的服务器开外网和端口了

image

1221699361790_ pic

回答

1

怎么破?xxl.job.accessToken=default_token 我现在用的这个配置直接可以绕过发送请求,导致服务器全部都是木马程序。

0

我们先隔离到内网了 端口对对外不在开放,把代码给下载下来改了重写打包替换进去,强制校验吧没有就不让过

4

我是一个华为云和一个阿里云,都隔离不到内网去。如何做强制校验?xxl.job.accessToken=这里任意配置字符串吗?

6

填空怎么填呢?空串么那第三个值不相等了吧

7

我在本地测试 xxljob 调度中心设置accessToken ,执行器没有设置 accessToken 可以注册和执行任务,但是如果执行器设置了与调度中心不一样的 accessToken 就不会执行 和你说的是一个问题吧

9

不是,我是说的他这个有漏洞,依赖xxx-core的客服端在启动的时候需要启动httpserver,也就是EmbedServer这个类,与管理端进行通信,我的意思是如果别人拿到这个请求路径 /run 后面跟上一个可执行脚本内容,同时accessToken不传也就是null,代码依然会往下执行,导致将脚本注入到机器中,已达到运行的目的,可以看截图那段代码逻辑

5

你就拦截呀,为null的时候直接返回,校验token相同才往后执行呀

0

大佬,你是怎么定位到这行代码的,强

5

我觉得加个内部服务访问标识,这样内部服务直接放行,大概这样子 image image image 大神们,看下可对!!

1

这种项目通常不建议放到公网上面执行吧

2

image 你是指 accessTokenReq 为空还是 执行器的配置accessToken为空呢?如果是accessTokenReq为空过不去呀