PowerJob 未授权访问导致命令执行漏洞

PowerJob 命令执行漏洞

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

项目介绍

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

项目地址

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

受影响的组件:

https://mvnrepository.com/artifact/tech.powerjob/powerjob-official-processors

漏洞概述

PowerJob的官方推荐组件powerjob-official-processors中存在命令执行漏洞,攻击者可未授权加载恶意shell脚本执行系统命令。

影响版本

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

漏洞复现

1、登录PowerJob控制台
http://172.25.4.233:7700/
2、进入任务管理—>新建任务

在这里插入图片描述

必须填写配置如下,其余字段可选填。
1、任务名称:
2、任务参数:ping xxx.dnslog.cn(从http://dnslog.cn/获取)
3、定时信息:API
4、执行配置:单机执行、内建、
tech.powerjob.official.processors.impl.script.ShellProcessor
在这里插入图片描述

3、运行任务,并查看日志和dnslog网站是否回显。
在这里插入图片描述

4、点击“更多—运行记录——日志”查看信息

在这里插入图片描述
INFO [SYSTEM] Generate executable file successfully, path: /root/powerjob/worker/official_script_processor/shell_493428527211741312.sh

对日志进行简单分析,发现系统将任务参数写入.sh文件并执行

在dnslog网站上获得回显,漏洞验证完成。
在这里插入图片描述
至此,漏洞复现完成,上述操作所对应的Restful api接口均未进行身份效验,因此攻击者可构造一个含有恶意命令参数的任务并执行。

漏洞分析

定位到缺陷组件代码位置:
tech.powerjob.official.processors.impl.script.ShellProcessor
#getRunCommandfan

getRunCommand方法接收前台传递的String类型的参数。

在这里插入图片描述

最终在AbstractScriptProcessor#process0方法中执行目标脚本触发命令执行
在这里插入图片描述

修复方式

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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值