Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Network-reachable endpoint needing only a low-privilege server:read account (PR:L, AC:L); code executes on a different tenant's host so scope changes (S:C) with full RCE giving C/I/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
4DescriptionCVE.org
Dokploy is a free, self-hostable Platform as a Service (PaaS). Prior to 0.29.13, swarm.getNodes, swarm.getNodeInfo, swarm.getNodeApps, and swarm.getAppInfos in apps/dokploy/server/api/routers/swarm.ts accept another organization’s serverId without an activeOrganizationId ownership check, and getNodeInfo in packages/server/src/services/docker.ts interpolates nodeId into execAsyncRemote, allowing a caller with server:read permission to execute arbitrary commands as the configured SSH user on another tenant’s server. This issue is fixed in version 0.29.13.
Articles & Coverage 1
AnalysisAI
Cross-tenant remote command execution in Dokploy (self-hosted PaaS) before 0.29.13 lets any authenticated user holding only the server:read permission run arbitrary OS commands on servers belonging to other organizations. The swarm tRPC endpoints never verified that the supplied serverId belonged to the caller's active organization, and getNodeInfo interpolated an attacker-controlled nodeId straight into a remote shell command, chaining a broken multi-tenant authorization flaw with OS command injection. No public exploit or CISA KEV listing has been identified, though the vendor security advisory and a fix-verification test are public.
Technical ContextAI
Dokploy is a free, self-hostable Platform-as-a-Service that manages Docker Swarm clusters across multiple tenant organizations. The affected code lives in the tRPC swarm router (apps/dokploy/server/api/routers/swarm.ts) whose queries swarm.getNodes, swarm.getNodeInfo, swarm.getNodeApps, and swarm.getAppInfos accepted a serverId parameter, and in packages/server/src/services/docker.ts where getNodeInfo built the shell string docker node inspect ${nodeId} --format '{{json .}}' and passed it to execAsyncRemote (an SSH-based remote executor). CWE-78 (OS Command Injection) is the root-cause class: the nodeId was concatenated unsanitized, so shell metacharacters (backticks, $(), ;, |, &&) break out of the intended docker command. The CPE cpe:2.3:a:dokploy:dokploy identifies the single affected application. The fix adds an activeOrganizationId ownership check on each endpoint and wraps nodeId with shell-quote's quote() so it is passed as a single literal token.
RemediationAI
Upgrade to Dokploy 0.29.13 or later, which both adds the missing activeOrganizationId ownership check on the swarm endpoints and shell-quotes the nodeId - this is the primary and complete fix (Vendor-released patch: 0.29.13; see release https://github.com/Dokploy/dokploy/releases/tag/v0.29.13 and advisory GHSA-jj6h-388v-9rwm). If you cannot upgrade immediately, reduce exposure by tightly restricting who holds server:read and any account in shared organizations, and by isolating tenants onto separate Dokploy instances so a cross-organization serverId cannot reference another tenant's host - with the trade-off of higher operational overhead and loss of consolidated management. Additionally, network-segment and firewall the managed servers' SSH access and monitor execAsyncRemote/SSH command activity for anomalous docker node inspect invocations containing shell metacharacters, accepting that this only detects rather than prevents exploitation. Rotate the configured SSH credentials after patching if you suspect prior misuse.
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-78 – OS Command Injection
View allSame technique Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-55741