Read the docs
TI-2026-81985 Aliases CVE-2026-59185

Cross-tenant GitHub installation binding in identrail

Priority LOW 37CWE-639Published · Updated

Key facts

Attack vector
Network
Privileges required
Low
User interaction
None
Attack complexity
Low
Impact type
Security bypass
Confidentiality · integrity · availability
High · Low · None
Fix status
Fixed

Attack profile from CVSS 3.1 · CNA. Fix status from CNA and GitHub. Impact type from CWE-639.

Summary

identrail before 1.0.2 accepts a GitHub installation ID without verifying that it belongs to the caller's workspace (CWE-639). An authenticated tenant can supply another organization's installation ID after starting a legitimate connection, then read its private repositories or run posture scans, provided identrail's GitHub App is installed there.

Written with Claude Haiku 5.5 from the sources below · 2026-10-29

Description from the CNA

identrail is a machine identity security platform for AWS, GitHub/OIDC, and Kubernetes. Prior to 1.0.2, the default-on `POST /v1/workspaces/:workspace_id/projects/:project_id/github/connect/complete` endpoint in `internal/api/router.go` accepts `installation_id` from the request body or `X-GitHub-Installation-ID` header without verifying the installation belongs to the caller's workspace. `CompleteGitHubConnection` in `internal/api/github_connect.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}/access_tokens`, 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.

Why it matters now

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.0032 25th percentileScored 2026-11-07
Fix Fixed identrail (identrail): 1.0.2github.com/identrail/identrail (Go): 1.0.2

SSVC decision points

CISA ADP · SSVC 2.0.3

Exploitation
None
Automatable
No
Technical impact
Partial

The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.

Affected products

VendorProductAffected versionsFixed inStatusSource
identrailidentrailbefore 1.0.21.0.2Patch availableCNA
—github.com/identrail/identrail (Go)before 1.0.21.0.2Patch availableGHSA-cp3j-m783-3ph5
  • identrail Vendoridentrail Affected before 1.0.2 Fixed in 1.0.2 Patch available CNA
  • github.com/identrail/identrail (Go) Vendor— Affected before 1.0.2 Fixed in 1.0.2 Patch available GHSA-cp3j-m783-3ph5

Remediation

Upgrade identrail to version 1.0.2, which fixes the Go module github.com/identrail/identrail.

Written with Claude Haiku 5.5 from the sources below · 2026-10-29

  • Fix · CNA identrail (identrail) Fixed in 1.0.2
  • Fix · GHSA-cp3j-m783-3ph5 github.com/identrail/identrail (Go) Fixed in 1.0.2 Advisory →

Timeline

  1. 2026-10-28 Threatist record created from CVE-2026-59185
  2. 2026-10-28 CISA SSVC decision points changed
  3. 2026-10-28 Priority changed: MEDIUM → LOW

References

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences