
# ماسح مؤشرات الاختراق (IOC) لتجاوز المصادقة CVE-2026-41940 في cPanel/WHM — يصلح النتائج الإيجابية الخاطئة في سكربت الكشف الأصلي، ويضيف ترابطًا متقاطعًا للسجلات
نص برمجي للكشف عن ثغرة تجاوز المصادقة في cPanel/WHM (CVE-2026-41940) التي تؤثر على جميع إصدارات cPanel بعد الإصدار 11.40.
هذه إعادة كتابة لـ نص الكشف الأصلي من cPanel مع إصلاحات للنتائج الإيجابية الخاطئة وإضافة ربط السجلات.
يفحص /var/cpanel/sessions/raw/ بحثًا عن ملفات الجلسات التي تظهر عليها علامات استغلال حقن الأسطر الجديدة، ثم يربط عناوين IP المشبوهة ورموز الجلسات بسجلات الوصول/تسجيل الدخول/الأخطاء في cPanel. كما يفحص access_log بحثًا عن استغلال تاريخي حيث انتهت صلاحية ملف الجلسة أو تمت إزالته.
pass الذي ينتج نتائج إيجابية خاطئة على كل جلسة مصادقة في الإنتاج (regex يطابق أي حقل pass= متبوعًا بسطر آخر، وهو ما ينطبق على كل ملفات الجلسات).method=badpass origin + أي سمة ما بعد المصادقة بدلاً من اشتراط التركيبة الضيقة token_denied + cp_security_token. يلتقط متغيرات PoC التي تحذف token_denied.POST /login/?login_only=1 -> 401) مع استخدام ناجح لاحق لرمز cpsess من نفس عنوان IP.--extended لفحص أعمق للسجلات عبر مصادر إضافية.# Bash — يعمل في كل مكان، بدون تبعيات
bash <(curl -fsSL https://raw.githubusercontent.com/AndreiG6/cpanel-cve-2026-41940-ioc/main/ioc.sh)
# Python — أسرع على مجلدات الجلسات الكبيرة، يدعم --json
curl -fsSLo /tmp/ioc.py https://raw.githubusercontent.com/AndreiG6/cpanel-cve-2026-41940-ioc/main/ioc.py
python3 /tmp/ioc.py
# فحص موسع (أي من النسختين)
bash <(curl -fsSL https://raw.githubusercontent.com/AndreiG6/cpanel-cve-2026-41940-ioc/main/ioc.sh) --extended
python3 /tmp/ioc.py --extended
# تحقق من رمز الخروج بعد التشغيل ($? = 0 نظيف، 1 مؤشرات اختراق موجودة، 2 خطأ بيئة)
echo $?
أعلام curl:
-fيفشل على أخطاء HTTP بدلاً من تمرير صفحة خطأ إلى bash،-sصامت (بدون شريط تقدم)،-Sيعرض الأخطاء رغم-s،-Lيتبع عمليات إعادة التوجيه.
النسخة Python تدعم --json لمخرجات منظمة يمكن تمريرها إلى jq، أو إرسالها إلى SIEM، أو معالجتها برمجيًا.
# مخرجات JSON كاملة
python3 ioc.py --json
# ملخص العدادات فقط
python3 ioc.py --json | jq '.counts'
# قائمة كل النتائج الحرجة
python3 ioc.py --json | jq '[.findings[] | select(.severity == "CRITICAL")]'
# استخراج عناوين IP الفريدة للمهاجمين
python3 ioc.py --json | jq '.suspect_ips[]'
# عرض النتائج مع عناوين IP المصدر (لقوائم حظر جدار الحماية)
python3 ioc.py --json | jq '[.findings[] | {severity, source_ip, token: .cp_security_token}]'
# الحصول على كل عناوين IP التي استخدمت الرمز بنجاح (للحظر الفوري)
python3 ioc.py --json | jq '[.findings[] | select(.severity == "CRITICAL") | .source_ip] | unique'
# تغذية بيانات الربط لعنوان IP محدد
python3 ioc.py --json | jq '.cross_ref[.suspect_ips[0]]'
مثال على بنية JSON:
{
"findings": [
{
"severity": "CRITICAL",
"file": "/var/cpanel/sessions/raw/:Q3f8Ag2epeBuTaIZ",
"verdict": "Injected token used successfully (2xx/3xx in access_log)",
"origin": "address=203.0.113.50,app=whostmgrd,method=badpass",
"source_ip": "203.0.113.50",
"user": "root",
"hasroot": "1",
"tfa_verified": "0",
"cp_security_token": "/cpsess04396539398",
"token_denied": "1",
"successful_internal_auth_with_timestamp": "9999999999",
"token_hits": [
"203.0.113.50 - root [04/30/2026:12:12:01 -0000] \"GET /cpsess04396539398/json-api/version HTTP/1.1\" 200 0 ..."
]
},
{
"severity": "MEDIUM",
"file": "/var/cpanel/sessions/raw/:2TDiaHwh_r8qOH5y",
"verdict": "Injection landed; token was tried but BLOCKED (all 4xx/5xx)",
"source_ip": "198.51.100.23",
"cp_security_token": "/cpsess5637704041",
"token_hits": [
"198.51.100.23 - root [04/30/2026:04:08:09 -0000] \"GET /cpsess5637704041/json-api/version HTTP/1.1\" 403 0 ..."
]
},
{
"severity": "CRITICAL",
"file": null,
"verdict": "Injected cpsess token used with 2xx/3xx after failed login; session expired or purged",
"source_ip": "203.0.113.99",
"cp_security_token": "/cpsess8705792557",
"token_hits": ["..."]
}
],
"counts": {"critical": 2, "high": 15, "medium": 71, "warning": 0},
"suspect_ips": ["203.0.113.50", "198.51.100.23", "203.0.113.99"],
"suspect_ips_omitted": 0,
"cross_ref": {
"203.0.113.50": {
"cpanel_access_log": ["...last 5 lines..."],
"cpanel_login_log": ["..."]
}
},
"advisory": "https://support.cpanel.net/hc/en-us/articles/40073787579671"
}
git clone https://github.com/AndreiG6/cpanel-cve-2026-41940-ioc.git
cd cpanel-cve-2026-41940-ioc
# نسخة Bash
bash ioc.sh # الافتراضي (توسيع الحرج/العالي، عدادات المتوسط/التحذير فقط)
bash ioc.sh -v # مفصّل (توسيع كل النتائج)
bash ioc.sh --extended # مفصّل + سجلات أعمق + كل عناوين IP في الربط
# نسخة Python (نفس منطق الكشف، أسرع، مخرجات منظمة)
python3 ioc.py # الافتراضي (نفس سلوك الطي في bash)
python3 ioc.py -v # مفصّل
python3 ioc.py --extended # مفصّل + سجلات أعمق
python3 ioc.py --json # JSON منظم (يتضمن دائمًا كل النتائج)
يجب تشغيله كجذر (root) على خادم cPanel المستهدف. نسخة Python تتطلب Python 3.6+ (مضمنة في CentOS 7 / CloudLinux 7+).
| الرمز | المعنى |
|---|---|
| 0 | لا توجد مؤشرات |
| 1 | تم اكتشاف مؤشرات اختراق |
| 2 | خطأ بيئة (ليس خادم cPanel) |
MIT