Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N
Route is entirely unauthenticated (PR:N) and exploitable over the network with trivial complexity (AV:N/AC:L); direct impact is integrity-only as attacker writes to victim org config without reading protected data.
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 unauthenticated /api/providers/github/setup route in apps/dokploy/pages/api/providers/github/setup.ts trusts gh_init organizationId and userId values from the state parameter and calls createGithub in packages/server/src/services/github.ts, allowing an attacker to insert a GitHub App provider containing client_secret, webhook_secret, and PEM private key material into another organization. This issue is fixed in version 0.29.13.
AnalysisAI
GitHub App provider injection in Dokploy PaaS (prior to v0.29.13) allows unauthenticated remote attackers to insert attacker-controlled GitHub App credentials - including client_secret, webhook_secret, and PEM private key material - into any target organization's configuration by forging the state parameter in the GitHub OAuth callback route. The route /api/providers/github/setup performed no session authentication (CWE-306), blindly trusting organizationId and userId values supplied by the caller in the state query parameter. No public exploit identified at time of analysis; a vendor-released patch is confirmed available as v0.29.13.
Technical ContextAI
The vulnerable endpoint apps/dokploy/pages/api/providers/github/setup.ts implements the server-side OAuth callback for GitHub App installation. In standard OAuth flows, the state parameter is a server-generated opaque nonce used to prevent CSRF; Dokploy's broken implementation instead parsed state as a colon-delimited payload containing action, organizationId, and userId - all attacker-controlled values with no server-side verification. Because the route required no authentication, any unauthenticated HTTP client could craft a request with arbitrary organization and user identifiers and trigger createGithub() in packages/server/src/services/github.ts, inserting a GitHub App record under the victim organization. The root cause is CWE-306 (Missing Authentication for Critical Function). The fix in PR #4870 (commit 5ae344db) adds validateRequest(req) for session validation, derives organization and user context exclusively from the authenticated session object, and gates the action behind hasPermission() requiring gitProviders:create rights, removing all trust in the state parameter for identity resolution. Affected CPE: cpe:2.3:a:dokploy:dokploy:*:*:*:*:*:*:*:*.
RemediationAI
Upgrade to Dokploy v0.29.13 or later, available at https://github.com/Dokploy/dokploy/releases/tag/v0.29.13; this version introduces session-based authentication and explicit permission checks on the GitHub setup callback route, eliminating trust in attacker-supplied state parameter values. If immediate upgrade is not feasible, restrict network access to the /api/providers/github/setup endpoint at the reverse proxy or firewall layer so only trusted internal networks can reach it - this trades off the ability for remote GitHub OAuth redirects to complete automatically but prevents unauthenticated exploitation from the internet. Operators should also audit existing GitHub App provider records in the Dokploy database for entries with unexpected credentials or mismatched organizationId/userId associations, as these may indicate prior exploitation. Full advisory details are at https://github.com/Dokploy/dokploy/security/advisories/GHSA-g9pp-xcf2-ph7x.
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 technique Authentication Bypass
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-55731