GCP_CAN_UNLINK_BILLING

Summary

FSProtect ACL Alias

GCP_CAN_UNLINK_BILLING

GCP Alias

Guardrail Bypass & Destruction

Affected Object Types

Projects

Exploitation Certainty

Certain

Granting Roles

roles/billing.admin, roles/billing.projectManager

Description

GCP_CAN_UNLINK_BILLING indicates that an identity can remove the billing account association from a GCP project. When a billing account is unlinked, all billable GCP services in the project are immediately disabled — compute instances stop, Cloud Run services become unavailable, GKE control planes are disabled, and billable API calls fail. The project's resources are not deleted, but they are inaccessible until billing is re-linked.

This edge represents an availability attack surface. An attacker who cannot exfiltrate or destroy data (due to VPC-SC or encryption) can still cause a service outage by unlinking billing. In organizations with strict billing separation, an identity with roles/billing.admin at the billing account level may be able to unlink billing from any project associated with that account.

Key abuse scenarios:

  • Unlink billing from production projects → all compute and managed services stop immediately.

  • Unlink billing from security or logging projects → blind defenders before a larger attack.

  • Cloud extortion: unlink billing from business-critical projects and demand payment before data is lost to resource deletion (note: resources are not deleted immediately, but the pressure is real).

Identification

gcloud CLI

GCP Console

  1. Open GCP ConsoleBilling → select the billing account.

  2. Click Account management → review all linked projects.

  3. Check IAM & AdminIAM at the billing account level for principals with Billing Account Administrator or Project Billing Manager.

Exploitation

gcloud CLI

Services that stop immediately after billing is unlinked:

  • Compute Engine VMs (instances stop running)

  • Cloud Run services (requests begin failing)

  • GKE clusters (control plane is disabled)

  • Cloud SQL instances (connections are refused)

  • BigQuery (queries fail with quota errors)

Free-tier and always-free resources continue operating within their limits.

Mitigation

  1. Restrict roles/billing.admin — assign to at most a dedicated finance or ops account; never to developer identities.

  2. Restrict roles/billing.projectManagerr to approved automation accounts with narrow scope.

  3. Enable budget alerts — a sudden drop to zero spend can indicate billing was unlinked before the operational impact is noticed.

  4. Maintain runbooks for re-linking billing under incident conditions, including the identity and approvals required.

Detection

Log Type
Method
Key Fields

Admin Activity

UpdateProjectBillingInfo

resource.type=project, billingAccountName set to empty

Alert on:

  • Any UpdateProjectBillingInfo call where billingAccountName is set to an empty value (unlinking).

  • Multiple billing unlinks within a short time window (mass disruption pattern).

  • Billing changes outside of business hours or from identities not in the approved billing admin list.

References

  • https://cloud.google.com/billing/docs/how-to/modify-project

  • https://cloud.google.com/billing/docs/concepts

Last updated

Was this helpful?