
CVE-2024-27198 وCVE-2024-27199 إثبات المفهوم - RCE، إنشاء حساب مسؤول، تعداد المستخدمين، معلومات الخادم
استغلال CVE-2024-27198 و CVE-2024-27199
RCity هو سكربت Python يتفاعل مع خادم TeamCity المعرّض للثغرة. تسهّل الثغرة (CVE) إنشاء حساب مسؤول غير مصرح به، وتجاوز استجابات 403 على النطاق. بينما تحقق أيضًا RCE عبر مسار Debug/Processes.
لاستخدام السكربت، تحتاج إلى توفير عنوان URL لخادم TeamCity الهدف كوسيطة سطر أوامر باستخدام -t أو --target:
python3 RCity.py -t http://teamcity.com:8111
يمكنك زيادة مستوى تفاصيل الإخراج باستخدام الخيار -v أو --verbose:
python3 RCity.py -t http://teamcity.com:8111 --verbose
يمكنك إرسال أوامر لمرة واحدة مباشرة عبر الخيار -c أو --command. إذا كنت تريد قشرة تفاعلية فلا تستخدم هذا الخيار. إنه غير مناسب مع القشور العكسية (reverse shells)، حيث يُغلق الاتصال بعد إرسال الأمر:
python3 RCity.py -t http://teamcity.com:8111 -c id
يمكنك ضمان عدم إرسال أي طلبات POST إلى خادم TeamCity باستخدام الخيار -s أو --stealth.
python3 RCity.py -t http://teamcity.com:8111 -s
يعطّل وظيفة RCE - كل شيء آخر يبقى كما هو
python3 RCity.py -t http://teamcity.com:8111 --no-rce
يمنع جمع قائمة المستخدمين، فقد يستغرق ذلك وقتًا طويلاً مع قوائم المستخدمين الأكبر. انتقل مباشرة إلى RCE بهذا الخيار!
python3 RCity.py -t http://teamcity.com:8111 --no-enum
إنشاء حساب مسؤول
تنفيذ الأكواد عن بُعد
توليد رموز التفويض
تعداد المستخدمين
جمع جميع رموز المصادقة الخاصة بالمستخدمين
جمع تفاصيل الخادم



هنا سأستعرض الوظائف المستخدمة في هذا المشروع، على أمل أن أعطيك فهمًا أفضل لهذا الاستغلال والثغرات المرتبطة به.
ترتبط طبيعة الثغرة بين كل من CVE-2024-27198 و CVE-2024-27199 بسبب أن المشكلة تنبع من نفس آلية تجاوز المصادقة لمسارات REST API داخل خوادم JetBrains TeamCity. ومع ذلك، فإن تأثير هذه الثغرة هو حيث يتباين الأمر ويصبح مشوقًا... CVE-2024-27198 هو الأشد وطأة على الورق، نظرًا لتأثيره المعلن عن RCE، حيث يستغل نقطة النهاية /app/rest/debug/processes، فقط مع الأذونات اللازمة لإرسال الطلبات إلى هذه النقطة، عبر رمز مصادقة (Auth Token). يختلف هذا الاستدعاء لهذه النقطة بين مضيفي Unix وWindows، ومع ذلك يتم التلاعب به بشكل مشابه، والفرق الوحيد هو القشرة الأصلية التي يتم استدعاؤها لإرسال الطلب.
Linux - processes?exePath=/bin/sh¶ms=-c¶ms={yourRCE_HTMLEncoded}
Windows - processes?exePath=cmd.exe¶ms=/c¶ms={yourRCE_HTMLEncoded}
الآن، كما ذُكر سابقًا - هذا غير ممكن بدون مصادقة، يجب أن يكون آمنًا... أليس كذلك؟ هنا يأتي دور تجاوز المصادقة.
تجاوز سياسة بناء TeamCity يفتح الفرصة لإرسال الطلبات إلى الخادم وإسقاط رمز المصادقة الخاص بنا هناك، دون أن نحتاج تقنيًا حتى إلى حساب خاص بنا.
التجاوز نفسه هو إنشاء مسار بديل إلى مسارات REST، والذي دون الخوض في الكثير من التفاصيل، يتطلب التحكم في محتويات فئة (class) وظيفتها معالجة الطلبات، وتحديدًا تلك التي ليست 302 (إعادة توجيه)، مما يسمح لنا بعد ذلك بالتحكم فيه عبر إلحاق 3 أجزاء ضرورية بعنوان URL الخاص بنا.
نقطة نهاية غير مصادق عليها لن تستدعي 302، في حالتنا /hax
معامل استعلام في عنوان URL باسم jsp للاستعلام عن مسارات API، على سبيل المثال، مسار users هو ?jsp=/app/rest/users
مسار URI عشوائي ينتهي بـ .jsp. يمكن تحقيق ذلك بإلحاق مقطع معامل مسار HTTP ;.jsp
مما يعني أن الحمولة النهائية لإرسال طلبات غير مصرح بها إلى نقطة نهاية المستخدمين هي: /hax?jsp=/app/rest/users;.jsp
الآن يمكننا إرسال الطلبات إلى نقطة نهاية المستخدمين وإضافة مستخدمينا الخاصين، حتى المسؤولين!
ومع ذلك، قبل أن ننتقل إلى RCE، نحتاج إلى رمز مصادقة (Auth Token)، باعتباره الحامل لطلبات RCE الخاصة بنا ضد REST API الخاص بهم. لا مشكلة الآن بعد أن حصلنا على التجاوز، سنذهب لننشئ واحدًا!
كانت نقطة نهاية الرمز تتبع نفس شجرة المسار كما في المثال السابق، ويمكن العثور عليها في /app/rest/users/id:{user_id}/tokens/{token_name}. لذا دعونا نصمم حمولة أخرى لتجاوز المصادقة وإنشاء رمز!
(نحن نوفر اسم الرمز الخاص بنا لهذا الغرض، وبالنسبة لهذا السكربت فهو توليد عشوائي من أحرف ascii الأبجدية الرقمية).
/hax?jsp=/app/rest/users/id:{user_id}/tokens/{token_name};.jsp
بعد إرسال طلب POST الخاص بنا لإضافة الرمز إلى المستخدم الذي أنشأناه للتو، يمكننا الآن البدء في إرسال الطلبات إلى مسار /app/rest/debug/processes!
لا شيء مميز في تصميم حمولات RCE الخاصة بنا، فقط قم بترميز حمولاتك بتنسيق HTML في وسيطة params!
اختراق سعيد!
https://nvd.nist.gov/vuln/detail/CVE-2024-27198
https://github.com/W01fh4cker/CVE-2024-27198-RCE
هذا السكربت لأغراض تعليمية فقط. استخدمه بمسؤولية وعلى الأنظمة التي لديك إذن بالوصول إليها فقط.