
# Snow Monkey Forms <= 12.0.3 - حذف ملفات تعسفي غير مصادق عليه عبر اجتياز المسار (CVE-2026-1056)
يحتوي هذا المستودع على إثبات مفهوم (PoC) لثغرة أمنية حرجة في إضافة Snow Monkey Forms الخاصة بووردبريس (الإصدارات <= 12.0.3). تسمح هذه الثغرة لمهاجم غير مصادق بحذف ملفات تعسفية على الخادم عبر Path Traversal.
المرجع: Sarawut Poolkhet (MisterHelloz)
Snow_Monkey\Plugin\Forms\App\Rest\Route\View.php/wp-json/snow-monkey-form/v1/view)تقع الثغرة في معالج REST API الموجود في Snow_Monkey\Plugin\Forms\App\Rest\Route\View.php. تحدد طريقة send() تدفق التنفيذ بناءً على معاملات إدخال المستخدم.
// File: App/Rest/Route/View.php
public function send() {
Csrf::save_token();
$method = Meta::get_method(); // Sourced from $_POST['snow-monkey-forms-meta']['method']
// VULNERABILITY: If 'method' is 'input', the critical CSRF check is BYPASSED.
if ( 'input' === $method ) {
return $this->_send(); // Direct execution flow to _send()
}
// CSRF check is only performed for other methods (e.g., 'confirm', 'complete')
if ( ! Csrf::validate( Meta::get_token() ) ) { ... }
من خلال توفير input كمعامل الطريقة، يجبر المهاجم التطبيق على تنفيذ دالة _send() فورًا، متجاوزًا ضابط الأمان Csrf::validate() المصمم لمنع الإجراءات غير المصرح بها.
داخل طريقة _send()، يحاول التطبيق تنفيذ روتين تنظيف للأدلة المؤقتة الخاصة بالمستخدم. يعتمد هذا الروتين على معامل formid.
// File: App/Rest/Route/View.php -> _send()
// 'form_id' is sourced directly from POST data via Meta class without sanitization
$user_dirpath = Directory::generate_user_dirpath( $this->setting->get( 'form_id' ), false );
Directory::do_empty( $user_dirpath, true ); // Recursively delete contents
Directory::remove( $user_dirpath ); // Delete the directory itself
يكمن الخلل الحرج في كيفية قيام Directory::generate_user_dirpath ببناء المسار:
// File: App/Model/Directory.php
public static function generate_user_dirpath( $form_id, $do_create_directory = true ) {
$saved_token = Csrf::saved_token();
// ... (Regex check for token exists, but not for form_id) ...
$user_dir = path_join( static::get(), $saved_token );
// VULNERABILITY: $form_id is appended directly.
// WordPress path_join() does NOT resolve or sanitize '../' sequences.
$user_dir = path_join( $user_dir, (string) $form_id );
return $user_dir;
}
يتم تحويل متغير $form_id إلى سلسلة نصية لكنه لا يتم التحقق أبدًا من كونه عددًا صحيحًا. وهذا يسمح للمهاجم بحقن أحرف اجتياز الدليل (مثل ../../../../).
requests (pip install requests)python exploit.py -u <TARGET_URL> -f <TRAVERSAL_PAYLOAD>
