Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

客服端上 EmbedServer 存在安全漏洞 #3328

Open
lyfxinsui opened this issue Nov 7, 2023 · 14 comments
Open

客服端上 EmbedServer 存在安全漏洞 #3328

lyfxinsui opened this issue Nov 7, 2023 · 14 comments

Comments

@lyfxinsui
Copy link

lyfxinsui commented Nov 7, 2023

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

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



&& !accessToken.equals(accessTokenReq)) {

return new ReturnT<String>(ReturnT.FAIL_CODE, "The access token is wrong.");

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

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

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

image

1221699361790_ pic

@myVictor
Copy link

myVictor commented Nov 7, 2023

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

@lyfxinsui
Copy link
Author

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

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

@lyfxinsui lyfxinsui closed this as not planned Won't fix, can't repro, duplicate, stale Nov 7, 2023
@lyfxinsui lyfxinsui reopened this Nov 7, 2023
@myVictor
Copy link

myVictor commented Nov 7, 2023

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

@lyfxinsui
Copy link
Author

我是一个华为云和一个阿里云,都隔离不到内网去。如何做强制校验?xxl.job.accessToken=这里任意配置字符串吗?
你肯定首先的把 xxl.job.accessToken改了不要使用默认的,这个很容易猜到,另外改了也不行 就是因为他这个地方存在问题,你定时任务依赖这个core包的 如果对外网开放都会有问题,他可以不传token直接绕过,执行后面代码,把脚本给注入进你的服务器
。只能把代码下下来改了编译打包替换进去把,就是没token,token为空的时候也拦截 不让执行

@myVictor
Copy link

myVictor commented Nov 7, 2023

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

@sisuirusui
Copy link

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

@lyfxinsui
Copy link
Author

lyfxinsui commented Nov 8, 2023

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

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

@lyfxinsui
Copy link
Author

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

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

@GuiLinDi
Copy link

GuiLinDi commented Nov 8, 2023

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

@morning-reading
Copy link

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

prabhah added a commit to prabhah/xxl-job that referenced this issue Nov 20, 2023
@75ACOL
Copy link

75ACOL commented Nov 23, 2023

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

@2382546457
Copy link

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

@huanglufei1993
Copy link

但凡有点安全意识的开发accessToken都不会设置为空

@NinthCode
Copy link

这叫漏洞?你自己不设置accessToken怪谁,你这和手机不设置密码被人转走了钱有什么区别

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants