GO-2026-6448: identrail: Cross-tenant GitHub installation binding without ownership verification
identrail is a machine identity security platform for AWS, GitHub/OIDC, and Kubernetes. Prior to 1.0.2, the default-on POST /v1/workspaces/:workspaceid/projects/:projectid/github/connect/complete endpoint in internal/api/router.go accepts installationid from the request body or X-GitHub-Installation-ID header without verifying the installation belongs to the caller's workspace. CompleteGitHubConnection in internal/api/githubconnect.go rigorously binds state to the caller's tenant, workspace, and project, but checks only that the installation ID is positive before persisting it as the caller's connection. ListInstallationRepositories in internal/connectors/github/repositories.go invokes token creation through internal/connectors/github/app.go and POST /app/installations/{installationId}/accesstokens, using the application's JWT. An authenticated tenant who starts a legitimate connection can supply another customer's non-secret installation ID to read the victim organization's private repository inventory, content, and metadata or drive posture scans, provided identrail's GitHub App is installed there. The default-off V2 CompleteGitHubConnector path shares the installation-ownership gap and additionally matches pending state without rechecking caller scope. This issue is fixed in version 1.0.2.
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
identrailto a version that resolves this vulnerability.Fixed in 1.0.2