Severity by source
AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Network tRPC reach and simple metacharacter payloads give AV:N/AC:L; the backup-restore role gives PR:L; command execution escapes the app to the host so S:C with full C:H/I:H/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, the backup.restoreBackupWithLogs tRPC subscription builds database restore shell pipelines from the user-controlled databaseName and backupFile fields without safely separating them from shell syntax. packages/server/src/utils/restore/utils.ts interpolates databaseName into database-specific restore commands, while packages/server/src/utils/restore/postgres.ts and the analogous restore modules interpolate backupFile into rclone paths. An authenticated member with backup-restore permission can inject operating-system commands that execute in the Dokploy host context through execAsync or execAsyncRemote, even when no valid database container or backup file exists. This issue is fixed in version 0.29.13.
Articles & Coverage 2
AnalysisAI
OS command injection in Dokploy (self-hostable PaaS) before 0.29.13 lets an authenticated user holding the backup-restore permission run arbitrary shell commands on the underlying Dokploy host. The backup.restoreBackupWithLogs tRPC subscription concatenates the user-supplied databaseName and backupFile fields directly into database restore and rclone shell pipelines, so crafted values break out of the intended command and execute via execAsync/execAsyncRemote. There is no public exploit identified at time of analysis and it is not on CISA KEV, but the fixing pull request (#4862) ships a regression test enumerating working injection payloads, and the CVSS of 9.9 with scope change reflects full host takeover from a low-privileged application role.
Technical ContextAI
Dokploy is a Node.js/TypeScript Vercel-and-Heroku-style platform that orchestrates Docker containers on a host and exposes its API over tRPC. The flaw is a classic CWE-78 OS Command Injection: packages/server/src/utils/restore/utils.ts interpolates the databaseName into database-specific restore commands (Postgres, MySQL, MariaDB, MongoDB), and packages/server/src/utils/restore/postgres.ts plus sibling modules interpolate backupFile into rclone paths. These strings are assembled into docker exec ... bash -c "..." pipelines and executed through execAsync (local) or execAsyncRemote (SSH to a remote node). Because the fields are placed inside double-quoted or single-quoted shell context without escaping, shell metacharacters ($(...), backticks, quotes, semicolons) terminate the intended command. The upstream fix moves user values out of the inline command text into docker exec -e VAR=<shell-quote escaped> environment variables referenced as "$VAR" inside a single-quoted inner script, neutralizing both the outer and inner shell layers.
RemediationAI
Vendor-released patch: upgrade Dokploy to 0.29.13, which is the fixed release (https://github.com/Dokploy/dokploy/releases/tag/v0.29.13); the corresponding changes are in pull request #4862 and commits 8539a5c, ccd2e83 and eeb6e7b. The fix passes databaseName/backupFile as shell-quoted docker exec -e environment variables instead of inlining them, so upgrading is the primary and complete remediation. If you cannot upgrade immediately, restrict who holds the backup-restore permission to a minimal set of fully trusted administrators (removing it from all non-essential members closes the low-privilege attack path), avoid exposing the Dokploy control plane to untrusted networks, and audit restore activity - the trade-off is that revoking backup-restore blocks legitimate self-service restores until the patch is applied. Refer to advisory GHSA-2xjq-p4xx-5x2p for authoritative guidance.
More in PostgreSQL
View allPostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl
An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl
Argument injection vulnerability in PostgreSQL 9.2.x before 9.2.4, 9.1.x before 9.1.9, and 9.0.x before 9.0.13 allows re
Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.
Unauthenticated SQL injection in Sangoma Switchvox SMB Edition 8.3 (build 104997) lets remote attackers execute arbitrar
PostgreSQL versions before 9.2.22, 9.3.18, 9.4.13, 9.5.8 and 9.6.4 are vulnerable to incorrect authentication flaw allow
The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t
A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra
In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve
Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the
Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot
Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al
Same weakness CWE-78 – OS Command Injection
View allSame technique Command Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-55679