
استغلال لإثبات المفهوم لـ JetBrains TeamCity ينفّذ تنفيذًا عن بُعدًا للتعليمات البرمجية دون مصادقة عبر إزالة تسلسل بروتوكول استطلاع الوكيل (agent polling protocol)، وينشر حمولة JSP، ويدعم تنفيذ الأوامر متعدد الخيوط.
نظرة عامة • التدفق البصري • المتطلبات • الاستخدام • القيود • التخفيف
[!CAUTION] ينفّذ إثبات المفهوم (PoC) هذا أمرًا على مستوى نظام التشغيل وقد يُعدّل دليل تطبيق TeamCity. استخدمه فقط في مختبر معزول أو ضد أنظمة لديك إذن كتابي صريح لاختبارها.
تذكر JetBrains أن جميع إصدارات TeamCity On-Premises الأقدم من الإصدارات المُصحَّحة متأثرة. قم بالترقية إلى إصدار مدعوم حاليًا متى أمكن ذلك. إذا تعذّرت الترقية الفورية، فاتبع تعليمات المُصنِّع بخصوص إضافة التصحيح الأمني الخاصة به.
[!NOTE] لا يدّعي هذا المستودع أن الثغرة CVE مدرجة في كتالوج CISA للثغرات المستغلة المعروفة (Known Exploited Vulnerabilities). لم تبلغ JetBrains عن أي استغلال نشط معروف عند نشرها نشرة الأمان في 27 يوليو 2026.
على مستوى عالٍ، يقوم الـ PoC بما يلي:
result.txt.يحاول ملف JSP المُنشأ حذف نفسه عند استدعائه. تعامل مع عملية التنظيف على أساس أنها أفضل جهد ممكن، وليست ضمانًا بأن الهدف سيُترك دون تغيير.
Python 3.9 or later
Target Authorized TeamCity On-Premises lab instance
Transport HTTP or HTTPS access
Shell bash available on the TeamCity server
Packages Python standard library only
Safety Disposable environment or verified backup
[!IMPORTANT] يستدعي الحمولة (payload) الأوامر عبر
bash -c. لذلك يتطلب خادم TeamCity على Windows تثبيت Bash متوافق؛ وإلا فستفشل مرحلة تنفيذ الأوامر.
شغّل الـ PoC من دليل المشروع:
python3 exploit.py
يطلب البرنامج تحديد الهدف والأمر وعدد الخيوط (threads) المطلوب:
[*] Target URL or file: http://127.0.0.1:8111
[*] Command: id
[*] Threads (default 10): 1
أدخل عنوان URL الأساسي الكامل للهدف. عند حذف المخطط (scheme)، يستخدم السكربت http:// تلقائيًا.
للأنظمة المخبرية المتعددة، أدخل مسار ملف نصي يحتوي على عنوان URL واحد في كل سطر:
http://127.0.0.1:8111
http://192.0.2.10:8111
https://teamcity.lab.example
لا تُضِف تعليقات سطرية إلى أسطر الأهداف لأن المحلل (parser) لا يزيلها. ابدأ بخيط واحد، وزد التوافقية (concurrency) فقط بعد التأكد من نطاق وسعة المختبر المصرّح به.
تُضاف النتائج الناجحة إلى result.txt:
http://127.0.0.1:8111 -> uid=1000(tcuser) gid=1000(tcuser) groups=1000(tcuser)
قد يحتوي الملف على مخرجات أوامر حساسة. أبقِه خارج نظام التحكم بالإصدارات واحذفه بشكل آمن عند عدم الحاجة إليه بعد الآن.
bash متوفر على خادم TeamCity.../webapps/ROOT؛ قد لا تعمل التخطيطات غير القياسية لـ TeamCity أو لحاوية servlet.args غير مُعرَّف. يعمل الأمر الأول المُرسل بشكل مستقل، لكن الأوامر الإضافية الصادرة من ذلك الموجه ستفشل حتى يُصحَّح الكود.flowchart LR
A["Identify TeamCity version"] --> B{"Patched release?"}
B -- "No" --> C["Upgrade to 2025.11.7 / 2026.1.3+"]
B -- "Upgrade blocked" --> D["Apply JetBrains security patch plugin"]
C --> E["Restrict access to trusted networks or VPN"]
D --> E
E --> F["Review logs, credentials, artifacts, and pipelines"]
2025.11.7 أو 2026.1.3 أو إصدار أحدث مدعوم.هذا الكود مُقدَّم لأغراض البحث الأمني والتحقق والاختبارات الدفاعية في بيئات تملكها أو مُصرَّح لك صراحةً بتقييمها. أنت مسؤول عن الامتثال للقوانين والعقود وقواعد الاشتباك المعمول بها. لا يتحمل المؤلف والمساهمون أي مسؤولية عن الاستخدام غير المصرح به أو الأضرار الناتجة عنه.
| الخاصية | القيمة |
|---|
| CVE | CVE-2026-63077 |
| المنتج | JetBrains TeamCity On-Premises |
| الأثر | تنفيذ تعليمات برمجية عن بُعد دون مصادقة عبر بروتوكول استطلاع الوكيل |
| مواطن الضعف | CWE-502 — إلغاء تسلسل بيانات غير موثوقة |
| CVSS | 9.8 حرجة — JetBrains CNA, CVSS 3.1 |
| المصادقة | غير مطلوبة |
| الإصدارات المُصحَّحة | 2025.11.7 و 2026.1.3 |
| التخفيف البديل | إضافة التصحيح الأمني من JetBrains لإصدارات TeamCity 2017.1+ |
| TeamCity Cloud | لا يتطلب أي إجراء من العميل وفقًا لـ JetBrains |