Skip to main content
Applies to BloodHound Enterprise and CE Tier Zero (T0) identifies assets whose compromise grants control over the entire GitHub organization or the ability to compromise everything else. This is analogous to Active Directory Tier Zero, where Domain Controllers and Domain Admins are T0 because their compromise means full domain compromise. In GitHub, T0 classification serves two purposes:
  1. Defensive prioritization — T0 assets should receive the highest level of protection, monitoring, and access review.
  2. Attack path analysis — any attack path that reaches a T0 asset represents a critical finding, regardless of the number of hops.

The Two Dimensions of GitHub Tier Zero

Control Plane — Organizational Authority

Control plane T0 assets can reshape the access model itself. They don’t just have access to resources — they control who has access and how access is granted. This includes:
  • Organization administration — managing members, teams, billing, security settings
  • SSO/SCIM configuration — controlling authentication for all org members
  • Role definition — creating or modifying custom organization and repository roles
  • App management — installing or configuring GitHub Apps with arbitrary permissions
An actor with control plane authority can grant themselves (or anyone else) any level of access, making them effectively omnipotent within the organization.

Data Plane — Universal Repository Access

Data plane T0 assets have or cascade to admin access on every repository in the organization. Through the graph, this means they can reach:
  • Every secret (via GH_HasSecret)
  • Every branch (via GH_HasBranchGH_CanWriteBranch)
  • Every environment (via GH_HasEnvironment)
  • Every cloud identity (via GH_CanAssumeIdentity)
The all_repo_admin synthetic role is the primary mechanism: the owners org role inherits it via GH_HasBaseRole, and it fans out via GH_AdminTo, GH_WriteRepoContents, GH_BypassBranchProtection, etc. to every repository.

T0 Asset Categories

Always T0

AssetNode KindIdentifying PropertyDimensionRationale
OrganizationGH_OrganizationAll instancesControlRoot trust boundary for all contained assets
Owners roleGH_OrgRoleshort_name:'owners'BothFull administrative control + inherits all_repo_admin
All-repo admin roleGH_OrgRolename ends with /all_repo_adminDataAdmin access to every repository in the org
SAML identity providerGH_SamlIdentityProviderAll instancesControlControls SSO authentication; can impersonate any user

T0 by Relationship

AssetConditionDimensionRationale
Owner usersGH_UserGH_HasRoleGH_OrgRole {owners}BothIdentity with full org control
Privilege escalation rolesGH_OrgRoleGH_WriteOrganizationCustomOrgRoleGH_OrganizationControlCan modify org role definitions to set base_role to all_repo_admin — guaranteed self-escalation
Privilege escalation usersGH_User → role chain → above rolesControlCan escalate the org role they hold to gain full organizational control
External identities (owner-mapped)GH_ExternalIdentityGH_MapsToUser → owner GH_UserControlIdP identity of an org owner; compromising it grants owner access via SSO
App installations (all repos, write)GH_AppInstallation {repository_selection:'all'} + write permissionsDataApp credential with write access to every repository
Apps (all-repo installations, write)GH_AppGH_InstalledAs → all-repo GH_AppInstallation with write permissionsDataApp private key can generate write tokens for every repository
PATs (all repos, write)GH_PersonalAccessToken {repository_selection:'all'} + write permissionsDataSingle token with write access to every repository

Explicitly Not T0

AssetRationale
Individual repositoriesEven critical ones — T0 is about universal control, not single-resource importance
GH_OrgRole (members)Default role with limited, non-administrative permissions
Team maintainer rolesScoped to one team’s repositories, not org-wide
GH_RepoRole (admin on single repo)Single-repository scope, not universal
Secret scanning alertsAttack paths to T0, not T0 themselves
Individual secrets or variablesResources protected by T0, not T0 themselves
Read-only all-repo apps/PATsData exfiltration risk but no write control — visibility without the ability to modify
write_organization_custom_repo_role rolesManages custom repo roles, but the holder may not hold those repo roles — no guaranteed self-escalation

Classification Rules

The classification rules are located in the pz-rules/ directory. Each rule is a Cypher query that returns nodes to be tagged as Tier Zero. See Privilege Zone Rules for the full list of queries.
RuleFileCategory
Organizationst0-organizations.jsonControl
Owners Rolet0-owners-role.jsonControl
Owner Userst0-owner-users.jsonControl
All-Repo Admin Rolet0-all-repo-admin-role.jsonData
SAML Identity Providerst0-saml-identity-providers.jsonControl
Privilege Escalation Rolest0-privilege-escalation-roles.jsonControl
Privilege Escalation Userst0-privilege-escalation-users.jsonControl
External Identities (Owner-Mapped)t0-external-identities-owners.jsonControl
App Installations (All Repos)t0-app-installations-all-repos.jsonData
Apps (All-Repo Installations)t0-apps-all-repos.jsonData
PATs (All Repos)t0-pats-all-repos.jsonData