
إثبات مفهوم يوضح ارتباك خوارزمية JWT في مكتبة fast-jwt. يتضمن خادمًا ضعيفًا وسكربت تزوير الرموز وإصلاح التحقق للتعليم الأمني.
يستعرض هذا المستودع التباس خوارزمية JWT في fast-jwt عندما لا يقيّد التحقق من التوكن الخوارزميات المسموح بها.
من جذر المشروع، قم بتشغيل:
npm install
يتوقع التطبيق وجود هذه الملفات:
keys/private.pemkeys/public.pemقم بتشغيل إحدى مجموعتي الأوامر التاليتين.
PowerShell (ويندوز):
New-Item -ItemType Directory -Path keys -Force | Out-Null
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem
لينكس/macOS/Git Bash:
mkdir -p keys
openssl genrsa -out keys/private.pem 2048
openssl rsa -in keys/private.pem -RSAPublicKey_out -out keys/public.pem
node server.js
المخرجات المتوقعة:
Server running at http://localhost:3000
curl http://localhost:3000/generateToken
node sign.js
انسخ التوكن المطبوع.
node checkAdmin.js <JWT_TOKEN>
إذا نجح الهجوم، يحتوي الرد على Welcome Admin!.
في server.js، لا يقيّد المُتحقق الخوارزميات:
const verifySync = createVerifier({
key: publicKey,
});
بدون قائمة سماح للخوارزميات، قد يقبل الخادم توكن HS256 خبيثًا موقعًا باستخدام المفتاح العام باعتباره المفتاح السري لـ HMAC.
في عروض CVE الخاصة بالمجموعة، الكائن المصاب هو المكتبة (لا يمكن تشغيلها بشكل مستقل). لذلك يلزم استخدام تطبيق وهمي لمحاكاة كيفية استدعاء النظام الفعلي لواجهات برمجة التطبيقات (API) الخاصة بتلك المكتبة. في هذا المستودع، ملف server.js هو طبقة التطبيق الوهمي.
تدفق كود PoC الداعم:
باختصار، لم تعِد المجموعة كتابة دوال المكتبة. استخدمت المجموعة فقط واجهات المكتبة المصابة الأصلية (createSigner, createVerifier) داخل التطبيق الوهمي لإعادة إنتاج سياق الاستغلال بدقة.
تقييد التحقق على RS256:
const verifySync = createVerifier({
key: publicKey,
algorithms: ["RS256"],
});
هذا المشروع مخصص لتعلم الأمن السيبراني في بيئة مختبرية خاضعة للرقابة فقط.