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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
cpanel2shell-scanner — ماسح عالي الدقة لثغرة CVE-2026-41940 (تجاوز المصادقة في cPanel وWHM) | Kitploit
أدوات/GitHubGitHub/assetnote/cpanel2shell-scanner
ماسحات الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالمصادقةتطوير الحمولات
GitHubassetnote/cpanel2shell-scanner

cpanel2shell-scanner

ماسح عالي الدقة لثغرة CVE-2026-41940 (تجاوز المصادقة في cPanel وWHM)

عرض المستودع
9224منذ 3 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

cpanel2shell-scanner

ماسح عالي الدقة لتجاوز المصادقة في cPanel/WHM المتتبع باسم CVE-2026-41940. يحدد المضيفات المعرّضة دون إنتاج السلبيات الكاذبة الشائعة في إثباتات المفهوم والكشوفات العامة، ودون تفعيل آليات قفل الحساب وقائمة السماح لعناوين IP الجذر التي تعيق الفحص الساذج.

تتضمن الأداة أيضًا سلسلة استغلال منفصلة اختيارية من العائلة نفسها لثغرة اجتياز المسار في CalDAV على cpdavd (المنفذ 2079 نصي / 2080 TLS) — CVE-2026-29205 — تتيح لمهاجم عن بُعد قراءة ملفات عشوائية بصلاحيات root بمجرد نجاح خطوة إعداد صغيرة عبر SMTP. يصلح cPanel 11.134.0.26 الخلل الأساسي في عمر RAII، فأصبحت القراءة الآن تُنفَّذ بصلاحيات مالك الحساب غير المميز؛ الاجتياز نفسه ما يزال يصل إلى cpdavd لكنه لا يمكنه التصعيد إلى ما يتجاوز ما يمكن لذلك الحساب قراءته أصلًا. سلسلة CalDAV مُقيَّدة خلف --exploit وهي معطّلة افتراضيًا لأنها ترسل رسائل بريد إلكتروني حقيقية وتقرأ ملفات من أهداف مؤكدة — انظر قسم وضع الاستغلال (نشط).

لماذا هذا الماسح

معظم الكشوفات العامة لـ CVE-2026-41940 تتشارك ثلاث مشكلات. يعالج هذا الماسح كل واحدة منها.

يمكنك قراءة تدوينتنا حول تقنية الكشف هذه هنا: https://slcyber.io/research-center/high-fidelity-check-for-the-cpanel-authentication-bypass-cve-2026-41940/

يفحص مسارات البروكسي، وليس منافذ الإدارة فقط

تثبّت تهيئة Apache الخاصة بكل vhost في cPanel قاعدة ProxyPass تعيد توجيه /___proxy_subdomain_whm إلى 127.0.0.1:2086 و/___proxy_subdomain_cpanel إلى 127.0.0.1:2080 بغض النظر عن ترويسة Host في الطلب. تعمل RewriteCond فقط على تقييد قاعدة إعادة الكتابة التي تربط النطاق الفرعي للإدارة بمسار البروكسي؛ أما ProxyPass نفسها فهي غير مشروطة. الوصول إلى هذه المسارات على أي vhost يخدمه Apache مُدار بواسطة cPanel يصل إلى نفس الخلفية المعرّضة مثل منافذ الإدارة.

الماسحات التي تفحص المنافذ 2082/2083/2086/2087 فقط ستبلغ أن المضيف غير معرّض عندما تكون هذه المنافذ محمية بجدار ناري، رغم أن الثغرة قابلة للوصول بالكامل عبر 443. يفحص هذا الماسح المنافذ 2087 و2083 ومساري البروكسي على 443 افتراضيًا.

لا يُحجَب بواسطة cphulkd أو قائمة السماح لعناوين IP الجذر

يأتي cPanel مع cphulkd، الذي يقفل الحسابات بعد عدد صغير من محاولات كلمة المرور الفاشلة، وauthorized_whm_root_ips، الذي يقيّد تسجيلات دخول الجذر بقائمة مُهيأة من عناوين المصدر. الماسح الذي يستغل التجاوز بمحاولة حقن جلسة لـ root سوف:

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

