0Pricing
Cryptology Academy · درس

ثغرات JWT: alg=none والتباس المفاتيح

استغل أخطاء أمان JWT الأكثر شيوعًا وأصلحها

ثغرات JWT: alg=none والتباس المفاتيح درس مجاني في Cryptology Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cryptology Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

سطح هجوم JWT

تُوقَّع رموز JWT تشفيريًا، لكن العديد من المكتبات احتوت على ثغرات خطيرة. أكثر الثغرات استغلالًا: هجوم alg=none، وهجوم الالتباس بين RS256 وHS256، واختراق الأسرار الضعيفة بالقوة الغاشمة. تنبع هذه الهجمات جميعًا من الوثوق بحقوق الترويسة التي يتحكم بها المهاجم.

هجوم alg=none

تسمح مواصفة JWT باستخدام alg:"none" للرموز غير المؤمّنة. قبلت المكتبات المعيبة هذا الخيار وتخطت التحقق من التوقيع بالكامل. يعدّل المهاجم الحمولة (مثلًا، "role":"admin")، ويضبط alg:"none"، ويزيل التوقيع، فيقبله الخادم.

مثال على استغلال alg=none

الأصلي: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyIn0.SIG الهجوم: eyJhbGciOiJub25lIn0.eyJzdWIiOiJhZG1pbiJ9. (توقيع فارغ، ونقطة في النهاية). يتحقق خادم عرضة للثغرة من الرمز بنجاح ويمنح صلاحية وصول المسؤول.

إصلاح alg=none

لا تقبل alg:"none" مطلقًا في بيئة الإنتاج. حدّد الخوارزميات المسموح بها صراحةً: jwt.decode(token, key, algorithms=["HS256"]). ترفض معظم المكتبات الحديثة (PyJWT 2+ وjsonwebtoken 9+) alg=none افتراضيًا.

التباس المفتاح بين RS256 وHS256

إذا استخدم الخادم RS256 وغيّر العميل alg إلى HS256، فقد يتحقق الخادم باستخدام مفتاح RSA العام الخاص به باعتباره سر HMAC. وبما أن المفتاح العام... عام، يوقّع المهاجم حمولات عشوائية باستخدامه ويتحقق الخادم منها.

استغلال التباس المفتاح

الخطوات: 1) جلب المفتاح العام من نقطة نهاية JWKS. 2) إنشاء حمولة ضارة. 3) التوقيع باستخدام HMAC-SHA256 مع استخدام بايتات PEM الخام للمفتاح العام باعتبارها سر HMAC. 4) ضبط alg:"HS256" في الترويسة. 5) يتحقق مسار HS256 في الخادم بنجاح.

إصلاح التباس المفتاح

حدّد دائمًا الخوارزمية المتوقعة صراحةً في استدعاء التحقق. لا تستنتج الخوارزمية أبدًا من ترويسة الرمز المميز. استخدم مسارات تعليمات برمجية منفصلة لـ RS256 وHS256، بحيث لا يستطيع المستدعي التبديل بينها.

اختراق السر الضعيف بالقوة الغاشمة

يمكن اختراق HS256 باستخدام أسرار ضعيفة (أقل من 256 بت من الإنتروبيا) بالقوة الغاشمة دون اتصال. تدعم أدوات مثل hashcat كسر JWT: hashcat -a 0 -m 16500 token.txt wordlist.txt. استخدم أسرارًا عشوائية تشفيريًا لا تقل عن 32 بايتًا.

حقن الترويسة عبر kid

تحدد ترويسة kid (معرّف المفتاح) المفتاح الذي يجب استخدامه. إذا استخدم الخادم kid كمعامل لاستعلام SQL أو كمسار لنظام الملفات دون تنقية: kid="../../dev/null" → HMAC بمفتاح فارغ → قبول الرمز المميز المزوّر. نقِّ kid دائمًا.

حقن ترويسة jwk

تضمّن ترويسة jwk مفتاحًا عامًا للتحقق. قد يستخدم خادم عرضة للثغرة المفتاح المضمّن مباشرةً، مما يتيح للمهاجم تقديم زوج مفاتيحه الخاص، وتوقيع الرمز المميز بالمفتاح الخاص، وتضمين المفتاح العام. تحقّق فقط من المفاتيح المسجّلة.

تجاوز الرمز المميز المنتهي الصلاحية

نسيت بعض التطبيقات التحقق من المطالبة exp، أو استخدمت وقت الخادم بطريقة غير متسقة. تحقّق دائمًا صراحةً من exp وnbf وiat. استخدم مكتبة تتحقق من هذه المطالبات افتراضيًا، ولا تعطل التحقق من المطالبات في بيئة الإنتاج مطلقًا.

تحقق سريع

في هجوم التباس المفتاح بين RS256 وHS256، ما الذي يستخدمه المهاجم سرًا لـ HMAC؟

خلاصة

تنشأ ثغرات JWT من الوثوق بترويسة alg، وقبول alg=none، واستخدام أسرار ضعيفة. الإصلاح: ثبّت الخوارزميات لدى المتحقق، واستخدم أسرارًا قوية، ونقِّ kid. التالي: ممارسات التنفيذ الآمن لـ JWT.

الأسئلة الشائعة

هل درس «ثغرات JWT: alg=none والتباس المفاتيح» مجاني؟

نعم — نص درس «ثغرات JWT: alg=none والتباس المفاتيح» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cryptology Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cryptology Academy 4 دروس في المجموع.

ماذا ستتعلم في «ثغرات JWT: alg=none والتباس المفاتيح»؟

استغل أخطاء أمان JWT الأكثر شيوعًا وأصلحها تتمرن على Cryptology Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Cryptology Academy؟

لا تُشترط خبرة سابقة. Cryptology Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «ثغرات JWT: alg=none والتباس المفاتيح»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Cryptology Academy هذا؟

نعم. كل درس في Cryptology Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. بنية JWT: الترويسة والحمولة والتوقيع
  2. HS256 مقابل RS256: JWT متماثل مقابل غير متماثل
  3. ثغرات JWT: alg=none والتباس المفاتيح
  4. أفضل ممارسات تنفيذ JWT الآمن
← العودة إلى Cryptology Academy