
عرض توضيحي لهجوم التباس الخوارزمية على مكتبات JWT المختلفة
توضيح لهجوم الخلط بين الخوارزميات (algorithm confusion) على مكتبات Json Web Token (JWT). غالبًا ما تُستخدم JWT في ملفات تعريف الارتباط (cookies) للتحقق من جلسة المستخدم، ولذلك فإن هذا الهجوم خطير. تم استخدام وحدة Node.js [email protected] لتوضيح الثغرة.
كان هذا المشروع أيضًا نشاط برمجة ممتعًا، حيث تم بناء الواجهة الأمامية بالكامل تقريبًا بواسطة نماذج لغوية كبيرة (LLMs) خارج استدعاءات واجهة برمجة التطبيقات (API).
صيغة JWT هي كما يلي:
b64(header).b64(payload).b64(signature)
With in our case:
header = (algorithm, type)
payload = (username, role)
في ذلك الوقت، كانت مكتبات JWT المختلفة قادرة على التوقيع باستخدام خوارزمية، لكنها لم تفرض خوارزمية معينة، بل اعتمدت على محتوى ترويسة JWT (header)، مما يتيح للمستخدم تحديد التشفير الخاص به. هذا يسمح بالعديد من الاستغلالات، لكن الاستغلال المستخدم في هذه الحالة هو التالي:
سجّل الدخول كمستخدم عادي في صفحة تسجيل الدخول. ستحتاج إلى التسجيل أولاً.
بمجرد وصولك إلى الصفحة الرئيسية، سيكون هناك زر لا يمكن النقر عليه إلا إذا كانت لديك جلسة مسؤول صالحة. بعد ذلك، ستحتاج إلى تشغيل الاستغلال لتزوير هذا JWT.
أخيرًا، استبدل JWT الأصلي بـ JWT المزور في التخزين المحلي (local storage)، وبعد تحديث الصفحة، سيصبح الزر قابلًا للنقر وستحصل على العلم (flag)!