يتجنب هذا الماسح المشكلتين على جانب WHM بحقن expired=1 في حمولة الجلسة تحت اسم مستخدم مولّد عشوائيًا. يُتحقق من حقن الجلسة بزيارة عنوان cpsessXXXX الناتج ومطابقة msg_code:[expired_session] في نص الاستجابة، وهو موجود فقط عند نجاح الحقن. لا يُستهدف أي حساب حقيقي، لذا لا يمكن قفل أي حساب حقيقي، وتصبح قائمة سماح الجذر غير ذات صلة لأنه لا تُحاول أي عملية تسجيل دخول كجذر.

يستخدم قائمة كلمات لأسماء المستخدمين عندما يكون ذلك ضروريًا

يتطلب خفي cPanel (cpaneld، المنفذ 2083 ومسار /___proxy_subdomain_cpanel) أن يطابق اسم المستخدم المُقدَّم حساب cPanel موجودًا على القرص (-f /var/cpanel/users/$user). لن يرضي اسم المستخدم root هذا الفحص أبدًا لأن root مستخدم نظام وليس مستخدم cPanel. الكشوفات التي تجرّب root فقط تنتج سلبيات كاذبة على هذا السطح. يستخدم هذا الماسح قائمة كلمات قابلة للتهيئة من أسماء مستخدمي cPanel الشائعة ضد سطح cPanel، ويعود إلى مسار اسم المستخدم العشوائي على سطح WHM، الذي لا يخضع لمثل هذا القيد.

كيف يعمل الكشف

لكل هدف، ينفذ الماسح الخطوات التالية لكل سطح:

  1. أرسل طلب GET /login واقرأ ترويسة Set-Cookie إما لـ whostmgrsession (WHM) أو cpsession (cPanel). تحتوي الكوكي على مكوّن اسم جلسة مفصول بفواصل.
  2. أرسل طلب GET / مع ترويسة Authorization: Basic التي قيمتها المفكوكة هي <user>:\xff\nexpired=1. الجزء \nexpired=1 في النهاية هو حمولة حقن الجلسة. تُعاد كوكي الجلسة من الخطوة 1 كما هي دون تعديل.
  3. اقرأ ترويسة Location من الاستجابة واستخرج رمز cpsessXXXX.
  4. أرسل طلب GET /<cpsessXXXX>/ مع الكوكي الأصلية وابحث عن msg_code:[expired_session] في النص. وجوده يثبت نجاح حقن الجلسة وأن المضيف معرّض.

في WHM (المنفذ 2087 ومسار /___proxy_subdomain_whm على 443)، يكون اسم المستخدم u عشوائيًا متبوعًا بعشرة أحرف سداسية عشرية. في cPanel (المنفذ 2083 ومسار /___proxy_subdomain_cpanel على 443)، يجتاز الماسح قائمة كلمات أسماء المستخدمين ويتوقف عند أول تطابق.

افتراضيًا، يفحص الماسح المنافذ 2087 و2083 و443 بهذا الترتيب ويتوقف فور تأكيد أي سطح لوجود الثغرة.

استغلال اجتياز المسار في CalDAV (--exploit)

CVE-2026-29205 — تحديث أمان cPanel/WHM WP2 بتاريخ 13 مايو 2026. أُصلح في cPanel 11.134.0.26. تتتبع النشرة الإرشادية نفس انحدار إسقاط الصلاحيات في cpdavd الذي تسيء استخدامه سلسلة الاستغلال هذه.

الشرح الكامل للثغرة وسلسلة الاستغلال: https://slcyber.io/research-center/new-age-of-collisions-reading-arbitrary-files-pre-auth-as-root-in-cpanel-cve-2026-29205

