CVE-2022-22978-demo
مثال على كود لثغرة CVE-2022-22978
شروط الاستغلال
على الرغم من تصنيفها كثغرة عالية الخطورة، إلا أن شروط الاستغلال لا تزال صارمة نسبيًا، وفي رأيي الشخصي أن هذه الثغرة عديمة الجدوى إلى حد ما.
- أولًا، يجب أن يكون spring-security ضمن النطاق المتأثر بالثغرة
- ثانيًا، يجب استخدام مُطابق التعبيرات النمطية regexMatchers الخاص بـ spring-security أو استخدام RegexRequestMatcher مباشرةً، مع استخدام
. لمطابقة المسارات، على نحو مشابه لما يلي:
- regexMatcher("/api/.*") // يسمح بجميع المسارات الفرعية تحت /api
- regexMatcher("/files/.*\.jpg") // يطابق جميع طلبات الملفات التي تنتهي بـ .jpg
- regexMatcher("/user/.*/profile") // يسمح بمسار profile لأي اسم مستخدم تحت /user
- في الواقع، هذه الحالة نادرة الحدوث؛ على سبيل المثال، إذا كان هناك مسار مثل regexMatcher("/api/.*")، فستحتاج أيضًا إلى controller يحمل تعليقًا توضيحيًا مشابهًا لـ @RequestMapping("/api/*") لمعالجة طلبات جميع المسارات تحت /api. وإلا، حتى لو تم تجاوز قواعد مطابقة المسارات في spring-security باستخدام
%0a%0d، فسيتم إرجاع خطأ 404.
عرض الاستغلال
عند الوصول إلى أي مسار بشكل طبيعي، سيتم إعادة التوجيه إلى صفحة تسجيل الدخول الافتراضية التي يوفرها spring-security.

الوصول إلى: http://127.0.0.1:8080/admin/admin%0a، تم تجاوز تسجيل الدخول بنجاح

الوصول إلى: http://127.0.0.1:8080/hello%0a
تم تجاوز الفحص الأمني الذي يتطلب تسجيل الدخول لجميع المسارات، ولكن نظرًا لعدم وجود controller يحمل التعليق التوضيحي @RequestMapping("/hello/*")، فشل التعيين وتم إرجاع خطأ 404.
