
CVE-2026-41452 — Contournement non authentifié de l’installateur Krayin CRM (X-Requested-With) → prise de contrôle administrateur. Vérifié : écrasement + connexion sur 2.2.4, bloqué sur 2.2.5
CVSS 9.8 (Critique) · CWE-287 / CWE-306 · Analyse de Jiva · VulnCheck
L'installateur de Krayin CRM expose POST /install/api/admin-config-setup (ainsi que run-migration,
run-seeder) sans protection CSRF (groupe withoutMiddleware('web')). Le middleware global
CanInstall ne bloque la route que pour les requêtes non-AJAX :
// app/Http/Middleware/CanInstall.php
if ($this->isAlreadyInstalled() && ! $request->ajax()) {
return redirect()->route('admin.dashboard');
}
L'envoi de X-Requested-With: XMLHttpRequest contourne entièrement la vérification. Le contrôleur
effectue ensuite un updateOrInsert sur l'administrateur principal codé en dur (user id=1) avec
un nom/e-mail/mot de passe fournis par l'attaquant (role_id=1, status=1) → prise de contrôle
totale de l'administrateur sans authentification sur une instance déjà installée.
Versions affectées : ≤ 2.2.0 et 2.2.4 (régression). Corrigé : 2.2.1 (e4eb96f5),
régression dans 2.2.4 (6a7bc4cc), re-corrigé dans 2.2.5 (ea4919a8). master était toujours
vulnérable au moment de la recherche.
python3 poc_cve-2026-41452.py http://TARGET newadmin [email protected] 'NewPass@123'
Chaîne :
X-Requested-With: XMLHttpRequest → HTTP 200 1 → admin (id=1) écrasé/admin/login avec les nouveaux identifiants → redirection vers /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 ===
Comparaison avec la build corrigée : avec les fichiers v2.2.5, le même POST AJAX → HTTP 403 (bloqué).
Toute installation Krayin CRM accessible publiquement (v2.2.4 ou ≤2.2.0) peut être entièrement prise de contrôle par un attaquant non authentifié en une seule requête. Aucune protection CSRF, aucun identifiant ni interaction requis.
ea4919a8 (v2.2.5) · Régression : 6a7bc4cc (v2.2.4) · Première correction : e4eb96f5 (v2.2.1)