GCP - IAM Privesc
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Encuentra más información sobre IAM en:
GCP - IAM, Principals & Org Policies Enumiam.roles.update
(iam.roles.get
)Un atacante con los permisos mencionados podrá actualizar un rol asignado a ti y darte permisos adicionales a otros recursos como:
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script de python para abusar de este privilegio aquí. Para más información, consulta la investigación original.
iam.serviceAccounts.getAccessToken
(iam.serviceAccounts.get
)Un atacante con los permisos mencionados podrá solicitar un token de acceso que pertenece a una Cuenta de Servicio, por lo que es posible solicitar un token de acceso de una Cuenta de Servicio con más privilegios que los nuestros.
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script de python para abusar de este privilegio aquí. Para más información, consulta la investigación original.
iam.serviceAccountKeys.create
Un atacante con los permisos mencionados podrá crear una clave gestionada por el usuario para una Cuenta de Servicio, lo que nos permitirá acceder a GCP como esa Cuenta de Servicio.
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script de python para abusar de este privilegio aquí. Para más información, consulta la investigación original.
Ten en cuenta que iam.serviceAccountKeys.update
no funcionará para modificar la clave de un SA porque para hacerlo también se necesita el permiso iam.serviceAccountKeys.create
.
iam.serviceAccounts.implicitDelegation
Si tienes el iam.serviceAccounts.implicitDelegation
permiso en una Cuenta de Servicio que tiene el permiso iam.serviceAccounts.getAccessToken
en una tercera Cuenta de Servicio, entonces puedes usar implicitDelegation para crear un token para esa tercera Cuenta de Servicio. Aquí hay un diagrama para ayudar a explicar.
Ten en cuenta que según la documentación, la delegación de gcloud
solo funciona para generar un token utilizando el generateAccessToken() método. Así que aquí tienes cómo obtener un token utilizando la API directamente:
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script de python para abusar de este privilegio aquí. Para más información, consulta la investigación original.
iam.serviceAccounts.signBlob
Un atacante con los permisos mencionados podrá firmar cargas útiles arbitrarias en GCP. Por lo tanto, será posible crear un JWT no firmado del SA y luego enviarlo como un blob para obtener el JWT firmado por el SA que estamos atacando. Para más información lee esto.
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script de python para abusar de este privilegio aquí y aquí. Para más información, consulta la investigación original.
iam.serviceAccounts.signJwt
Un atacante con los permisos mencionados podrá firmar tokens web JSON (JWTs) bien formados. La diferencia con el método anterior es que en lugar de hacer que Google firme un blob que contiene un JWT, usamos el método signJWT que ya espera un JWT. Esto lo hace más fácil de usar, pero solo puedes firmar JWT en lugar de cualquier byte.
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí y un script de python para abusar de este privilegio aquí. Para más información, consulta la investigación original.
iam.serviceAccounts.setIamPolicy
Un atacante con los permisos mencionados podrá agregar políticas IAM a las cuentas de servicio. Puedes abusar de esto para otorgarte a ti mismo los permisos que necesitas para suplantar la cuenta de servicio. En el siguiente ejemplo, nos estamos otorgando el rol roles/iam.serviceAccountTokenCreator
sobre el SA interesante:
Puedes encontrar un script para automatizar la creación, explotación y limpieza de un entorno vulnerable aquí.
iam.serviceAccounts.actAs
El permiso iam.serviceAccounts.actAs es como el permiso iam:PassRole de AWS. Es esencial para ejecutar tareas, como iniciar una instancia de Compute Engine, ya que otorga la capacidad de "actuar como" una Cuenta de Servicio, asegurando una gestión segura de permisos. Sin esto, los usuarios podrían obtener acceso indebido. Además, explotar el iam.serviceAccounts.actAs implica varios métodos, cada uno requiriendo un conjunto de permisos, a diferencia de otros métodos que solo necesitan uno.
Suplantar una cuenta de servicio puede ser muy útil para obtener nuevos y mejores privilegios. Hay tres formas en las que puedes suplantar otra cuenta de servicio:
Autenticación usando claves privadas RSA (cubierto arriba)
Autorización usando políticas de Cloud IAM (cubierto aquí)
Desplegando trabajos en servicios de GCP (más aplicable a la compromisión de una cuenta de usuario)
iam.serviceAccounts.getOpenIdToken
Un atacante con los permisos mencionados podrá generar un OpenID JWT. Estos se utilizan para afirmar la identidad y no necesariamente llevan ninguna autorización implícita contra un recurso.
Según este interesante post, es necesario indicar la audiencia (servicio donde deseas usar el token para autenticarte) y recibirás un JWT firmado por google indicando la cuenta de servicio y la audiencia del JWT.
Puedes generar un OpenIDToken (si tienes acceso) con:
Entonces puedes usarlo para acceder al servicio con:
Algunos servicios que admiten autenticación a través de este tipo de tokens son:
Google Cloud Endpoints (si se utiliza Google OIDC)
Puedes encontrar un ejemplo de cómo crear un token OpenID en nombre de una cuenta de servicio aquí.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)