CVE-2026-72736 Overview
CVE-2026-72736 is a command injection vulnerability in Dokploy, a self-hostable Platform as a Service (PaaS). Versions prior to 0.29.13 pass user-controlled values directly into shell commands through unquoted template literal interpolation. The flaw exists in the registry credential testing and Docker Swarm cluster management endpoints. While local code paths use execFileAsync or the Docker API safely, the remote path invokes execAsyncRemote, which executes the shell string over SSH. An authenticated attacker with low privileges can inject arbitrary shell commands that run on remote cluster nodes. The maintainers addressed the issue in Dokploy 0.29.13.
Critical Impact
Authenticated attackers can execute arbitrary shell commands on remote Dokploy cluster hosts, leading to full compromise of managed Docker Swarm infrastructure.
Affected Products
- Dokploy versions prior to 0.29.13
- Dokploy registry credential testing endpoint
- Dokploy Docker Swarm cluster management endpoints
Discovery Timeline
- 2026-08-10 - CVE-2026-72736 published to NVD
- 2026-08-10 - Last updated in NVD database
Technical Details for CVE-2026-72736
Vulnerability Analysis
The vulnerability is classified under [CWE-77: Improper Neutralization of Special Elements used in a Command]. Dokploy exposes two categories of endpoints that manage remote hosts: registry credential validation and Docker Swarm cluster operations. Each endpoint provides two execution paths. The local path uses execFileAsync or the Docker API, which separate arguments from the command and prevent shell interpretation. The remote path uses execAsyncRemote, which serializes the command into a single shell string and executes it over SSH on the target node.
When user-supplied values such as swarm nodeId or registry image tags are interpolated into these commands using JavaScript template literals without escaping, an attacker can terminate the intended command and append arbitrary shell operators. The result is remote command execution on any node the Dokploy control plane manages.
Root Cause
The root cause is unquoted template literal interpolation in apps/dokploy/server/api/routers/cluster.ts and packages/server/src/utils/cluster/upload.ts. Values received from API callers are concatenated into shell strings without neutralization of shell metacharacters. The fix imports quote from the shell-quote package and wraps user-controlled tokens before they are embedded in the remote command string.
Attack Vector
An authenticated user with permission to call the registry testing or cluster management endpoints supplies a crafted nodeId or registry tag value. The value contains shell metacharacters such as ;, `, or $(). When Dokploy assembles the remote command and executes it via SSH, the injected payload runs with the privileges of the SSH user on the remote node, typically a Docker-capable account.
// Security patch in apps/dokploy/server/api/routers/cluster.ts
// fix(security): escape swarm nodeId and registry tag in cluster commands
getRemoteDocker,
} from "@dokploy/server";
import { TRPCError } from "@trpc/server";
+import { quote } from "shell-quote";
import { z } from "zod";
import { audit } from "@/server/api/utils/audit";
import { getLocalServerIp } from "@/server/wss/terminal";
Source: GitHub commit df2779e
// Security patch in packages/server/src/utils/cluster/upload.ts
// fix(security): escape swarm nodeId and registry tag in cluster commands
safeDockerLoginCommand,
} from "@dokploy/server/services/registry";
import { createRollback } from "@dokploy/server/services/rollbacks";
+import { quote } from "shell-quote";
import type { ApplicationNested } from "../builders";
export const uploadImageRemoteCommand = async (
Source: GitHub commit df2779e
Detection Methods for CVE-2026-72736
Indicators of Compromise
- Unexpected outbound network connections initiated from Docker Swarm worker or manager nodes shortly after registry test or cluster management API calls.
- Shell metacharacters such as ;, |, `, $(, or && present in registry tag or nodeId fields within Dokploy audit logs.
- New or modified SSH authorized_keys, cron entries, or systemd units on Dokploy-managed remote hosts.
- Container or process creation on remote nodes that does not correlate with a legitimate deployment workflow.
Detection Strategies
- Inspect Dokploy application and audit logs for API requests to registry credential testing and cluster management endpoints containing suspicious payload characters.
- Monitor SSH sessions originating from the Dokploy control plane for commands that deviate from the expected docker and cluster management command set.
- Correlate child process trees on remote nodes with parent SSH sessions to surface unexpected shell descendants.
Monitoring Recommendations
- Enable verbose audit logging on the Dokploy server and forward logs to a centralized analytics platform.
- Instrument remote hosts with process-level telemetry to capture command line arguments for shells spawned by the SSH daemon.
- Alert on modifications to authorized_keys, container runtime configuration, and privileged binaries on managed nodes.
How to Mitigate CVE-2026-72736
Immediate Actions Required
- Upgrade Dokploy to version 0.29.13 or later on all control plane instances.
- Restrict access to the Dokploy web interface and API to trusted operators and networks.
- Rotate SSH keys and registry credentials used by the Dokploy control plane after patching, especially if unexplained activity is present.
- Review audit logs for suspicious registry tag or nodeId values submitted before the upgrade.
Patch Information
The fix ships in Dokploy 0.29.13. The patch introduces shell-quote and wraps user-controlled tokens such as swarm nodeId and registry tag values before interpolation into remote shell commands. Details are available in the GitHub Security Advisory GHSA-4mfc-grxw-6858, the v0.29.13 release notes, and the remediation commit.
Workarounds
- Limit API access to the vulnerable endpoints using an authenticating reverse proxy or network ACLs until the upgrade is completed.
- Reduce the privileges of the SSH user Dokploy uses on remote nodes so that injected commands run with minimal capabilities.
- Isolate Dokploy-managed nodes on a dedicated network segment to contain the blast radius of any successful injection.
# Verify the installed Dokploy version and upgrade if below 0.29.13
docker inspect dokploy --format '{{.Config.Image}}'
docker pull dokploy/dokploy:0.29.13
docker service update --image dokploy/dokploy:0.29.13 dokploy
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

