Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-75431_PowerJob_jwt_key_predictable — Zeigt eine kritische Schwachstelle in der Vorhersagbarkeit des JWT-Signaturschlüssels im PowerJob-Server auf, die eine Offline-Schlüsselableitung und Token-Fälschung zur Übernahme des Administratorkontos sowie zur Umgehung der OpenAPI-Authentifizierung ermöglicht. | Kitploit
Tools/GitHubGitHub/unpredictable21/cve-2026-75431_powerjob_jwt_key_predictable
SchwachstellenanalyseExploitationWebsicherheitPenetrationstestsAuthentifizierung
GitHubunpredictable21/cve-2026-75431_powerjob_jwt_key_predictable

CVE-2026-75431_PowerJob_jwt_key_predictable

Zeigt eine kritische Schwachstelle in der Vorhersagbarkeit des JWT-Signaturschlüssels im PowerJob-Server auf, die eine Offline-Schlüsselableitung und Token-Fälschung zur Übernahme des Administratorkontos sowie zur Umgehung der OpenAPI-Authentifizierung ermöglicht.

Repository anzeigen
vor 24 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

PowerJob JWT-Signaturschlüssel vorhersehbar (Schlüssel aus Standard-JDBC-URL abgeleitet) → Token-Fälschung

1. Zusammenfassung

Der JWT-Signaturschlüssel (HS256) des PowerJob-Servers wird durch BASE64-Dekodierung einer fest codierten Konstante, verkettet mit dem MD5 der Standard-JDBC-URL abgeleitet (DefaultSecretProvider / JwtServiceImpl). Die JDBC-URL ist in der Standardbereitstellung öffentlich (docker-compose / application-daily.properties), sodass ein Angreifer den Schlüssel vollständig offline ableiten und ein gültiges JWT für jeden Benutzer (einschließlich Admin) fälschen kann; das OpenAPI-App-Token kann ebenfalls gefälscht werden, um die OpenAPI-Authentifizierung zu umgehen.

2. Betroffenes Produkt

  • Produkt: PowerJob-Server (Web-Konsole 7700 + OpenAPI)
  • Betroffene Versionen: 5.1.2
  • Standardbereitstellung: application-daily.properties legt im Klartext offen
jdbc:mysql://powerjob-mysql:3306/powerjob-daily?...

3. Ort der Schwachstelle

  • 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: fest codierte Konstante BASE_SECURITY; genSecretKey(secret) = Decoders.BASE64.decode(BASE_SECURITY.concat(secret)) → Keys.hmacShaKeyFor
  • Der Schlüssel wird mit Repository/Datenbank für Geschäftsdaten geteilt; die JDBC-URL liegt in Konfiguration/docker-compose im Klartext vor.

4. Grundursache

  • Ein vorhersehbarer / ableitbarer Schlüssel wird anstelle eines zufälligen, persistenten Schlüssels verwendet: Der Schlüssel hängt nur von einer öffentlichen Konstante + dem MD5 der öffentlichen Standard-URL ab.
  • Die JWT-Nutzlast (username/encryptedToken) hat eine sekundäre Prüfung für PWJB-Konten (DigestUtils.rePassword(password, username)), aber:
    • unter dem Standardpasswort ist dieser Wert offline berechenbar → vollständige Admin-Übernahme;
    • das OpenAPI-App-Token (Claims appId/password/encryptType) kann direkt gefälscht werden, um die Authentifizierung zu umgehen (OpenApiSecurityServiceImpl:87-105);
    • andere Drittanbieter-Loginkonten haben möglicherweise keine sekundäre Prüfung.

5. Reproduktion (verifiziert — vollständig Ende-zu-Ende)

Umgebung: Lokaler PowerJob-Server (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). Der Angreifer leitet alles offline nur aus öffentlichen Informationen ab:

