Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2024-27630 — مرجع CVE-2024–27630 | Kitploit
أدوات/GitHubGitHub/ally-petitt/cve-2024-27630
تحليل الثغرات الأمنيةجمع المعلوماتأمن الويباختبار الاختراقالأوراق والأبحاثالتعلم والتعليم
GitHubally-petitt/cve-2024-27630

CVE-2024-27630

مرجع CVE-2024–27630

عرض المستودع
1منذ 2 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

تفاصيل الثغرة الأمنية CVE-2024–27630

نظرة عامة

في Savane v3.12 والإصدارات السابقة له، يؤدي نقص التحقق من المعامل file_id عند حذف ملف من /bugs/index.php إلى ثغرة مرجع كائن مباشر غير آمن (IDOR) يمكن أن تسمح لمسؤول مُصادَق عليه لمجموعة تحتوي على متتبع أخطاء بحذف الملفات المرفقة لأي متتبع أخطاء بشكل تعسفي، مما يؤدي إلى عدم توافر هذه الملفات. نظرًا لأن معرّفات الملفات تتزايد مع كل رفع جديد، فمن الممكن إنشاء سكريبت يقوم بحذف جميع الملفات المرفقة على الخادم بشكل تكراري عبر file_id.

تصنيف CWE: CWE-639: تجاوز التفويض عبر مفتاح يتحكم فيه المستخدم

المُبلِغ: Ally Petitt

المنتج المتأثر: Savane

الإصدارات المتأثرة: 3.12 والإصدارات السابقة

التفاصيل الفنية

الدالة المسؤولة عن حذف الملفات المرفقة في متتبعات الأخطاء هي trackers_data_delete_file()، وهي معرّفة في كتلة الكود أدناه.

frontend/php/include/trackers/data.php:2417

root@kitploit:~
function trackers_data_delete_file ($group_id, $item_id, $file_id)
{
  global $sys_trackers_attachments_dir;
  # Make sure the attachment belongs to the group.
  $res = db_execute ("
    SELECT bug_id from " . ARTIFACT . " WHERE bug_id = ? AND group_id = ?",
    [$item_id, $group_id]
  );
  if (db_numrows ($res) <= 0)
    {
      # TRANSLATORS: the argument is item id (a number).
      $msg = sprintf (
        _("Item #%s doesn't belong to project"), $item_id
      );
      fb ($msg, 1);
      return;
    }

  $result = false;
  # Delete the attachment.
  if (unlink ("$sys_trackers_attachments_dir/$file_id")) 
    $result = db_execute ("
      DELETE FROM trackers_file WHERE item_id = ?  AND file_id = ?",
      [$item_id, $file_id]
    );
تنزيل الأداة

تبدأ الدالة باستعلام SQL للتحقق من أن المجموعة التي ينتمي إليها معرّف الخطأ المحدد في item_id هي نفس المجموعة التي ينتمي إليها المهاجم، والمعروفة باسم $group_id. تفشل الدالة في التحقق مما إذا كان file_id جزءًا من المجموعة أيضًا، مما يعني أنه طالما أن item_id يطابق خطأً صالحًا في مجموعة المهاجم، يمكن للمهاجم تعديل file_id ليشير إلى أي ملف داخل دليل الرفع /var/lib/savane/trackers_attachments.

بالإضافة إلى ذلك، لا يمكن استدعاء هذه الدالة إلا من قِبل مسؤولي متتبع الأخطاء.

frontend/php/bugs/index.php:586

root@kitploit:~
  case 'delete_file':
    # Remove an attached file.
    if ($is_trackeradmin)
      {
        trackers_data_delete_file($group_id, $item_id, $item_file_id);

         # Unset previous settings and return to the item.
         $depends_search = $reassign_change_project_search = $add_cc
           = $input_file = $changed = $vfl = $details = null;
         include '../include/trackers_run/mod.php';
      }
    else
      exit_permission_denied ();
    break;

خطوات التحقق

توضح هذه الخطوات حذف ملف واحد غير مصرح به، ومع ذلك، لاحظ أن المهاجم يمكنه أتمتة حذف جميع الملفات عبر معرّفاتها نظرًا لأنها متوقعة.

  1. امتلك حسابًا يكون مسؤولًا عن مجموعة تحتوي على متتبع أخطاء (حساب المهاجم).
  2. باستخدام حساب مستخدم منفصل (الضحية)، ارفع ملفًا مرفقًا في تقرير خطأ إلى مجموعة لا يكون المهاجم مسؤولًا عنها. فيما يلي نموذج لما يبدو عليه دليل الرفع بعد ذلك، حيث تم رفع الملف 40231 بواسطة الضحية:
root@kitploit:~
root@60ae93fe131f:/var/lib/savane/trackers_attachments# ls
40226  40227  40230  40231
  1. قم بزيارة الصفحة الرئيسية للمجموعة التي يكون المهاجم مسؤولًا عنها. بعد ذلك، انتقل إلى Bugs > Browse ولاحظ معرّف عنصر (Item ID) صالحًا في العمود الموجود في أقصى اليسار من الجدول. سيُستخدم هذا المعرّف في الخطوة التالية.

  2. بصفة المهاجم، أرسل طلب GET إلى المسار /bugs/index.php?func=delete_file&item_id=<ATTACKER_ITEM_ID>&item_file_id=<FILE_ID_TO_DELETE>.

    في حالتي، يبدو هذا كالتالي: http://172.17.0.2:7890/bugs/index.php?func=delete_file&item_id=50697&item_file_id=40231.

  3. تحقق من حذف ملف الضحية (من مجموعة لا يمتلك المهاجم صلاحيات عليها). على سبيل المثال:

root@kitploit:~
root@60ae93fe131f:/var/lib/savane/trackers_attachments# ls
40226  40227  40230

التخفيف

قم بالترقية إلى Savane الإصدار 3.13 أو أحدث. يمكن العثور على التصحيح هنا.