GCP - IAM, Principales y Enum Unauthenticated de Org

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

Iam y Principales de GCP

Para m谩s informaci贸n, consulta:

GCP - IAM, Principals & Org Policies Enum

驴Se utiliza el dominio en Workspace?

  1. Verificar registros DNS

Si tiene un registro google-site-verification, es probable que est茅 (o haya estado) utilizando Workspace:

dig txt hacktricks.xyz

[...]
hacktricks.xyz.		3600	IN	TXT	"google-site-verification=2mWyPXMPXEEy6QqWbCfWkxFTcQhyYdwHrOxee1Yeo-0"
hacktricks.xyz.		3600	IN	TXT	"google-site-verification=C19PtLcZ1EGyzUYYJTX1Tp6bOGessxzN9gqE-SVKhRA"
hacktricks.xyz.		300	IN	TXT	"v=spf1 include:usb._netblocks.mimecast.com include:_spf.google.com include:_spf.psm.knowbe4.com include:_spf.salesforce.com include:spf.mandrillapp.com ~all"

Si algo como include:_spf.google.com tambi茅n aparece, lo confirma (ten en cuenta que si no aparece, no lo niega, ya que un dominio puede estar en Workspace sin usar gmail como proveedor de correo).

  1. Intenta configurar un Workspace con ese dominio

Otra opci贸n es intentar configurar un Workspace usando el dominio; si se queja de que el dominio ya est谩 en uso (como en la imagen), 隆sabes que ya est谩 en uso!

Para intentar configurar un dominio de Workspace, sigue: https://workspace.google.com/business/signup/welcome

  1. Intenta recuperar la contrase帽a de un correo electr贸nico usando ese dominio

Si conoces alguna direcci贸n de correo electr贸nico v谩lida que se est茅 utilizando en ese dominio (como: admin@email.com o info@email.com), puedes intentar recuperar la cuenta en https://accounts.google.com/signin/v2/recoveryidentifier, y si el intento no muestra un error que indique que Google no tiene idea sobre esa cuenta, entonces est谩 usando Workspace.

Enumerar correos electr贸nicos y cuentas de servicio

Es posible enumerar correos electr贸nicos v谩lidos de un dominio de Workspace y correos electr贸nicos de SA intentando asignarles permisos y verificando los mensajes de error. Para esto, solo necesitas tener permisos para asignar permisos a un proyecto (que puede ser solo de tu propiedad).

Ten en cuenta que para verificarlos, pero incluso si existen, no les otorgues un permiso; puedes usar el tipo serviceAccount cuando es un user y user cuando es un SA:

# Try to assign permissions to user 'unvalid-email-34r434f@hacktricks.xyz'
# but indicating it's a service account
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:unvalid-email-34r434f@hacktricks.xyz' \
--role='roles/viewer'
## Response:
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: User unvalid-email-34r434f@hacktricks.xyz does not exist.

# Now try with a valid email
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:support@hacktricks.xyz' \
--role='roles/viewer'
# Response:
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Principal support@hacktricks.xyz is of type "user". The principal should appear as "user:support@hacktricks.xyz". See https://cloud.google.com/iam/help/members/types for additional documentation.

Una forma m谩s r谩pida de enumerar Cuentas de Servicio en proyectos conocidos es simplemente intentar acceder a la URL: https://iam.googleapis.com/v1/projects/<project-id>/serviceAccounts/<sa-email>
Por ejemplo: https://iam.googleapis.com/v1/projects/gcp-labs-3uis1xlx/serviceAccounts/appengine-lab-1-tarsget@gcp-labs-3uis1xlx.iam.gserviceaccount.com

Si la respuesta es un 403, significa que la Cuenta de Servicio existe. Pero si la respuesta es un 404, significa que no existe:

// Exists
{
"error": {
"code": 403,
"message": "Method doesn't allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API.",
"status": "PERMISSION_DENIED"
}
}

// Doesn't exist
{
"error": {
"code": 404,
"message": "Unknown service account",
"status": "NOT_FOUND"
}
}

Nota c贸mo, cuando el correo electr贸nico del usuario era v谩lido, el mensaje de error indicaba que el tipo no lo es, por lo que logramos descubrir que el correo electr贸nico support@hacktricks.xyz existe sin otorgarle ning煤n privilegio.

Puedes hacer lo mismo con las Cuentas de Servicio usando el tipo user: en lugar de serviceAccount::

# Non existent
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:<invalid-sa-name>@<proj-uniq-name>.iam.gserviceaccount.com' \
--role='roles/viewer'
# Response
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: User <invalid-sa-name>@<proj-uniq-name>.iam.gserviceaccount.com does not exist.

# Existent
gcloud projects add-iam-policy-binding <project-controlled-by-you> \
--member='serviceAccount:<sa-name>@<proj-uniq-name>.iam.gserviceaccount.com' \
--role='roles/viewer'
# Response
ERROR: (gcloud.projects.add-iam-policy-binding) INVALID_ARGUMENT: Principal testing@digital-bonfire-410512.iam.gserviceaccount.com is of type "serviceAccount". The principal should appear as "serviceAccount:testing@digital-bonfire-410512.iam.gserviceaccount.com". See https://cloud.google.com/iam/help/members/types for additional documentation.

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks