Servers and applications
GHSA-m7rq-qhjp-cmgm
Users can overwrite server-managed fields on their own account via `user.update`
- Severity
- High
- Published
- 12 Nov 2026
- Last changed
- 12 Nov 2026
- Added to UpHeron
- 12 Nov 2026
- Fixed in
- 0.31.1
- Weakness
- Mass assignment (CWE-915)
- Sources
- Project advisories (GitHub)
Description
user.update lets a user edit their profile, but the update schema is createSchema.partial() (db/schema/user.ts:235), so every column on the user table is writable, and the router passes the input straight to updateUser(ctx.user.id, input) (routers/user.ts:273).
Confirmed on dokploy.com: one request set serversQuantity to 999 on my own account (reverted afterwards). Fields that should be server-managed are client-writable, including:
- serversQuantity: bypasses the plan limit on how many servers you can add
- expirationDate: self-extend a trial/subscription
- banned: self-unban
- enablePaidFeatures / enableEnterpriseFeatures: flip feature flags
- emailVerified, stripeCustomerId, licenseKey, allowImpersonation, ...
The role and isValidEnterpriseLicense fields are correctly omitted, so this is not a direct privilege escalation.
The stripeCustomerId field makes this more serious. It is the key used to resolve a user's billing identity:
Affected software
| Software | Affected versions |
|---|---|
DokployServers and applications · github:dokploy/dokploy |
|
References
- GitHub Advisory Database https://github.com/advisories/GHSA-m7rq-qhjp-cmgm
- github.com https://github.com/Dokploy/dokploy/security/advisories/GHSA-m7rq-qhjp-cmgm