
تحليل فني لتجاوز المصادقة في cPanel/WHM
تحليل فني معمق موجه للمدافعين
| الحقل | القيمة |
|---|---|
| معرف CVE | CVE-2026-41940 |
| CVSS v3.1 | 9.8 (حرج) — شبكة / تعقيد منخفض / بدون صلاحيات / بدون تفاعل مستخدم |
| فئة الثغرة | حقن CRLF قبل المصادقة → تسميم ملف الجلسة → تجاوز المصادقة |
| CWE | CWE-93 (تحييد غير صحيح لتسلسلات CRLF)، ويمكن القول إنها أقرب إلى CWE-117 (تحييد غير صحيح للمخرجات للسجلات/الملفات)، نظرًا لأن CRLF المحقون يصل إلى ملف جلسة على القرص بدلاً من رأس استجابة HTTP |
| المنتجات المتأثرة | cPanel، WHM (WebHost Manager)، WP Squared |
| التأثير | الحصول غير المصادق عليه وعن بُعد على جلسة إدارية ذات صلاحيات جذر كاملة في WHM |
| تاريخ الإفصاح | 28 أبريل 2026 (نشرة أمنية من cPanel) |
| تعيين CVE | 29 أبريل 2026 |
| الاستغلال في البرية | لوحظ في وقت مبكر يعود إلى 23 فبراير 2026، وفقًا لمزود الاستضافة KnownHost — أي قبل حوالي شهرين من إصدار التصحيح |
| قائمة CISA KEV | أُضيفت بعد الإفصاح بفترة قصيرة |
| التعرض المقدر | ~1.5 مليون مثيل cPanel مواجه للإنترنت (إحصائيات Shodan نقلاً عن Rapid7)؛ تمتلك cPanel حصة تقدر بـ94% من سوق لوحات التحكم على الويب (W3Techs) |
| الحل البديل | لا يوجد — التصحيح هو العلاج الوحيد الكامل |
cPanel & WHM هي البرنامج المهيمن للوحات التحكم في الاستضافة المشتركة واستضافة إعادة البيع. cPanel هي واجهة الحساب الموجهة للعميل؛ WHM هي الواجهة الإدارية على مستوى الجذر التي يستخدمها مزودو الاستضافة وأصحاب الخوادم. يتم تقديم كلتيهما بواسطة نفس البرنامج الخفي Perl، cpsrvd، الذي يستمع على أزواج من المنافذ لكل سطح (cPanel: 2082/2083، WHM: 2086/2087، البريد الإلكتروني: 2095/2096).
تسمح CVE-2026-41940 لمهاجم بدون أي بيانات اعتماد على الإطلاق بالتلاعب بحالة الجلسة على القرص قبل حدوث المصادقة، مما يتسبب في قيام cpsrvd لاحقًا بإعادة تفسير البيانات التي قدمها المهاجم على أنها سمات جلسة مشروعة وموثقة بالكامل وذات صلاحيات جذر. والنتيجة هي اختراق كامل لمستوى الإدارة لكل موقع وحساب مستضاف على الخادم — ليست مشكلة تتعلق بمستأجر واحد، بل مشكلة على مستوى المضيف، ومستوى المزود، وعلى المستوى الإجمالي، على مستوى الصناعة بأكملها، نظرًا لتركيز cPanel في السوق.
درجة CVSS البالغة 9.8 شائعة بما يكفي لدرجة أنها قد تصبح مسببة للخدر عند قراءتها. هناك ثلاثة عوامل هيكلية تجعل CVE-2026-41940 شديدة الخطورة بشكل غير عادي في الممارسة العملية:
نطاق الانفجار هو الخادم بأكمله، وليس حسابًا. اختراق WHM هو اختراق لجذر النظام. كل حساب عميل، وكل قاعدة بيانات، وكل مفتاح خاص لـ TLS، وكل نسخة احتياطية، وكل منطقة DNS على ذلك الخادم تصبح ضمن النطاق فورًا.
كانت ثغرة يوم-صفر حقيقية لمدة شهرين تقريبًا. تضع بيانات KnownHost الاستغلال الأولي حوالي 23 فبراير 2026، أي قبل التصحيح الصادر في 28 أبريل. أي منظمة كانت مكشوفة على الإنترنت خلال تلك الفترة يجب أن تفترض أن الاختراق ممكن، وليس مجرد نظري، ويجب أن تجري تقييمًا بأثر رجعي للاختراق بدلاً من الاعتماد على "لقد قمنا بالتصحيح، لذا نحن بخير."
معظم المنظمات المتضررة لا يمكنها تصحيح هذا بنفسها. يتم نشر cPanel عادةً بواسطة مزودي الاستضافة نيابة عن المستأجرين. ليس لدى العملاء النهائيين أي سيطرة على مستوى الكود على الإصلاح ويعتمدون كليًا على وتيرة تصحيح مزود الخدمة الخاص بهم — وهذا هو بالضبط السبب الذي جعل العديد من المضيفين الكبار (Namecheap, KnownHost, HostPapa, InMotion) يختارون بشكل استباقي حظر حركة المرور الواردة إلى المنافذ المتأثرة بدلاً من انتظار كل مستأجر للتحديث.
هذه النقطة الثالثة تستحق التأمل. تسيطر cPanel على ما يقدر بـ94% من سوق لوحات التحكم. خطأ منطقي واحد في كود معالجة الجلسات لبائع واحد أصبح، لفترة أسابيع، ثغرة وصول جذر على مستوى الصناعة بحكم الأمر الواقع. خطر التركيز هذا هو موضوع متكرر يستحق الاستيعاب بشكل مستقل عن هذا CVE المحدد.
cpsrvd هو برنامج خفي طويل الأمد بلغة Perl يخدم جميع أسطح منتجات cPanel الثلاثة من نفس الملف الثنائي، والأهم من ذلك، من نفس مسار كود معالجة الجلسة:
| زوج المنافذ | السطح | الجمهور |
|---|---|---|
| 2082 / 2083 | cPanel | العملاء النهائيون (لكل حساب) |
| 2086 / 2087 | WHM | مدراء الجذر/إعادة البيع |
| 2095 / 2096 | البريد الإلكتروني | مستخدمو البريد الإلكتروني |
نظرًا لأن جميع الأسطح الثلاثة تشترك في منطق الجلسة الضعيف، فإن تعرض أي من هذه المنافذ الستة يكفي للاستغلال — لا يوجد سطح "أقل تعرضًا" بشكل ذي معنى بينها. في البيئات المجزأة بشكل جيد، لا ينبغي أن تكون أي من هذه المنافذ قابلة للوصول مباشرة من الإنترنت في المقام الأول؛ في الممارسة العملية، فإن سهولة الإدارة والترتيبات الاستضافة الهجينة وانجراف جدران الحماية تعني أن العديد منها كان كذلك.
يتم الاحتفاظ بجلسات cPanel في تمثيلين متوازيين على القرص، على ما يبدو لأسباب تتعلق بالأداء:
/var/cpanel/sessions/raw/<session-id>) — تنسيق نص عادي موجه بالأسطر بصيغة key=value، سمة واحدة لكل سطر./var/cpanel/sessions/cache/<session-id>، من الناحية النظرية) — مستند JSON منظم، يُقرأ بشكل تفضيلي بواسطة مسار الطلب العادي لأن تحليله أرخص.تحت التشغيل العادي، تكون ذاكرة التخزين المؤقت JSON هي المرجعية وملف الجلسة الخام هو دعامة للاستمرارية. الثغرة موجودة على وجه التحديد لأنه توجد ظروف يتم فيها إعادة تحليل الملف الخام واستخدامه لتجديد ذاكرة التخزين المؤقت JSON، والتنسيقان يختلفان حول معنى حرف السطر الجديد المضمن.
CVE-2026-41940 ليست خطأ واحدًا. إنها نتاج أربعة نقاط ضعف منفصلة، كل منها معقول بشكل فردي كقرار تصميمي معزول، والتي تصطف لإنتاج تجاوز كامل للمصادقة. هيكل "الجبن السويسري" هذا مفيد للمدافعين ومراجعي الكود إلى أبعد من هذا المنتج المحدد.
كان لدى نظام جلسات cPanel بالفعل روتين تعقيم مسؤول عن إزالة الأحرف الخطرة — إرجاع العربة، وتغذية الأسطر، و = — من قيم الجلسة قبل حفظها. المشكلة هي أين تم استدعاء هذا الروتين: كان يعيش داخل وظائف الغلاف ذات المستوى الأعلى (واجهة برمجة تطبيقات "إنشاء"/"تعديل" الجلسة)، وكانت مسؤولية المستدعي هي التوجيه عبر هذه الأغلفة بدلاً من كتابة بيانات الجلسة مباشرة.
قام معالج مصادقة HTTP الأساسي داخل cpsrvd — مسار الكود الذي يقبل بيانات الاعتماد مباشرة من رأس Authorization HTTP — بحفظ كلمة المرور المقدمة في ملف جلسة ما قبل المصادقة من خلال روتين حفظ منخفض المستوى تجاوز الغلاف المعقم تمامًا. نظرًا لأن التعقيم كان اختياريًا وليس إلزاميًا عند نقطة الكتابة على القرص، فإن هذا المستدعي الواحد تخطاه بصمت.
هذا هو نمط الفشل النموذجي لـ "التحقق عند المصدر، وليس عند المصب": طالما يمكن تجاوز عنصر تحكم أمني ببساطة عن طريق استدعاء وظيفة مختلفة، فسيتم تجاوزه في النهاية، سواء من خلال الإشراف، أو إعادة الهيكلة، أو مسار كود لم يفكر أحد في تدقيقه ضد هذا التحكم المحدد. الإصلاح الدائم الذي أصدرته cPanel ينقل استدعاء التعقيم داخل وظيفة الحفظ نفسها، بحيث لا يمكن لأي مستدعي، حاضرًا أو مستقبليًا، تخطيه بعد الآن.
يقوم كاتب الجلسة بتشفير الحقول الحساسة (لا سيما حقل كلمة المرور) باستخدام مفتاح متماثل لكل جلسة. هذا المفتاح مشتق من مكون مضمن في ملف تعريف ارتباط الجلسة الذي يقدمه العميل. في الكود الضعيف، إذا كان مكون المفتاح هذا غائبًا عن الطلب — وهو أمر يقع بالكامل تحت سيطرة المهاجم، لأنه يختار ملف تعريف الارتباط الذي يرسله — تم تخطي خطوة التشفير بصمت بدلاً من رفض الكتابة.
بعبارة أخرى: المهاجم الذي يحذف عمدًا أو يبتلع جزءًا من ملف تعريف ارتباط الجلسة الخاص به يمكن أن يتسبب في كتابة بياناته المقدمة على القرص بدون تشفير. التشفير الذي يمكن تبديل تنشيطه عن طريق الطرف غير الموثوق الذي يزود المدخلات ليس حدًا أمنيًا ذا معنى؛ يجب أن يفشل مغلقًا (رفض الحفظ، أو رفض الطلب) بدلاً من أن يفشل مفتوحًا (الحفظ دون حماية).
هذا هو جوهر "الحقن" في حقن CRLF. ملف الجلسة الخام محدد بالأسطر: تسلسل إرجاع العربة / تغذية السطر ينهي سجل key=value ويبدأ السجل التالي. تنسيق ذاكرة التخزين المؤقت JSON، على النقيض من ذلك، يمثل نفس تسلسل الأحرف كسلسلة فرعية مفلترة داخل قيمة سلسلة JSON واحدة — غير ضارة دلاليًا، مجرد بيانات.