cpdavd على المنفذين 2079 (HTTP نصي) و2080 (TLS) يثق في مسار <principal>/<collection>/... الذي يبنيه عند تقديم موارد CalDAV/CardDAV. من خلال صياغة طلب يرمّز مكوّن مساره إلى مقاطع .. وتوجيهه إلى مجلد maildir الذي يرمّز اسمه على القرص أيضًا إلى اجتياز (x-attachment-1-y)، يمكن إجبار cpdavd على قراءة أي ملف على القرص بصلاحيات root، بغض النظر عن الملكية أو الأذونات — بما في ذلك /etc/shadow و/etc/passwd ومخازن البريد لكل مستخدم.

فشل الدفاع المتعمق الذي كان من المفترض أن يُسقط الصلاحيات إلى مالك الحساب قبل القراءة بصمت: أُنشئ كائن Cpanel::AccessIds::ReducedPrivileges في سياق void، لذا استعاد مدمّره صلاحيات root قبل تنفيذ القراءة. يربط cPanel 11.134.0.26 الكائن بمتغير معجمي my $privs فيبقى حيًا عبر سلسلة -f / stat / open / read؛ لذلك على المضيفات المحدَّثة تُنفَّذ القراءة بصلاحيات مالك الحساب غير المميز بدلاً من root.

يجب أن يكون المجلد المعرّض موجودًا على القرص قبل أن تنجح القراءة. ينشئ cPanel تلقائيًا مجلدًا باسم .x-attachment-1-y للمستلم <user>+x-attachment-1-y@<domain> في أول مرة يصل فيها بريد إلكتروني إلى ذلك العنوان الفرعي. السلسلة إذن هي:

  1. تعداد نطاقات المستلم المحتملة من حقول SAN لشهادة TLS الخاصة بالمضيف.
  2. لكل نطاق، اشتقاق الأجزاء المحلية المرشحة (التسمية الأولى للنطاق، إضافةً إلى قائمة كلمات صغيرة من البادئات الشائعة لصناديق البريد مثل info وadmin وwebmaster).
  3. فتح جلسة SMTP واحدة عبر مرحّل صادر مُهيأ (مثل SendGrid) وإرسال <prefix>+x-attachment-1-y@<domain> إلى كل مرشح. يتم تتبع استجابات RCPT TO المقبولة.
  4. الانتظار عبر سلم إعادة المحاولة (5 ث، 10 ث، 20 ث، 30 ث) حتى يقوم تسليم بريد cPanel بإنشاء المجلد.
  5. لكل مستلم مقبول، إرسال طلب GET لاجتياز المسار إلى cpdavd على المنفذين 2080 (TLS) و2079 (نصي)، تحت بادئتي المجموعة /calendar/ و/addressbook/.

النجاح يعيد بايتات الملف؛ ويسجّل الاكتشاف البريد الإلكتروني المستخدم والمجموعة وعدد البايتات وأول 200 بايت كمعاينة.

هذا الفحص معطّل ما لم يُمرَّر --exploit. عند تفعيله يتطلب مرحّل SMTP صادر يعمل (انظر ملف الإعدادات أدناه) لأن خطوة إنشاء المجلد لا يمكن تخطيها.

الاستغلال الموجّه مقابل الاستغلال بالرش

يعمل الاستغلال فقط ضد حسابات البريد الإلكتروني الافتراضية الحقيقية المكوّنة ضمن ميزة Email Accounts في cPanel. عناوين الاستقبال الشامل لا تعمل — فالعنوان الشامل يُوجَّه عبر موجّه system_aliases في Exim، ولا يصل أبدًا إلى ناقل dovecot_virtual_delivery، وبالتالي لا يفعّل مسار lda_mailbox_autocreate الذي ينتج مجلد .x-attachment-1-y/.

عندما تعرف مسبقًا بريدًا إلكترونيًا افتراضيًا صالحًا على الهدف، مرّره مع --email:

root@kitploit:~
python scanner.py --config scanner.ini --email [email protected] target.com

--email يتخطى تعداد SAN للشهادة وقائمة بادئات الرش بالكامل ويرسل رسالة واحدة بالضبط إلى العنوان الذي زوّدته. يمكن تكراره لاستهداف عدة حسابات معروفة. المسار الموجّه أكثر موثوقية بكثير من مسار الرش.

بدون --email، يلجأ الماسح إلى رش ~15 بادئة شائعة (info، admin، webmaster، إلخ) لكل نطاق مستخرج من شهادة TLS الخاصة بالمضيف. كان قياس Assetnote على عينة من 200 مضيف مكشوف عبر cpdavd بمعدل إصابة ~10% للرش: النتيجة النظيفة من وضع الرش هي دليل ضعيف على أن المضيف محدَّث، وإعادة التشغيل مع --email ضد حساب حقيقي هي الطريقة الموثوقة الوحيدة للتأكيد.

ملف الإعدادات

يقرأ وضع الاستغلال ملف INI عبر --config:

root@kitploit:~
python scanner.py --config scanner.ini --exploit example.com

انسخ scanner.ini.example إلى scanner.ini، واملأ بيانات اعتماد SMTP، وضبط إعدادات CalDAV الافتراضية اختياريًا. scanner.ini موجود في .gitignore لتبقى النسخة المعبأة محليًا. يمكن أيضًا توفير كلمة مرور SMTP عبر متغير البيئة SCANNER_SMTP_PASSWORD، الذي له الأسبقية فقط عندما يكون حقل password في الملف فارغًا.

التثبيت

root@kitploit:~
pip install -r requirements.txt

يتطلب Python 3.8 أو أحدث.

الاستخدام

هدف واحد:

root@kitploit:~
python scanner.py example.com

أهداف متعددة عبر وسائط موضعية:

root@kitploit:~
python scanner.py host-a.example.com host-b.example.com:2083

ملف أهداف، سطر واحد لكل هدف. الأسطر التي تبدأ بـ # تُتجاهل:

root@kitploit:~
python scanner.py -f targets.txt

قراءة الأهداف من stdin:

root@kitploit:~
cat targets.txt | python scanner.py

يمكن أن يكون الهدف اسم مضيف أو host:port. عندما يُحدَّد منفذ، يفحص الماسح هذا المنفذ فقط؛ وإلا يفحص المنافذ 2087 و2083 و443.

الخيارات الشائعة

  • -u, --users — أسماء مستخدمين مفصولة بفواصل لتجربتها على سطح cPanel. الافتراضي هو قائمة مدمجة صغيرة.
  • -U, --users-file — ملف يحتوي اسم مستخدم cPanel واحد في كل سطر.
  • -p, --ports — منافذ مفصولة بفواصل لفحصها عندما لا يُحدَّد منفذ على الهدف. الافتراضي 2087,2083,443.
  • -t, --threads — خيوط لكل هدف تُستخدم لاجتياز قائمة أسماء المستخدمين ضد سطح cPanel. الافتراضي 10.
  • -c, --concurrency — عدد الأهداف المفحوصة بالتوازي. الافتراضي 20.
  • -T, --timeout — مهلة زمنية لكل طلب بالثواني. الافتراضي 15.
  • -o, --output — إلحاق الأهداف المعرّضة، سطر لكل هدف، بهذا الملف عند اكتشافها.
  • --json — كتابة سجل JSON Lines لكل هدف إلى هذا الملف.
  • -q, --quiet — طباعة الأهداف المعرّضة فقط على stdout. لا تزال إخفاقات الاتصال والأهداف النظيفة تُسجَّل في --json وتُحسب في الملخص.
  • --no-progress — تعطيل شريط التقدم.

المخرجات

يُكتب سطر واحد إلى stdout لكل اكتشاف، لذا فإن الهدف الذي يشغّل الفحصين سيُطبع مرتين:

root@kitploit:~
[!] host  cve-2026-41940    VULNERABLE (port 443)
[!] host  caldav-traversal  VULNERABLE via admin@host (read 1842b from /etc/passwd)
[+] host  cve-2026-41940    NOT VULNERABLE
[?] host  cve-2026-41940    CONNECTION FAILED

