Azuriom CMS Broken Access Control — Account Takeover via AzLink Server Token — CVE-2026-54415
by Bobur Abdugafforov ([@abdugafforov-bobur](https://github.com/abdugafforov-bobur)) · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-54415
- Category
- web
- Affected product
- Azuriom CMS
- Affected versions
- < 1.2.11 (fixed in 1.2.11, commit 4b744bc)
- Disclosed
- 2026-07-05
- Patch status
- patched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-06-17 |
| Author / Researcher | Bobur Abdugafforov (@abdugafforov-bobur) |
| CVE / Advisory | CVE-2026-54415 |
| Category | web |
| Severity | High |
| CVSS Score | CVSS 3.1: 8.1 High (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N); CVSS 4.0: 8.6 High |
| Status | PoC |
| Tags | azuriom, cms, broken-access-control, cwe-862, cwe-269, privilege-escalation, account-takeover, php, laravel, azlink |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Azuriom CMS |
| Versions Affected | < 1.2.11 (fixed in 1.2.11, commit 4b744bc) |
| Language / Platform | PHP / Laravel |
| Authentication Required | Yes — a low-privileged admin account holding only the admin.access permission |
| Network Access Required | Yes |
Summary
Before Azuriom 1.2.11, the admin panel’s server-management routes (/admin/servers/*) had no dedicated permission gate — any admin-panel user with just the base admin.access permission could reach them, since the admin.servers permission did not exist yet. Creating a server of type mc-azlink mints a 32-character AzLink server token without requiring a reachable game server (its verifyLink() check unconditionally returns true). That token authenticates against the AzLink API, whose /api/azlink/password endpoint changes any non-admin user’s password by game_id with no additional checks — turning a minor admin-panel permission into full account takeover of any non-admin user.
Vulnerability Details
Root Cause
Missing authorization (CWE-862) on the servers resource routes in routes/admin.php prior to 1.2.11 — they were reachable by any user passing the blanket can:admin.access middleware, with no granular admin.servers permission (which the vendor introduced only in the fix). Combined with improper privilege management (CWE-269) in the AzLink password-reset endpoint, which only refuses to act on accounts where isAdmin() is true, leaving every non-admin account resettable by anyone holding a valid server token.
Attack Vector
- Authenticate as a low-privileged admin holding only
admin.access(noadmin.servers, which did not exist pre-fix). POST /admin/serverswithtype=mc-azlinkand any dummyaddress— the server is saved and a 32-char token is minted (verifyLink()formc-azlinkalways returnstrue).GET /admin/servers/{id}/editand extract the token echoed inside the AzLink setup command (/azlink setup <url> <token>).POST /api/azlink/passwordwith headerAzuriom-Link-Token: <token>and bodygame_id=<victim>&password=<new>to reset the victim’s password (rejected only for admin accounts).- Log in as the victim with the newly-set password — full account takeover.
Impact
Any user with minimal admin-panel access (admin.access only, no server-management rights) can take over any non-admin user account on the platform without any interaction from the victim or a higher-privileged admin.
Environment / Lab Setup
Target: Local Azuriom 1.2.10 instance (verified end-to-end by the researcher)
Attacker: Python 3 + requests (pip install requests)
Proof of Concept
PoC Script
See
poc.pyin this folder.
| |
The script logs in as the low-privileged admin, creates an mc-azlink server to mint a token, extracts that token from the server edit page, calls the AzLink /api/azlink/password endpoint to reset the target victim’s password by game_id, and prints the recovered token plus the result of the takeover attempt.
Detection & IOCs
Signs of compromise:
- Newly created
mc-azlinkservers with implausible/dummy addresses - Unexplained password or email changes on non-admin accounts correlated with AzLink API calls
- Admin accounts with only
admin.accessperforming server-management actions
Remediation
| Action | Detail |
|---|---|
| Primary fix | Upgrade to Azuriom 1.2.11 or later, which introduces the admin.servers permission and gates all server-management routes behind it |
| Interim mitigation | Audit and revoke unexpected admin_servers tokens, enforce least privilege on which admin roles hold admin.access, and monitor AzLink API traffic for tokens not tied to legitimate game servers |
References
Notes
Mirrored from https://github.com/abdugafforov-bobur/CVE-2026-54415-PoC on 2026-07-05. Researcher states the PoC was verified end-to-end against a local Azuriom 1.2.10 instance; published for defensive/educational purposes against an already-patched version (fixed in 1.2.11).
| |