Skip to main content

Arcane CVE-2026-47179

| EUVDEUVD-2026-33369 HIGH
Path Traversal (CWE-22)
2026-05-28 https://github.com/getarcaneapp/arcane GHSA-c3px-h233-h6fq
7.7
CVSS 3.1 · Vendor: https://github.com/getarcaneapp/arcane
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Obtain low-privilege Arcane account
  2. Delivery
    POST project with malicious `include: ['../../../../app/data/arcane.db']`
  3. Exploit
    GET project file API to read SQLite DB
  4. Install
    Crack argon2 hashes or replay API keys offline
  5. C2
    Authenticate as admin
  6. Execute
    Invoke Docker control plane to spawn privileged container
  7. Impact
    Achieve 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 user role is sufficient - there is no admin gate on POST /api/environments/{id}/projects or GET /api/environments/{id}/projects/{projectId}/file), and the Arcane API must be network-reachable from the attacker. The malicious project must be created via CreateProject (the bypassed code path) rather than UpdateProject (which already validates includes). No user interaction, non-default configuration, or specific platform is required; deployments running Arcane backend ≤ 1.19.3 are exploitable out of the box. Escalation to host RCE additionally requires that the Arcane container has the host Docker socket mounted, which is the documented common deployment mode but not strictly required for the file-read primitive itself.

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 /app/data/arcane.db yields argon2 hashes and API keys, which trivially chains to admin escalation and - because Arcane is typically deployed with the host Docker socket mounted - to host RCE. The principal limiting factor is the PR:L requirement: an attacker must already hold a valid Arcane account (default user role suffices, with no admin gate on POST /api/environments/{id}/projects or GET .../file), so exposure is largest where self-registration, SSO/OIDC, or shared low-trust accounts are enabled.

Exploit ScenarioDerived

An attacker with any valid Arcane account (default user role) POSTs to /api/environments/{id}/projects with a compose file declaring include: ['../../../../app/data/arcane.db'], then GETs /api/environments/{id}/projects/{projectId}/file?path=../../../../app/data/arcane.db to receive the SQLite database contents. They crack or replay an admin's credentials offline, log in as admin, and - on a typical deployment with /var/run/docker.sock mounted - spawn a privileged container to obtain root on the host. No public exploit identified at time of analysis, but the advisory and patch commit publicly disclose every primitive needed.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Arcane < 1.19.4

Affected Packages

go github.com/getarcaneapp/arcane/backend fix: 1.19.4
euvd arcane fix: 1.19.4

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

Vendor (https://github.com/getarcaneapp/arcane) PRIMARY 7.7 HIGH
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
SUSE HIGH

Primary rating from Vendor (https://github.com/getarcaneapp/arcane).

CVSS VectorVendor: https://github.com/getarcaneapp/arcane

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
None
Availability
None

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):

go
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):

go
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):

go
// 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 security

parseIncludeItemInternal 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.db contains 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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch to Arcane version 1.19.4.

Threat Intelligence Overview

EPSS Score
0.1%
Top 84% exploitable
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Partial

Priority Score

38
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +38
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

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.

More in Docker

View all
CVE-2024-55964 CRITICAL POC
9.8 Mar 26

An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl

CVE-2019-5736 HIGH POC
8.6 Feb 11

runc through version 1.0-rc6 (used in Docker before 18.09.2) contains a container escape vulnerability that allows attac

CVE-2023-32077 HIGH POC
7.5 Aug 24

Netmaker makes networks with WireGuard. Rated high severity (CVSS 7.5), this vulnerability is remotely exploitable, no a

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2023-5815 HIGH POC
8.1 Nov 22

The News & Blog Designer Pack - WordPress Blog Plugin - (Blog Post Grid, Blog Post Slider, Blog Post Carousel, Blog Post

CVE-2026-66384 MEDIUM POC
5.3 Aug 12

Path traversal in JFrog Artifactory (CWE-22) enables an authenticated low-privilege user to write data outside the inten

CVE-2014-9357 CRITICAL
10.0 Dec 16

Docker 1.3.2 allows remote attackers to execute arbitrary code with root privileges via a crafted (1) image or (2) build

CVE-2026-52806 CRITICAL POC
9.9 Jun 23

Remote code execution in Gogs through 0.14.2 allows authenticated users (and unauthenticated attackers on default-config

CVE-2025-14707 HIGH POC
8.9 Dec 15

Unauthenticated remote command injection in SGWBOX N3 firmware 2.0.25 lets attackers execute arbitrary operating-system

CVE-2026-56274 HIGH POC
8.7 Jun 23

Remote code execution in Flowise before 3.1.2 allows any authenticated user (or API caller with chatflow view/update per

CVE-2026-34156 CRITICAL POC
9.9 Mar 30

Remote code execution in NocoBase Workflow Script Node (npm @nocobase/plugin-workflow-javascript) allows authenticated l

CVE-2019-15752 HIGH POC
7.8 Aug 28

Docker Desktop Community Edition before 2.1.0.1 allows local users to gain privileges by placing a Trojan horse docker-c

Vendor 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

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy