All vulnerabilities

Servers and applications

GHSA-fj57-g9cq-fwvq

Incomplete Fix: Cross-Organization GitHub Provider Reassignment Exposes Stored Credentials

Severity
High 8.4
Published
12 Nov 2026
Last changed
12 Nov 2026
Added to UpHeron
12 Nov 2026
Fixed in
0.31.1
Weakness
Information exposure (CWE-200)Authorization bypass through a user-controlled key (IDOR) (CWE-639)Missing authorization (CWE-862)
Attack
Over the network · Only under certain conditions · Needs a user account · No user action needed
Attacker can
Read data · Change data · Slow it down
CVSS vector
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:L
Sources
Project advisories (GitHub)

Description

Dokploy v0.30.2 added organization/access checks to the GitHub-provider read route, but the sibling github.update mutation does not authorize either caller-controlled identifier. An authenticated administrator in Organization A can supply Organization B's gitProviderId and githubId. The mutation updates the victim parent provider by global ID and sets its organizationId to the attacker's active organization, while the credential-bearing GitHub row remains attached to that parent.

After this reassignment, the existing guarded github.one route treats the victim provider as belonging to Organization A and returns the stored GitHub client secret, private key, installation ID, and webhook secret to the attacker. The victim simultaneously loses access to the provider.

I reproduced the full HTTP state transition against the published dokploy/dokploy:v0.30.2 image. Before the mutation, the victim read returned HTTP 200 and the attacker's read returned HTTP 404.

From Dokploy/dokploy's security advisory. Shortened; the full text is there.

Affected software

SoftwareAffected versions
DokployServers and applications · github:dokploy/dokploy
  • Every version before 0.31.1

References