PowerJob 未授权访问漏洞

PowerJob 未授权访问漏洞

近期PowerJob爆发因未授权访问导致远程代码执行漏洞,本人曾在年初对此项目进行过源代码审计并输出两篇报告,因此决定借此机会发布文章水一下博客。

项目介绍

PowerJob是一个开源分布式计算和作业调度框架,它允许开发人员轻松地在自己的应用程序中调度任务。

项目地址

https://github.com/PowerJob/PowerJob
https://gitee.com/KFCFans/PowerJob
https://www.yuque.com/powerjob/guidence

漏洞概述

PowerJob存在未授权访问漏洞,该漏洞源于powerjob-server\powerjob-server-starter\src\main\java\tech\powerjob\server\web\controller路径下的全部Controller层的Restful接口均未添加访问控制,导致攻击者无需身份认证即可获取系统敏感信息。

影响版本

PowerJob <= 4.2.0
环境搭建
本次漏洞环境搭建有两种方式可选:
①:参考官方的docker-compose快速部署方案:
https://www.yuque.com/powerjob/guidence/docker-compose
②:在windows的idea中进行项目配置和打包将jar包部署到linux环境下运行,具体如下:

1、下载源码,解压后导入IDEA,使用maven进行依赖编译。
最新稳定版(4.2.0)源码下载地址:
https://github.com/PowerJob/PowerJob/tags
在这里插入图片描述

2、在POM文件中加入官方处理器(powerjob-official-processors)依赖
文件路径:PowerJob-4.2.0\powerjob-worker-samples\pom.xml
在这里插入图片描述

3、初始化数据库。
在这里插入图片描述

sql文件路径:
PowerJob-4.2.0\others\powerjob-mysql.sql
数据源配置文件路径:
PowerJob-4.2.0\powerjob-server\powerjob-server-starter\src\main\resources\application-daily.properties
4、启动PowerJobServerApplication
访问PowerJob控制台,初始化应用。
访问Web页面:http://localhost:7700/
在这里插入图片描述

点击应用注册按钮,填写应用名称(appName)和密码。
例如:apptest/123456
在这里插入图片描述

5、初始化 PowerJob-worker。
在配置文件中配置powerjob.worker.app-name信息,该字段与注册时填写的appname一致。
配置文件路径:
PowerJob-4.2.0\powerjob-worker-samples\src\main\resources\application.properties
在这里插入图片描述

配置完成后重启SampleApplication服务。
访问控制台,输入刚才注册的账号密码进行登录,登录成功后即可在首页看到机器信息。
在这里插入图片描述

6、将当前windows环境迁移至linux。
6.1:将当前windows中mysql的数据库文件迁移至linux。
转存储windows mysql的数据库文件,导出结构和数据,迁移至linux的mysql中。
6.2:修改springboot配置文件中的ip地址。
PowerJobServerApplication
在这里插入图片描述

SampleApplication
在这里插入图片描述

6.3:依次将两个jar包复制到linux目录下并运行
先运行powerjob-server-starter-4.2.0.jar,再运行powerjob-worker-samples-4.2.0.jar。
运行命令:Java -jar xxx.jar

漏洞复现

未登录状态下,无需任何身份认证,直接访问如下接口即可获取系统敏感信息。

①:/system/listWorker
在这里插入图片描述
②:/job/list
URL:http://172.25.4.233:7700/job/list
在这里插入图片描述
③:/system/overview
URL:http://172.25.4.233:7700/system/overview?appId=1
在这里插入图片描述
④:/instance/list
URL:172.25.4.233:7700/instance/list在这里插入图片描述
⑤:/user/list
URL:172.25.4.233:7700/user/list
备注:需要测试数据
在这里插入图片描述

漏洞分析

未授权漏洞的成因是因为没有处理好权限控制功能,在本项目中未添加任何的权限访问控制。

Web服务相关代码位置如下:
在这里插入图片描述
WebConfig配置了registry.addMapping(“/**”),但未添加拦截配置。
在这里插入图片描述
powerjob-server\powerjob-server-starter\src\main\java\tech\powerjob\server\web\controller路径下的全部Controller层的Restful接口均未添加访问控制。
在这里插入图片描述

修复建议

项目方表示一直将PowerJob按纯内网系统去设计,因此在安全上一直没有过多的处理。由于近期漏洞的影响,项目方也发现还是存在不少外网部署使用的用户,因此在后续版本会全面引入用户身份和权限体系来解决这个问题。

临时缓解措施:目前暂无修复方案,请不要将项目部署在外网。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PowerJob是一款开源的任务调度框架,主要用于高并发、高性能的企业级任务调度。安装PowerJob通常包括以下几个步骤: 1. **下载依赖**:首先需要从GitHub或其他官方仓库下载PowerJob的最新版本。你可以访问[PowerJob GitHub主页](https://github.com/tangfeixiong/PowerJob)获取源码包。 2. **环境配置**:确保你的开发环境中已经安装了Java JDK,并设置好JDK的路径。如果你使用的是Maven或者Gradle作为构建工具,还需要确保它们也已安装并配置在系统路径中。 3. **创建项目**:使用IDEA或者其他支持的集成开发环境(如Eclipse或IntelliJ IDEA),创建一个新的Java Maven或Gradle项目,并将PowerJob的依赖添加到项目的pom.xml或build.gradle文件中。 - Maven示例: ```xml <dependency> <groupId>com.dianping.powerjob</groupId> <artifactId>powerjob-server</artifactId> <version>{latest_version}</version> </dependency> ``` - Gradle示例: ```gradle implementation 'com.dianping.powerjob:powerjob-server:{latest_version}' ``` 4. **集成应用**:将PowerJob的Server模块作为服务部署,通常会启动一个RMI服务器监听注册中心(例如Zookeeper)。客户端代码可以使用提供的API来提交任务和管理任务队列。 5. **配置文件**:PowerJob有一些配置文件需要调整,比如配置任务注册中心地址、日志级别等。这些信息通常存储在application.properties或application.yml文件中。 6. **运行测试**:在完成上述步骤后,可以通过运行示例代码或者编写测试用例来验证PowerJob是否成功安装和集成到你的应用中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值