Identrail Cross-tenant IDOR via GitHub App Installation ID
An improper validation vulnerability in Identrail allows authenticated tenants to perform cross-tenant access to private GitHub repository metadata by supplying an arbitrary installation_id during the connection flow.
Identrail is affected by an Insecure Direct Object Reference (IDOR) vulnerability (CVE-2026-59185) within its GitHub App connection-completion API. The vulnerability exists because the POST /v1/workspaces/:workspace_id/projects/:project_id/github/connect/complete endpoint accepts a client-supplied installation_id from the JSON body or the X-GitHub-Installation-ID header without verifying that the installation belongs to the workspace initiating the flow. While the application correctly binds a state token to the caller's workspace, it fails to perform a similar check on the installation ID. An authenticated attacker can provide a victim's installation_id - which is easily enumerable or discoverable - to link the victim's GitHub organization to the attacker's Identrail workspace. Once linked, the platform mints a GitHub App installation access token using the app's own JWT, granting the attacker unauthorized access to read private repository inventories and potentially perform posture scans on the victim's infrastructure. This affects all versions of Identrail prior to 1.0.2.
Attack Chain
- Attacker authenticates to the Identrail platform as a standard tenant.
- Attacker triggers a legitimate GitHub connection flow via
StartGitHubConnectionto generate a validstatetoken for their own workspace. - Attacker identifies the target organization's GitHub App
installation_id(a non-secret integer available in webhooks or public redirect URLs). - Attacker sends a POST request to the completion endpoint (
/github/connect/complete) using their validstatetoken and the target'sinstallation_idin the request header or body. - The Identrail backend verifies the
statematches the attacker's workspace, satisfying the security check, but fails to validate theinstallation_idscope. - The platform persists the victim's
installation_idas a connection owned by the attacker's workspace. - Attacker uses Identrail's internal repository listing services (
ListInstallationRepositories) which mints an access token for the victim's installation. - Attacker retrieves private repository lists and metadata from the victim's GitHub account.
Impact
Successful exploitation results in unauthorized cross-tenant disclosure of sensitive repository metadata and private contents belonging to other customer organizations. This allows attackers to perform reconnaissance on victim organizations' codebase structures, potentially identifying proprietary code or configurations for further targeting.
Recommendation
- Upgrade the Identrail platform to version 1.0.2 or later immediately to patch CVE-2026-59185.
- Perform an audit of existing GitHub App connections to identify any unauthorized or unknown installations linked to your workspaces.
- Implement strict server-side validation that requires the
installation_idto be bound to the tenant's identity during the initial GitHub OAuth handshake. - Review access logs for the
github/connect/completeendpoint for requests where theX-GitHub-Installation-IDor JSON bodyinstallation_iddiffers from those associated with legitimate tenant-authorized installation flows.
Immediate actions
Upgrade Identrail to 1.0.2 or later.
Threat Hunt
Audit connection logs for completion requests originating from unexpected installation IDs.
Data: API access logs for /github/connect/complete
Mitigations
Patch Identrail to version 1.0.2.
CVE-2026-59185