root@kitploit:~
# ① encryptedToken ableiten (= rePassword(password, username)); mit dem Standardpasswort berechenbar
rePassword("powerjob_admin", "ADMIN")
   = ADMIN_b82a450701f6a71723fb99931fe35e18_b      # byte-für-byte gleich dem DB-Wert user_info.token_login_verify_info ✅

# ② HS256-Signaturschlüssel ableiten = BASE64(BASE_SECURITY + MD5(JDBC_URL))
secret = BASE_SECURITY + md5(jdbc_url)             # 101-Byte-Schlüssel

# ③ ADMIN-Web-JWT fälschen (Claims: username=PWJB_ADMIN, encryptedToken=Ergebnis von ①, sub=PowerJob)

Tatsächliches Ergebnis (gefälschtes Token besteht die Authentifizierung):

root@kitploit:~
[*] /namespace/list ohne Token :
{"success":false,"data":null,"message":"PowerJobAuthException: UserNotLoggedIn","code":"-100"}

[*] /namespace/list mit gefälschtem 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}

→ Das gefälschte Token authentifiziert sich als Admin und gibt echte Daten zurück (Basislinie wird mit UserNotLoggedIn abgelehnt).

Kernpunkte:

  • Das offline abgeleitete encryptedToken stimmt byte-für-byte mit dem in der DB gespeicherten Wert überein (ADMIN_b82a450701f6a71723fb99931fe35e18_b).
  • Der Schlüssel wird vollständig durch die öffentliche Konstante BASE_SECURITY + MD5 der öffentlichen Standard-JDBC-URL bestimmt → offline ohne Anmeldedaten ableitbar.
  • Das PWJB-encryptedToken ist mit dem Standardpasswort offline neu berechenbar (powerjob_admin, Befund PJ-02) → vollständige Admin-Übernahme.
  • Wenn der Admin das Passwort geändert hat, wird das Fälschen eines Web-Tokens durch die encryptedToken-Abweichung blockiert, aber der OpenAPI-App-Token-Pfad (Claims appId/password/encryptType, OpenApiSecurityServiceImpl:87-105) kann weiterhin unabhängig gefälscht werden, um die OpenAPI-Authentifizierung zu umgehen.

Selbst wenn das Standardpasswort geändert wird, bleibt die Schwachstelle über andere Angriffsvektoren bestehen:

  • Ein Angreifer, der das encryptedToken eines beliebigen gültigen Benutzers auf anderem Wege erlangt (z. B. SQL-Injection, Offenlegung von Datenbanksicherungen, Log-Leck oder Informationsoffenlegung über andere Endpunkte), kann dieses Token mit dem vorhersehbaren Signaturschlüssel kombinieren, um ein JWT für genau diesen Benutzer zu fälschen.
  • Dies umgeht das Problem der encryptedToken-Abweichung vollständig, da das gefälschte Token nun ein legitimes encryptedToken enthält, das aus dem tatsächlichen Datenbankeintrag abgeleitet wurde.
  • Dadurch muss der Angreifer das Klartextpasswort des Benutzers überhaupt nicht kennen, und das gefälschte JWT bleibt auch nach einer Passwortänderung des Benutzers gültig (bis das Token abläuft).

PoC: powerjob_jwt_key.py 192.168.49.128:7700

image
image

6. Auswirkungen

  • Authentifizierungsumgehung / Token-Fälschung für beliebige Benutzer → Web-Konsole / OpenAPI-Verwaltungsoberflächen.

7. Empfohlener Fix

  • Den Schlüssel zufällig generieren und persistent speichern (Datei/Umgebung), niemals aus der JDBC-URL oder einer Konstante ableiten.
  • Einen separaten Schlüssel für OpenAPI-App-Tokens vs. Web-JWTs verwenden.
  • Die sekundäre encryptedToken-Prüfung für alle Konten durchsetzen.

8. CWE / CVSS

  • CWE: CWE-321 (Verwendung eines fest codierten kryptografischen Schlüssels) / CWE-798
  • CVSS: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N = 9.1 Kritisch (in Kombination mit dem Standardpasswort / OpenAPI)
Tool herunterladen