مخرجات --json هي سجل واحد لكل هدف مع مصفوفة findings:

root@kitploit:~
{"target": "host", "status": "VULNERABLE", "findings": [
  {"check": "cve-2026-41940", "status": "VULNERABLE", "detail": {"port": 443}},
  {"check": "caldav-traversal", "status": "VULNERABLE",
   "detail": {"email": "admin@host", "domain": "host", "collection": "calendar",
              "file": "/etc/shadow", "bytes": 1218, "preview": "root:$6$..."}}
]}

status على المستوى الأعلى هو أسوأ حالة عبر جميع الاكتشافات.

يُكتب سطر ملخص بالإجماليات إلى stderr في النهاية. يُعرض شريط التقدم على stderr ويُكبت تلقائيًا عندما لا يكون stderr طرفية.

رمز الخروج هو 0 إذا كان أي هدف معرّضًا، و1 إذا كان كل هدف قابل للوصول نظيفًا، و2 إذا تعذّر الوصول إلى أي هدف.

أمثلة

افحص قائمة أهداف، واكتب الإصابات إلى ملف، وابقَ هادئًا على stdout:

root@kitploit:~
python scanner.py -f targets.txt -o vulnerable.txt -q

افحص بقائمة أسماء مستخدمين مخصصة على سطح cPanel، مع زيادة التوازي، ومخرجات JSON للمعالجة اللاحقة:

root@kitploit:~
python scanner.py -f targets.txt -U cpanel-users.txt -c 100 --json results.jsonl

افحص مجموعة منافذ غير افتراضية:

root@kitploit:~
python scanner.py -p 2083,2087,8443 -f targets.txt

شغّل سلسلة CalDAV من البداية إلى النهاية ضد هدف واحد مع الاحتياط بالرش عبر البريد الإلكتروني (يتطلب scanner.ini معبأ):

root@kitploit:~
python scanner.py --config scanner.ini --exploit example.com

استغلال موجّه ضد بريد إلكتروني افتراضي معروف — معدل إصابة أعلى بكثير من الرش:

root@kitploit:~
python scanner.py --config scanner.ini --email [email protected] example.com

شغّل سلسلة CalDAV فقط ضد قائمة مضيفات cpdavd مؤكدة، مع تفريغ معاينات /etc/passwd إلى JSON:

root@kitploit:~
python scanner.py --config scanner.ini --caldav-only \
    -f cpdavd-hosts.txt --json caldav-results.jsonl

ملاحظات حول السلامة

الوضع الافتراضي (آمن)

الاستدعاء الافتراضي scanner.py <target> يشغّل كاشف CVE-2026-41940 فقط. يرسل الطلبات اللازمة لتأكيد حقن الجلسة ولا شيء غير ذلك. لا يسجّل الدخول كمستخدم حقيقي، ولا يستهدف حساب root، ولا يرقّي إلى شلّ، ولا يراكم أحداث كلمات مرور فاشلة ضد أي حساب صالح على النظام المستهدف. العلامة التي يطابقها (msg_code:[expired_session]) يولّدها التطبيق نفسه استجابةً لحقل الجلسة المحقون expired=1، وهي نفس المؤشر الذي تستخدمه صفحة تسجيل دخول cPanel الأصلية عند إعادة تشغيل جلسة منتهية بشكل مشروع.

وضع الاستغلال (نشط)

تمرير --exploit (أو --caldav-only) يفتح سلسلة اجتياز المسار في CalDAV. هذا لم يعد كاشفًا — إنه استغلال يعمل. عند التفعيل، سيقوم الماسح، لكل هدف ينجح فيه تعداد النطاقات، بما يلي:

  • فتح جلسة SMTP حقيقية عبر المرحّل المُهيأ في scanner.ini وإرسال رسالة قصيرة واحدة لكل مستلم مرشح (عادة 10–15 لكل نطاق، و3 نطاقات لكل هدف)؛
  • الانتظار حتى ~65 ثانية لكل نطاق حتى يظهر تسليم البريد مجلد maildir الخبيث؛
  • محاولة قراءة الملف المُهيأ --read-file من كل هدف مؤكد.

