前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >日常运维|关于XXL-JOB AccessToken权限绕过漏洞

日常运维|关于XXL-JOB AccessToken权限绕过漏洞

原创
作者头像
Aion
发布2024-05-03 21:12:58
2940
发布2024-05-03 21:12:58
举报

序言

背景

前几日,运调中心的运维同事暴露出来一些已知BUG,其中一项是关于XXL-JOB调度工具的一些BUG。今天就关于AccessToken权限绕过漏洞做一些处理。XXL-JOB 是一款开源的分布式任务调度平台,用于实现大规模任务的调度和执行。XXL-JOB 在使用时使用了默认的AccessToken ,攻击者可使用 AccessToken 绕过认证权限,调用 executor,执行任意代码,从而获取服务器权限或者一些不可逆的操作。

项目漏洞处理

分析

【搜索引擎】

当我们拿到一些已知BUG,最简单快捷的方式就是通过搜索引擎来获取答案,然后使用正确的方式来处理,验证无误后,上报处理结果。

例如通过搜索引擎搜索答案:

  1. https://blog.csdn.net/qq_23257129/article/details/132027086
  2. https://juejin.cn/post/7130130357952708639
  3. https://blog.csdn.net/xuandaoren/article/details/134308795

【开源社区】

或者去开源社区获取一些开发者处理的BUG。例如我们可以去XXL-JOB的Github的社区来寻求答案。

在Github中一些相关的ISSUE如下:

  1. https://github.com/xuxueli/xxl-job/issues/3342
  2. https://github.com/xuxueli/xxl-job/issues?q=accessToken+

项目环境

为了确认当前项目引入的版本是否在当前漏洞版本内,打开项目,在 pom.xml 中找到代码引入的位置。通过查看,正好在漏洞范围内,急需处理。

漏洞版本:2.2.0 ~ 2.4.0

项目引入版本:2.2.0

代码语言:javascript
复制
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.2.0</version>
</dependency>

引发问题

从代码设定来看,如果漏洞利用者使用到这些XXL-JOB为了灵活支持多语言以及脚本任务,可以进行无差别使用。从代码支撑的语言可以看出来,支持Java、Shell、Python、NodeJS、PHP、PowerShell……等(动态生效:用户在线通过Web IDE开发的任务代码,远程推送至执行器,实时加载执行)类型。任务以源码方式维护在调度中心,支持通过Web IDE在线开发、维护。默认情况下,我们使用的都是BEAN,如果漏洞利用者使用SHELL或者其他方式,可想而知,后果很严重。

代码语言:javascript
复制
BEAN("BEAN", false, null, null),
GLUE_GROOVY("GLUE(Java)", false, null, null),
GLUE_SHELL("GLUE(Shell)", true, "bash", ".sh"),
GLUE_PYTHON("GLUE(Python)", true, "python", ".py"),
GLUE_PHP("GLUE(PHP)", true, "php", ".php"),
GLUE_NODEJS("GLUE(Nodejs)", true, "node", ".js"),
GLUE_POWERSHELL("GLUE(PowerShell)", true, "powershell", ".ps1");

处理方式

知道漏洞出现的原因以及出现的位置,那么处理起来就比较顺心应手,直接找到application.yaml(或 application.ymlapplication.properties)文件,然后依次找到相应的的代码处。我这里使用 application.yaml ,直接找到位置修改。

代码语言:javascript
复制
# XXL-JOB配置
xxl:
  job:
    login:
      username: xxxxxxxxxx
      password: xxxxxxxxxx
    # 需要修改的位置就在这里,根据上面漏洞的原因,
    # 这里使用了默认值,修改了一个非默认值即可。
    # 默认不填写值,在取值时默认为空或者default
    accessToken:    
    i18n: zh_CN
    # 触发池
    triggerpool:
      fast:
        max: 1000
      slow:
        max: 1000
    logretentiondays: 30

测试

当修改完成后,即可测试是否可以绕过权限调用其他可利用的接口。为了测试接口,可以选择默认的demo,也可以自己写一个接口。为了方便测试,此时我们可以采取使用Postman来请求测试数据。

代码语言:javascript
复制
{
    "jobId": 1,
    "executorHandler": "demoJobHandler",
    "executorParams": "demoJobHandler",
    "executorBlockStrategy": "SERIAL_EXECUTION",
    "executorTimeout": 0,
    "logId": 1,
    "logDateTime": 17147401371000,
    "glueType": "GLUE_POWERSHELL",
    "glueSource": "whoami",
    "glueUpdatetime": 17147401371000,
    "broadcastIndex": 0,
    "broadcastTotal": 0
}

未设置AccessToken参数时(使用默认值),请求结果如下(为了方便演示,端口已经设置其他端口):

设置AccessToken参数,不使用默认值时,请求结果如下:

注意??

在本篇以前,官方已修复该漏洞,且建议用户修改调度中心和执行器配置项 accessToken 的默认值,防止漏洞利用者利用这个漏洞。所以只需要按照要求修改即可避免漏洞被利用的情况出现。

其他框架修改

JeecgBoot框架中

如果是在JeecgBoot低代码框架中,由于已经重写了xxl-job的部分参数设定,所以需要在配置文件中使用如下代码配置。使用上述默认的处理方式不生效,大家可以进入代码调试。

代码语言:javascript
复制
jeecg:
  xxljob:
    access-token: xxxxxxxxxxxx

Ruoyi框架中

如果是使用Ruoyi代码框架,那么可以在配置文件中使用默认的配置方式,如下所示:

代码语言:javascript
复制
### xxl-job, access token
xxl.job.accessToken=xxxxxxxxxx

总结

XXL-JOB 在使用时使用了默认的AccessToken ,攻击者可使用 AccessToken 绕过认证权限,调用 executor,执行任意代码,从而获取服务器权限或者一些不可逆的操作。社区已经在漏洞发布出来前已经提前处理并提供了处理结果,大家可以酌情依据处理。


我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 序言
    • 背景
    • 项目漏洞处理
      • 分析
        • 项目环境
          • 引发问题
            • 处理方式
              • 测试
              • 其他框架修改
                • JeecgBoot框架中
                  • Ruoyi框架中
                  • 总结
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
                  http://www.vxiaotou.com