Servers and applications
GHSA-2gq3-9q77-8hgv
Authenticated Command Injection via unescaped backup.prefix in database/service backup commands leads to RCE as root
- Severity
- Critical 9.9
- Published
- 12 Nov 2026
- Last changed
- 12 Nov 2026
- Added to UpHeron
- 12 Nov 2026
- Fixed in
- 0.31.1
- Weakness
- OS command injection (CWE-78)
- Attack
- Over the network · Needs a user account · No user action needed
- Attacker can
- Read data · Change data · Take it down
- CVSS vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H- Sources
- Project advisories (GitHub)
Description
The prefix field of a Backup (used to namespace backup files within an S3-compatible destination) is validated only as a non-empty string, with no restriction on shell metacharacters, and is interpolated directly into the rclone command line used to upload backups and to prune old ones. The value sits inside a double-quoted rclone argument (or, in the retention-cleanup path, with no quoting at all), so an authenticated organization member with permission to configure backups for a service can inject arbitrary shell commands that execute as root on the Dokploy host (or configured remote server) as soon as a backup runs - manually or on its schedule.
Field definition: packages/server/src/db/schema/backups.ts - prefix: text("prefix").notNull(), validated as z.string().min(1) with no character restriction (unlike branch-name fields elsewhere in the schema, which do carry a restrictive regex).
Affected software
| Software | Affected versions |
|---|---|
DokployServers and applications · github:dokploy/dokploy |
|
References
- GitHub Advisory Database https://github.com/advisories/GHSA-2gq3-9q77-8hgv
- github.com https://github.com/Dokploy/dokploy/security/advisories/GHSA-2gq3-9q77-8hgv