الملف الافتراضي هو /etc/shadow. القراءة الناجحة تعيد بايتات الملف؛ النص الفارغ يشير إما إلى هدف غير قابل للوصول أو مضيف مطبَّق عليه إصلاح إسقاط الصلاحيات (cPanel 11.134.0.26، my $privs = …). يقارن الكشف طول النص المستلَم بالصفر، وليس Content-Length المُعلَن في الاستجابة (المشتق من stat() على المسار الذي يختاره المهاجم، وسيكون معبأ حتى عندما يُرفض open() اللاحق).

لاختبار إمكانية الوصول إلى الاجتياز بشكل مستقل عن إصلاح إسقاط الصلاحيات — مثلًا عندما تريد معرفة ما إذا كان cpdavd قابلًا للوصول ومتطلب maildir مستوفى على مضيف محدَّث — أعد التشغيل مع --read-file /etc/passwd. /etc/passwd قابل للقراءة عالميًا لذا يعيد بايتات على المضيفين قبل التحديث وبعده؛ الجمع بين الإشارتين (نص /etc/shadow موجود = قراءة جذر قبل التحديث؛ /etc/shadow فارغ + /etc/passwd موجود = الاجتياز قابل للوصول لكن إصلاح إسقاط الصلاحيات مطبَّق) يصنّف المضيف بشكل لا لبس فيه.

تُكتب المحتويات ومعاينة من 200 بايت إلى مخرجات JSONL وتُطبع على stdout. يمكن أن يستغرق استغلال CalDAV لكل نطاق دقيقة أو أكثر — هذا هو سلم إعادة المحاولة بانتظار تسليم البريد، وليس تعليقًا.

شغّل --exploit فقط ضد أصول تملكها أو لديك إذن كتابي صريح لاختبارها. يسجّل مرحّل SMTP المُهيأ وكل نظام بريد للمستلم حركة SMTP؛ وتُسجَّل قراءات الملفات بواسطة cpdavd.

تنزيل الأداة
  • --exploit — تفعيل سلسلة اجتياز المسار في CalDAV. معطّل افتراضيًا؛ انظر وضع الاستغلال (نشط) للآثار الجانبية التي يفتحها هذا العلم.
  • --config — ملف INI يحتوي بيانات اعتماد مرحّل SMTP وإعدادات CalDAV القابلة للضبط. انظر scanner.ini.example.
  • --read-file — الملف المراد استخراجه عند نجاح سلسلة CalDAV. يتجاوز القيمة في ملف الإعدادات. الافتراضي /etc/shadow — ملف للجذر فقط، لذا القراءة الناجحة تفرّق بين ما قبل التحديث (يعيد محتوى shadow) وما بعده (open مرفوض ونص الاستجابة فارغ ← يُبلَّغ NOT VULNERABLE). استخدم --read-file /etc/passwd لاختبار إمكانية الوصول إلى الاجتياز دون التمييز بين المضيف المحدَّث وغير المحدَّث.
  • --caldav-only — تخطّي فحص 41940 وتشغيل سلسلة CalDAV فقط. يستلزم --exploit. مفيد لإعادة تشغيل السلسلة ضد قائمة أهداف معروفة بأنها قابلة للوصول عبر CalDAV.
  • --email ADDR — حساب بريد إلكتروني افتراضي معروف على الهدف. يتخطى تعداد SAN للشهادة وقائمة رش الكلمات؛ يرسل رسالة واحدة بالضبط إلى ADDR ويقرأ مقابل ذلك principal. يمكن تكراره. يستلزم --exploit. انظر الاستغلال الموجّه مقابل الاستغلال بالرش.
  • -v, --verbose — إخراج تقدم لكل نطاق لسلسلة CalDAV (قائمة SAN للشهادة، عدد الرش، سلم إعادة المحاولة).