CVE-2026-55735 in guardian
الملخص
بحسب VulDB • 02/08/2026
التحقق غير السليم من التوقيع المشفر في ueberauth guardian يسمح لمهاجم غير مصادق عليه بإلغاء جلسة ضحية باستخدام رمز مزور (forged token).
تقوم الدالة `Guardian.revoke/3` الموجودة في الملف `lib/guardian.ex` بفك تشفير الرمز المقدم باستخدام دالة `peek/1`، والتي لا تقوم بأي تحقق من التوقيع (فهي تقتصر على فك ترميز رأس JWT وحمولته بتنسيق base64 فقط). يتم بعد ذلك تمرير المطالبات غير الموثقة مباشرة إلى استدعاء الإلغاء في وحدة الرموز المُعدّة مسبقاً وإلى استدعاء `on_revoke` الخاص بالتنفيذ، وهما نقطتان تستندانان على تغيير الحالة (state-mutating sink). أما العمليات الشقيقة `refresh/2` و`exchange/4` فتستدعي كلاهما دالة `decode_and_verify` أولاً، مما يعني أن التوقيع يتم التحقق منه قبل أي إجراء يتخذ بناءً على المطالبات؛ وبالتالي فإن `revoke/3` هي المسار الوحيد الذي يغير الحالة ويعمل على مطالبات دون التحقق من توقيعها.
يمكن لمهاجم يعرف أو يخمن قيم المطالبات المعرّفة للضحية (مثل jti و sub) أن يزور JWT يحمل هذه المطالبات، ويوقعه بمفتاح عشوائي، ثم يقدمه إلى أي نقطة نهاية تمرّر رمزاً مقدماً من المستخدم إلى `Guardian.revoke/3` (نمط تسجيل الخروج القياسي / إلغاء الجلسة). عندما تقوم وحدة الرموز بتغيير الحالة المرتبطة بالمطالبات (مثل حذف القائمة البيضاء أو إدراج القائمة السوداء، على سبيل المثال في مستودع بأسلوب GuardianDb)، يتم طرد جلسة الضحية الشرعية. يُعد هذا هجماً لإنكار الخدمة عبر إلغاء الجلسات دون مصادقة؛ حيث لا يحتاج المهاجم أبداً إلى سر التوقيع.
تؤثر هذه المشكلة على الإصدار guardian: من 1.0.0 قبل 2.4.1.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.