
लाइब्रेरी-स्तरीय प्रूफ-ऑफ-कॉन्सेप्ट लैब जो pac4j-jwt में CVE-2026-29000 का प्रदर्शन करती है, जिसमें Docker के साथ कमजोर और पैच किए गए संस्करणों की तुलना करके जाली JWT की स्वीकृति और अस्वीकृति दिखाई जाती है।
इस रिपॉजिटरी में pac4j-jwt के लिए CVE-2026-29000 का एक लाइब्रेरी-स्तरीय PoC शामिल है।
यह दो मामलों के साथ कमजोर और पैच किए गए व्यवहार की तुलना करता है:
| संस्करण | बेसलाइन | अटैक | परिणाम |
|---|
6.0.3 | ✅ | ✅ | कमजोर |
6.0.4.1 | ✅ | ✅ | कमजोर |
6.3.3 | ✅ | ❌ | पैच किया गया |
यह PoC कमजोर संस्करणों पर हमलावर-नियंत्रित विषय और भूमिकाओं के साथ प्रमाणित प्रोफ़ाइल निर्माण प्रदर्शित करता है, जबकि पैच किया गया संस्करण जाली टोकन को अस्वीकार कर देता है।
यह वेब एप्लिकेशन डेमो नहीं है।
यह एक छोटा Java प्रोग्राम है जो JwtAuthenticator को सीधे कॉल करता है और Docker के अंदर pac4j-jwt के कई संस्करणों की तुलना करता है।
लक्ष्य तीन चीज़ें साबित करना है:
परीक्षण किए गए संस्करण जानबूझकर चुने गए थे:
यह लैब को तीन उपयोगी संदर्भ बिंदु देता है:
.
├── docker-compose.yml
├── Dockerfile
├── pom.xml
└── src/main/java/lab/Repro.java
docker-compose.yml
प्रत्येक संस्करण के लिए परीक्षण मैट्रिक्स परिभाषित करता है।
Dockerfile
कंटेनर के अंदर PoC बनाता और चलाता है।
pom.xml
निर्भरताएँ परिभाषित करता है और एक चलने योग्य फैट JAR बनाता है।
src/main/java/lab/Repro.java
वास्तविक PoC हार्नेस।
docker-compose.yml फ़ाइल तीन सेवाएँ परिभाषित करती है:
v603 = pac4j-jwt 6.0.3 का परीक्षणv6041 = pac4j-jwt 6.0.4.1 का परीक्षणpatched = pac4j-jwt 6.3.3 का परीक्षणइसलिए इन कमांडों का अर्थ है "उस विशिष्ट संस्करण के विरुद्ध PoC को एक बार चलाएँ":
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
--rm का अर्थ है कि रन समाप्त होने के बाद अस्थायी कंटेनर हटा दिया जाता है।
docker compose build --no-cache
docker compose run --rm v603
docker compose run --rm v6041
docker compose run --rm patched
प्रत्येक संस्करण के लिए, प्रोग्राम दो मामले चलाता है।
यह एक वैध टोकन उत्पन्न करता है और इसे JwtAuthenticator के माध्यम से मान्य करता है।
अपेक्षित परिणाम:
यह हमलावर-नियंत्रित दावों के साथ एक जाली टोकन उत्पन्न करता है और इसे JwtAuthenticator के माध्यम से मान्य करता है।
अपेक्षित परिणाम:
आपको कुछ इस तरह देखना चाहिए:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: ACCEPTED
observed_subject: admin#override
observed_roles: [ROLE_SUPERUSER, ROLE_ADMIN]
[summary]
conclusion: VULNERABLE: forged token accepted
अर्थ:
आपको कुछ इस तरह देखना चाहिए:
[case] baseline
result: ACCEPTED
observed_subject: alice
observed_roles: [ROLE_USER]
[case] attack
result: REJECTED
reason: CredentialsException: A non-signed JWT cannot be accepted as signature configurations have been defined
[summary]
conclusion: PATCHED: forged token rejected
अर्थ:
यह CVE एक लाइब्रेरी-स्तरीय प्रमाणीकरण पथ को प्रभावित करता है, न कि एक एकल एप्लिकेशन को जिसमें एक सार्वभौमिक भूमिका मॉडल हो।
पुन: प्रयोज्य भाग अटैक आकार है:
JwtAuthenticator में पारितजो वास्तविक एप्लिकेशनों में सार्वभौमिक नहीं है:
इस वजह से, यह रिपॉजिटरी यह साबित करने पर केंद्रित है कि लाइब्रेरी कमजोर संस्करणों पर जाली हमलावर-नियंत्रित दावों को स्वीकार करती है, बजाय यह दिखावा करने के कि एक सार्वभौमिक टोकन है जो स्वचालित रूप से मनमाने एप्लिकेशनों के विरुद्ध काम करेगा।
docker compose run --rm v603docker compose run --rm v6041docker compose run --rm patched


यह प्रोजेक्ट तीन मुख्य तथ्य प्रदर्शित करता है:
6.0.3 और 6.0.4.1 पर स्वीकार किए जाते हैं6.3.3 पर अस्वीकार किए जाते हैंइस रिपॉजिटरी में इस CVE के लिए यह मुख्य कमजोर-बनाम-पैच किया गया साक्ष्य है।
कमजोर संस्करणों पर, जाली टोकन केवल पार्स नहीं किया जाता — यह हमलावर-नियंत्रित विषय और भूमिकाओं के साथ एक प्रमाणित प्रोफ़ाइल उत्पन्न करता है।