Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N
Requires an authenticated admin/owner account so PR:H; arbitrary host command execution escapes the app to the OS, giving S:C and full C/I/A:H including availability.
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, Dokploy's backup and restore pipeline constructs shell commands by directly interpolating user-controlled database fields into bash -c "..." and sh -c "..." strings, then executes them via child_process.exec(). An authenticated admin/owner can inject arbitrary OS commands that execute on the host machine running Dokploy (not just inside a container). This vulnerability is fixed in 0.29.13.
AnalysisAI
OS command injection in Dokploy self-hosted PaaS (versions prior to 0.29.13) lets an authenticated admin/owner execute arbitrary commands on the underlying host, not merely inside a managed container. The backup/restore, destination, volume-backup, certificate, and mount code paths build bash -c/sh -c strings by directly interpolating user-controlled, database-backed fields (S3 credentials, paths, volume names) and run them through child_process.exec(). No public exploit is identified at time of analysis, but the fix in 0.29.13 confirms multiple confirmed injection sinks, and the container-to-host scope escape makes successful exploitation a full host compromise.
Technical ContextAI
Dokploy is a Node.js/TypeScript, self-hostable Platform-as-a-Service (a Heroku/Vercel-style deployment control plane) that orchestrates Docker containers. The affected component is its backup and infrastructure tooling, which shells out to utilities like rclone, base64, mkdir, and rm. The root cause is CWE-78 (Improper Neutralization of Special Elements used in an OS Command): fields such as S3 access keys, region, endpoint, provider, search paths, certificate data, mount file paths, and Docker volume names were concatenated into quoted shell strings (e.g. rclone lsjson ... "${searchPath}" and echo "${encodedContent}" | base64 -d > ${fullPath}) and passed to child_process.exec(), which spawns a shell. Any shell metacharacter in those values (backticks, $(), ;, |) breaks out of the intended command. The fix wraps arguments with shell-quote's quote() and adds a strict VOLUME_NAME_REGEX (^[a-zA-Z0-9][a-zA-Z0-9_.-]*$) allowlist for Docker volume names. The single CPE affected is cpe:2.3:a:dokploy:dokploy:*.
RemediationAI
Vendor-released patch: 0.29.13 - upgrade all Dokploy instances to v0.29.13 or later, which quotes shell arguments via shell-quote and enforces a Docker volume-name allowlist (see release https://github.com/Dokploy/dokploy/releases/tag/v0.29.13 and advisory GHSA-p2c7-8j28-c7gq). Until you can upgrade, reduce exposure by treating the admin/owner role as equivalent to host root: restrict the Dokploy web UI/API to trusted networks or a VPN rather than the public internet, minimize and audit the set of admin/owner accounts, and avoid granting that role to semi-trusted users - the trade-off is reduced day-to-day administrative convenience. As an interim control you can also avoid configuring or editing backup destinations, S3 credentials, certificates, mounts, and volume backups with untrusted input, since those are the fields that feed the vulnerable exec() calls; the side effect is that backup/restore workflows must be paused or tightly reviewed. These are compensating measures only - patching to 0.29.13 is the sole complete fix.
Dokploy self-hosted PaaS prior to 0.26.6 has a critical command injection vulnerability (CVSS 9.9) allowing authenticate
Dokploy versions before 0.26.6 contain hardcoded database credentials in the installation script, causing nearly all dep
Command injection in Dokploy (self-hosted PaaS) before 0.29.13 lets an authenticated low-privilege member run arbitrary
Command injection in Dokploy (self-hosted PaaS) before 0.29.13 lets an authenticated panel user run arbitrary commands o
Remote code execution in Dokploy 0.27.0 through 0.29.2 allows unauthenticated attackers to forge email-verification JWTs
Command injection in Dokploy (self-hostable PaaS) before 0.29.13 lets an authenticated user run arbitrary OS commands on
OS command injection in Dokploy self-hosted PaaS before 0.29.13 lets an authenticated member with service-deployment per
Command injection in Dokploy self-hostable PaaS before 0.29.13 lets an authenticated user with backup:read permission ru
Authenticated command injection in Dokploy (self-hostable PaaS) versions 0.29.3 through 0.29.12 lets a low-privileged us
OS command injection in Dokploy (self-hostable PaaS) before 0.29.13 lets an authenticated user holding the backup-restor
Cross-tenant remote command execution in Dokploy (self-hosted PaaS) before 0.29.13 lets any authenticated user holding o
Command injection in Dokploy self-hosted PaaS versions prior to 0.29.13 lets an authenticated user with database-service
Same weakness CWE-78 – OS Command Injection
View allSame technique Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-55744