Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
ReconObtain low-privilege Arcane account
-
DeliveryPOST project with malicious `include: ['../../../../app/data/arcane.db']`
-
ExploitGET project file API to read SQLite DB
-
InstallCrack argon2 hashes or replay API keys offline
-
C2Authenticate as admin
-
ExecuteInvoke Docker control plane to spawn privileged container
-
ImpactAchieve host RCE via mounted docker.sock
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK
2 techniques across 2 tactics: Discovery, Collection The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Attacker must hold valid Arcane credentials of any role (the default |
| Impact | CVSS 7.7 (AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N) accurately reflects a network-reachable, authenticated, low-complexity disclosure bug with cross-scope confidentiality impact - one user reads credentials of other users and admins (justifying S:C). EPSS and KEV signals are not provided in the input, but the vendor advisory is public and the patch commit b6cbffa is published on GitHub, so weaponization barriers are low even though no public exploit identified at time of analysis. The real-world severity is materially higher than the headline 7.7 suggests: arbitrary read of |
| Exploit ScenarioDerived | An attacker with any valid Arcane account (default |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 28, 2026
Authenticated arbitrary file read in Arcane (Docker management UI) versions ≤ 1.19.3 allows any low-privileged user to read any file accessible to the backend process by abusing Docker Compose include: directives. Because CreateProject skips include-path validation that UpdateProject enforces, an attacker can register a project whose compose file points at /etc/passwd or /app/data/arcane.db, then fetch the contents via the project file API - yielding stored password hashes and API keys for all users, enabling admin takeover and host RCE through Arcane's Docker control plane. No public exploit identified at time of analysis; vendor patch is available in 1.19.4.
RemediationAI
Vendor-released patch: upgrade Arcane backend to 1.19.4 or later, which adds validateComposeContentForUpdate enforcement to CreateProject and routes include reads through a new readProjectIncludeFileContentInternal helper that calls ValidateIncludePathForWrite, filepath.EvalSymlinks, and IsSafeSubdirectory before returning file content (commit https://github.com/getarcaneapp/arcane/commit/b6cbffabf61dbc3f12a28d3b5830e3c6b7e67daf; advisory https://github.com/getarcaneapp/arcane/security/advisories/GHSA-c3px-h233-h6fq). If immediate upgrade is not possible, compensating controls include: disabling self-registration and rotating all Arcane account passwords and API keys (the arcane.db may already have been exfiltrated - assume compromise if exposed); restricting network access to the Arcane API to trusted operators only via reverse-proxy ACLs or VPN (eliminates anonymous account creation paths but does not stop insider abuse); removing the host Docker socket mount where feasible to break the disclosure→RCE chain (cost: loses container-management functionality); and auditing access logs for POST /api/environments/*/projects followed by GET /api/environments/*/projects/*/file requests with traversal sequences in the path. After upgrading, rotate every password hash and API key stored in arcane.db because prior reads cannot be retroactively detected.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in go, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Arcane is a Go-based Docker/Compose management application (package github.com/getarcaneapp/arcane/backend) that lets authenticated users define Compose projects through its API. Docker Compose supports an include: directive for composing fragments from other files; Arcane intentionally allows includes to be read from arbitrary paths to preserve Compose compatibility, while restricting writes to within the project directory. The vulnerability is a classic CWE-22 (Path Traversal): ProjectService.CreateProject (project_service.go:1605) writes attacker-controlled compose YAML to disk without invoking the validateComposeContentForUpdate / ValidateIncludePathForWrite checks used by UpdateProject. ProjectService.GetProjectFileContent (project_service.go:831) then invokes projects.ParseIncludes, which performs os.ReadFile(filepath.Clean(filepath.Join(baseDir, includePath))) with no containment check (includes.go:97-105), and returns the file contents to the caller before the IsSafeSubdirectory guard at line 870 is ever reached. The RelativePath of the include preserves the traversal sequence verbatim, allowing the equality match in the handler to succeed.
Know when Docker gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
Primary rating from Vendor (https://github.com/getarcaneapp/arcane).
CVSS VectorVendor: https://github.com/getarcaneapp/arcane
DescriptionCVE.org
Summary
ProjectService.GetProjectFileContent returns the contents of any Docker Compose include directive declared in a project's compose file before any path-traversal validation runs. Because ProjectService.CreateProject writes attacker-supplied compose content to disk without validating include paths, an authenticated user can create a project whose compose file declares include: ['../../../../etc/passwd'], then read the include via the project file API. The result is arbitrary read of any file readable by the Arcane backend process, including /app/data/arcane.db (the SQLite database containing every user's password hash and API key), enabling escalation to admin and, via Arcane's Docker control plane, RCE on the host.
Details
Root cause #1 - CreateProject writes compose content without validation (backend/internal/services/project_service.go:1605-1644):
func (s *ProjectService) CreateProject(ctx context.Context, name, composeContent string, envContent *string, user models.User) (*models.Project, error) {
// ... directory setup ...
if err := projects.SaveOrUpdateProjectFiles(projectsDirectory, projectPath, composeContent, envContent); err != nil {
_ = s.db.WithContext(ctx).Delete(proj).Error
return nil, fmt.Errorf("failed to save project files: %w", err)
}
// ...
}Compare with UpdateProject (project_service.go:2494, :2577), which calls validateComposeContentForUpdate. That validator (line 2599) loads the compose with missingIncludeStubResourceLoaderInternal, which calls ValidateIncludePathForWrite (includes.go:139) and rejects includes outside the project directory. CreateProject bypasses this entirely, so any malicious include: array survives to disk.
Root cause #2 - GetProjectFileContent reads include files before path validation (backend/internal/services/project_service.go:831-872):
includes, parseErr := projects.ParseIncludes(composeFile, envMap, true)
if parseErr == nil {
for _, inc := range includes {
if inc.RelativePath == relativePath {
return project.IncludeFile{
Path: inc.Path,
RelativePath: inc.RelativePath,
Content: inc.Content, // <-- arbitrary file content returned here
}, nil
}
}
}
fullPath := filepath.Join(proj.Path, relativePath)
// ... IsSafeSubdirectory check at line 870 - never reached when include matches ...Root cause #3 - ParseIncludes reads include files from anywhere by design (backend/pkg/projects/includes.go:24-72):
// Security Model for Include Files:
// - READ: Docker Compose allows include files from anywhere (parent dirs, absolute paths, etc.)
// We allow reading from any path to maintain compatibility with standard Docker Compose behavior
// - WRITE/DELETE: Restricted to files within the project directory only for securityparseIncludeItemInternal at includes.go:97-101 builds fullPath = filepath.Clean(filepath.Join(baseDir, includePath)) and os.ReadFile(fullPath) at line 105 - no containment check. The returned RelativePath (line 124) is filepath.ToSlash(filepath.Clean(includePath)), which preserves ../../../../etc/passwd verbatim for the equality match in GetProjectFileContent.
Authorization surface: The handler GET /api/environments/{id}/projects/{projectId}/file (backend/internal/huma/handlers/projects.go:268-279) and POST /api/environments/{id}/projects (line 242-253) only declare BearerAuth/ApiKeyAuth. There is no admin-role gate on either handler - GetProjectFile (line 582) and CreateProject (line 524) simply call humamw.GetCurrentUserFromContext. The default user role assigned in users.go:223 is "user" (not admin), and that role is sufficient to exploit.
Resulting primitive: arbitrary read of any file readable by the Arcane backend process (uid/gid of the container). Sensitive targets include /app/data/arcane.db (SQLite containing argon2 password hashes and API keys for every user), /app/data/secrets/*, mounted host configuration, SSH keys (if mounted), and Docker socket-adjacent secrets.
Impact
- Arbitrary file read as the Arcane backend process for any authenticated user, including users with the lowest-privilege
"user"role. - Credential disclosure:
arcane.dbcontains argon2 password hashes for every account (including admins) and API key material - supports offline cracking and direct token exfiltration. - Privilege escalation: a
"user"-role attacker can recover or replay admin credentials, then exercise full Arcane functionality (Docker container/exec/volume control), which on a typical deployment with the host Docker socket mounted is host RCE. - Configuration / secret exposure: any environment files, OIDC client secrets, registry credentials, or files mounted into the container are reachable.
- The scope crosses the security authority of other user accounts (S:C), since one authenticated user reads credentials belonging to other users and to the admin.
Executive ViewAI
Arcane Docker management UI versions 1.19.3 and earlier contain an authenticated arbitrary file read vulnerability allowing any low-privileged user to extract password hashes, API keys, and database contents. Organizations using affected instances risk administrative account compromise and remote code execution against their Docker infrastructure.
Apply vendor patch to Arcane version 1.19.4.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.
An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl
runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac
Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a
Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/
The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post
Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten
Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build
Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config
Unauthenticated remote command injection in SGWBOX N3 firmware 2.0.25 lets attackers execute arbitrary operating-system
Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per
Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l
Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c
Same weakness CWE-22 – Path Traversal
View allSame technique Privilege Escalation
View allVendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-33369
GHSA-c3px-h233-h6fq
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB